ETH Price: $3,332.11 (-0.73%)

Contract

0x74E6Ab057f8a9Fd9355398a17579Cd4c90aB2B66
 

Overview

ETH Balance

0.00000000001 ETH

Eth Value

Less Than $0.01 (@ $3,332.11/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
_collect Patrona...120294322021-03-13 9:35:121389 days ago1615628112IN
0x74E6Ab05...c90aB2B66
0 ETH0.00428968106.9
Withdraw Artist ...119473352021-02-28 18:09:481402 days ago1614535788IN
0x74E6Ab05...c90aB2B66
0 ETH0.0026746126
Withdraw Artist ...116917002021-01-20 10:21:341441 days ago1611138094IN
0x74E6Ab05...c90aB2B66
0 ETH0.00222883105
Change Price115415182020-12-28 9:12:021464 days ago1609146722IN
0x74E6Ab05...c90aB2B66
0 ETH0.0063829692
Deposit Wei115415122020-12-28 9:11:111464 days ago1609146671IN
0x74E6Ab05...c90aB2B66
1.5 ETH0.0066273889
Withdraw Artist ...103222302020-06-23 13:14:061652 days ago1592918046IN
0x74E6Ab05...c90aB2B66
0 ETH0.0008490840
_collect Patrona...103222092020-06-23 13:09:381652 days ago1592917778IN
0x74E6Ab05...c90aB2B66
0 ETH0.0029490441
Withdraw Artist ...103221932020-06-23 13:07:191652 days ago1592917639IN
0x74E6Ab05...c90aB2B66
0 ETH0.0009700745.7
Deposit Wei88846652019-11-06 15:36:191882 days ago1573054579IN
0x74E6Ab05...c90aB2B66
0 ETH0.000071671
Withdraw Artist ...80455232019-06-28 9:24:442013 days ago1561713884IN
0x74E6Ab05...c90aB2B66
0 ETH0.0002159811
_collect Patrona...80454832019-06-28 9:12:512013 days ago1561713171IN
0x74E6Ab05...c90aB2B66
0 ETH0.000345145.21875
Withdraw Artist ...80454482019-06-28 9:04:312013 days ago1561712671IN
0x74E6Ab05...c90aB2B66
0 ETH0.000078544
Change Price77354042019-05-10 22:11:022062 days ago1557526262IN
0x74E6Ab05...c90aB2B66
0 ETH0.000184653
Change Price77171212019-05-08 1:28:552064 days ago1557278935IN
0x74E6Ab05...c90aB2B66
0 ETH0.000307765
Change Price75148342019-04-06 13:26:502096 days ago1554557210IN
0x74E6Ab05...c90aB2B66
0 ETH0.00012312
Deposit Wei74342062019-03-24 22:57:022109 days ago1553468222IN
0x74E6Ab05...c90aB2B66
20 ETH0.000056671
Change Price74201112019-03-22 18:21:162111 days ago1553278876IN
0x74E6Ab05...c90aB2B66
0 ETH0.000061551
Buy74200642019-03-22 18:10:402111 days ago1553278240IN
0x74E6Ab05...c90aB2B66
125 ETH0.000513153
Buy74193852019-03-22 15:33:322111 days ago1553268812IN
0x74E6Ab05...c90aB2B66
1.3 ETH0.000432232
Buy74145592019-03-21 21:30:432112 days ago1553203843IN
0x74E6Ab05...c90aB2B66
0.05 ETH0.000876364

Latest 10 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
119473352021-02-28 18:09:481402 days ago1614535788
0x74E6Ab05...c90aB2B66
0.87193088 ETH
118177082021-02-08 19:36:571422 days ago1612813017
0x74E6Ab05...c90aB2B66
150.98941316 ETH
118177082021-02-08 19:36:571422 days ago1612813017
0x74E6Ab05...c90aB2B66
150 ETH
116917002021-01-20 10:21:341441 days ago1611138094
0x74E6Ab05...c90aB2B66
6.17539726 ETH
103222302020-06-23 13:14:061652 days ago1592918046
0x74E6Ab05...c90aB2B66
7.5582949 ETH
103221932020-06-23 13:07:191652 days ago1592917639
0x74E6Ab05...c90aB2B66
4.31560426 ETH
80455232019-06-28 9:24:442013 days ago1561713884
0x74E6Ab05...c90aB2B66
1.59319216 ETH
80454482019-06-28 9:04:312013 days ago1561712671
0x74E6Ab05...c90aB2B66
4.99799202 ETH
74200642019-03-22 18:10:402111 days ago1553278240
0x74E6Ab05...c90aB2B66
120.99820624 ETH
74193852019-03-22 15:33:322111 days ago1553268812
0x74E6Ab05...c90aB2B66
0.34996909 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ArtSteward

Compiler Version
v0.5.0+commit.1d4f565a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: ArtSteward.sol
pragma solidity ^0.5.0;
import "IERC721Full.sol";
import "SafeMath.sol";

contract ArtSteward {
    
    /*
    This smart contract collects patronage from current owner through a Harberger tax model and 
    takes stewardship of the artwork if the patron can't pay anymore.

    Harberger Tax (COST): 
    - Artwork is always on sale.
    - You have to have a price set.
    - Tax (Patronage) is paid to maintain ownership.
    - Steward maints control over ERC721.
    */
    using SafeMath for uint256;
    
    uint256 public price; //in wei
    IERC721Full public art; // ERC721 NFT.
    
    uint256 public totalCollected; // all patronage ever collected
    uint256 public currentCollected; // amount currently collected for patron  
    uint256 public timeLastCollected; // 
    uint256 public deposit;
    address payable public artist;
    uint256 public artistFund;
    
    mapping (address => bool) public patrons;
    mapping (address => uint256) public timeHeld;
    mapping (address => uint256) public paid; // NOTE: not used [accident]

    uint256 public timeAcquired;
    
    // 5% patronage
    uint256 patronageNumerator = 50000000000;
    uint256 patronageDenominator = 1000000000000;

    enum StewardState { Foreclosed, Owned }
    StewardState public state;

    constructor(address payable _artist, address _artwork) public {
        art = IERC721Full(_artwork);
        art.setup();
        artist = _artist;
        state = StewardState.Foreclosed;
    } 

    event LogBuy(address indexed owner, uint256 indexed price);
    event LogPriceChange(uint256 indexed newPrice);
    event LogForeclosure(address indexed prevOwner);
    event LogCollection(uint256 indexed collected);
    
    modifier onlyPatron() {
        require(msg.sender == art.ownerOf(42), "Not patron");
        _;
    }

    modifier collectPatronage() {
       _collectPatronage(); 
       _;
    }

    /* public view functions */
    function patronageOwed() public view returns (uint256 patronageDue) {
        return price.mul(now.sub(timeLastCollected)).mul(patronageNumerator)
            .div(patronageDenominator).div(365 days);
    }

    function patronageOwedWithTimestamp() public view returns (uint256 patronageDue, uint256 timestamp) {
        return (patronageOwed(), now);
    }

    function foreclosed() public view returns (bool) {
        // returns whether it is in foreclosed state or not
        // depending on whether deposit covers patronage due
        // useful helper function when price should be zero, but contract doesn't reflect it yet.
        uint256 collection = patronageOwed();
        if(collection >= deposit) {
            return true;
        } else {
            return false;
        }
    }

    // same function as above, basically
    function depositAbleToWithdraw() public view returns (uint256) {
        uint256 collection = patronageOwed();
        if(collection >= deposit) {
            return 0;
        } else {
            return deposit.sub(collection);
        }
    }

    /*
    now + deposit/patronage per second 
    now + depositAbleToWithdraw/(price*nume/denom/365).
    */
    function foreclosureTime() public view returns (uint256) {
        // patronage per second
        uint256 pps = price.mul(patronageNumerator).div(patronageDenominator).div(365 days);
        return now + depositAbleToWithdraw().div(pps); // zero division if price is zero.
    }

    /* actions */
    function _collectPatronage() public {
        // determine patronage to pay
        if (state == StewardState.Owned) {
            uint256 collection = patronageOwed();
            
            // should foreclose and stake stewardship
            if (collection >= deposit) {
                // up to when was it actually paid for?
                timeLastCollected = timeLastCollected.add(((now.sub(timeLastCollected)).mul(deposit).div(collection)));
                collection = deposit; // take what's left.

                _foreclose();
            } else  {
                // just a normal collection
                timeLastCollected = now;
                currentCollected = currentCollected.add(collection);
            }
            
            deposit = deposit.sub(collection);
            totalCollected = totalCollected.add(collection);
            artistFund = artistFund.add(collection);
            emit LogCollection(collection);
        }
    }
    
    // note: anyone can deposit
    function depositWei() public payable collectPatronage {
        require(state != StewardState.Foreclosed, "Foreclosed");
        deposit = deposit.add(msg.value);
    }
    
    function buy(uint256 _newPrice) public payable collectPatronage {
        require(_newPrice > 0, "Price is zero");
        require(msg.value > price, "Not enough"); // >, coz need to have at least something for deposit
        address currentOwner = art.ownerOf(42);

        if (state == StewardState.Owned) {
            uint256 totalToPayBack = price;
            if(deposit > 0) {
                totalToPayBack = totalToPayBack.add(deposit);
            }  
    
            // pay previous owner their price + deposit back.
            address payable payableCurrentOwner = address(uint160(currentOwner));
            payableCurrentOwner.transfer(totalToPayBack);
        } else if(state == StewardState.Foreclosed) {
            state = StewardState.Owned;
            timeLastCollected = now;
        }
        
        deposit = msg.value.sub(price);
        transferArtworkTo(currentOwner, msg.sender, _newPrice);
        emit LogBuy(msg.sender, _newPrice);
    }

    function changePrice(uint256 _newPrice) public onlyPatron collectPatronage {
        require(state != StewardState.Foreclosed, "Foreclosed");
        require(_newPrice != 0, "Incorrect Price");
        
        price = _newPrice;
        emit LogPriceChange(price);
    }
    
    function withdrawDeposit(uint256 _wei) public onlyPatron collectPatronage returns (uint256) {
        _withdrawDeposit(_wei);
    }

    function withdrawArtistFunds() public {
        require(msg.sender == artist, "Not artist");
        artist.transfer(artistFund);
        artistFund = 0;
    }

    function exit() public onlyPatron collectPatronage {
        _withdrawDeposit(deposit);
    }

    /* internal */

    function _withdrawDeposit(uint256 _wei) internal {
        // note: can withdraw whole deposit, which puts it in immediate to be foreclosed state.
        require(deposit >= _wei, 'Withdrawing too much');

        deposit = deposit.sub(_wei);
        msg.sender.transfer(_wei); // msg.sender == patron

        if(deposit == 0) {
            _foreclose();
        }
    }

    function _foreclose() internal {
        // become steward of artwork (aka foreclose)
        address currentOwner = art.ownerOf(42);
        transferArtworkTo(currentOwner, address(this), 0);
        state = StewardState.Foreclosed;
        currentCollected = 0;

        emit LogForeclosure(currentOwner);
    }

    function transferArtworkTo(address _currentOwner, address _newOwner, uint256 _newPrice) internal {
        // note: it would also tabulate time held in stewardship by smart contract
        timeHeld[_currentOwner] = timeHeld[_currentOwner].add((timeLastCollected.sub(timeAcquired)));
        
        art.transferFrom(_currentOwner, _newOwner, 42);

        price = _newPrice;
        timeAcquired = now;
        patrons[_newOwner] = true;
    }
}

File 2 of 7: IERC165.sol
pragma solidity ^0.5.0;

/**
 * @title IERC165
 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
 */
interface 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);
}

File 3 of 7: IERC721.sol
pragma solidity ^0.5.0;

import "IERC165.sol";

/**
 * @title ERC721 Non-Fungible Token Standard basic interface
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract IERC721 is IERC165 {
    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 setup() public;

    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 memory data) public;
}

File 4 of 7: IERC721Enumerable.sol
pragma solidity ^0.5.0;

import "IERC721.sol";

/**
 * @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 is IERC721 {
    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);
}

File 5 of 7: IERC721Full.sol
pragma solidity ^0.5.0;

import "IERC721.sol";
import "IERC721Enumerable.sol";
import "IERC721Metadata.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, full implementation interface
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract IERC721Full is IERC721, IERC721Enumerable, IERC721Metadata {
    // solhint-disable-previous-line no-empty-blocks
}

File 6 of 7: IERC721Metadata.sol
pragma solidity ^0.5.0;

import "IERC721.sol";

/**
 * @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 is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 7 of 7: SafeMath.sol
pragma solidity ^0.5.0;

/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {
    /**
     * @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 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 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 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 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;
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[],"name":"withdrawArtistFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"depositWei","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"patrons","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"art","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"foreclosed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_wei","type":"uint256"}],"name":"withdrawDeposit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"_collectPatronage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"artist","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"artistFund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"timeAcquired","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"foreclosureTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"patronageOwedWithTimestamp","outputs":[{"name":"patronageDue","type":"uint256"},{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"patronageOwed","outputs":[{"name":"patronageDue","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"depositAbleToWithdraw","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"timeHeld","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"paid","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentCollected","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"state","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"deposit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newPrice","type":"uint256"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"totalCollected","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"timeLastCollected","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_artist","type":"address"},{"name":"_artwork","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"price","type":"uint256"}],"name":"LogBuy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newPrice","type":"uint256"}],"name":"LogPriceChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"prevOwner","type":"address"}],"name":"LogForeclosure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"collected","type":"uint256"}],"name":"LogCollection","type":"event"}]

6080604052640ba43b7400600c5564e8d4a51000600d5534801561002257600080fd5b50604051604080611bee8339810180604052604081101561004257600080fd5b81019080805190602001909291908051906020019092919050505080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ba0bba406040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15801561012457600080fd5b505af1158015610138573d6000803e3d6000fd5b5050505081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600e60006101000a81548160ff0219169083600181111561019c57fe5b02179055505050611a3c806101b26000396000f3fe608060405260043610610149576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630ee591ba1461014e57806315488b88146101655780632ef463201461016f578063301bd28e146101d8578063325678031461022f57806333289a461461025e5780633989e231146102ad57806343bc1612146102c45780634bd8aeac1461031b57806355c3bf1014610346578063879d5aad146103715780638bb66d8a1461039c578063929417db146103ce5780639443c2e3146103f95780639fc7a65b14610424578063a035b1fe14610489578063a2b40d19146104b4578063a340cf79146104ef578063a97d70b114610554578063c19d93fb1461057f578063d0e30db0146105b8578063d96a094a146105e3578063e29eb83614610611578063e9fad8ee1461063c578063f07af5f714610653575b600080fd5b34801561015a57600080fd5b5061016361067e565b005b61016d6107b8565b005b34801561017b57600080fd5b506101be6004803603602081101561019257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061087b565b604051808215151515815260200191505060405180910390f35b3480156101e457600080fd5b506101ed61089b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561023b57600080fd5b506102446108c1565b604051808215151515815260200191505060405180910390f35b34801561026a57600080fd5b506102976004803603602081101561028157600080fd5b81019080803590602001909291905050506108ec565b6040518082815260200191505060405180910390f35b3480156102b957600080fd5b506102c2610a71565b005b3480156102d057600080fd5b506102d9610bc1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561032757600080fd5b50610330610be7565b6040518082815260200191505060405180910390f35b34801561035257600080fd5b5061035b610bed565b6040518082815260200191505060405180910390f35b34801561037d57600080fd5b50610386610bf3565b6040518082815260200191505060405180910390f35b3480156103a857600080fd5b506103b1610c5b565b604051808381526020018281526020019250505060405180910390f35b3480156103da57600080fd5b506103e3610c6f565b6040518082815260200191505060405180910390f35b34801561040557600080fd5b5061040e610cdd565b6040518082815260200191505060405180910390f35b34801561043057600080fd5b506104736004803603602081101561044757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d1b565b6040518082815260200191505060405180910390f35b34801561049557600080fd5b5061049e610d33565b6040518082815260200191505060405180910390f35b3480156104c057600080fd5b506104ed600480360360208110156104d757600080fd5b8101908080359060200190929190505050610d39565b005b3480156104fb57600080fd5b5061053e6004803603602081101561051257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ffe565b6040518082815260200191505060405180910390f35b34801561056057600080fd5b50610569611016565b6040518082815260200191505060405180910390f35b34801561058b57600080fd5b5061059461101c565b604051808260018111156105a457fe5b60ff16815260200191505060405180910390f35b3480156105c457600080fd5b506105cd61102f565b6040518082815260200191505060405180910390f35b61060f600480360360208110156105f957600080fd5b8101908080359060200190929190505050611035565b005b34801561061d57600080fd5b5061062661136f565b6040518082815260200191505060405180910390f35b34801561064857600080fd5b50610651611375565b005b34801561065f57600080fd5b506106686114f7565b6040518082815260200191505060405180910390f35b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4e6f74206172746973740000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6007549081150290604051600060405180830381858888f193505050501580156107ad573d6000803e3d6000fd5b506000600781905550565b6107c0610a71565b600060018111156107cd57fe5b600e60009054906101000a900460ff1660018111156107e857fe5b1415151561085e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f466f7265636c6f7365640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b610873346005546114fd90919063ffffffff16565b600581905550565b60086020528060005260406000206000915054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806108cc610c6f565b9050600554811015156108e35760019150506108e9565b60009150505b90565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e602a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561097e57600080fd5b505afa158015610992573d6000803e3d6000fd5b505050506040513d60208110156109a857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4e6f7420706174726f6e0000000000000000000000000000000000000000000081525060200191505060405180910390fd5b610a63610a71565b610a6c8261151e565b919050565b600180811115610a7d57fe5b600e60009054906101000a900460ff166001811115610a9857fe5b1415610bbf576000610aa8610c6f565b905060055481101515610b1c57610b04610af382610ae5600554610ad76004544261161190919063ffffffff16565b61163390919063ffffffff16565b61167190919063ffffffff16565b6004546114fd90919063ffffffff16565b6004819055506005549050610b1761169b565b610b3f565b42600481905550610b38816003546114fd90919063ffffffff16565b6003819055505b610b548160055461161190919063ffffffff16565b600581905550610b6f816002546114fd90919063ffffffff16565b600281905550610b8a816007546114fd90919063ffffffff16565b600781905550807f54acb82a9e70d7c289b149758d23167c915428ae854a7aa4abe5bf2f4ef29f3660405160405180910390a2505b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b600b5481565b600080610c376301e13380610c29600d54610c1b600c5460005461163390919063ffffffff16565b61167190919063ffffffff16565b61167190919063ffffffff16565b9050610c5381610c45610cdd565b61167190919063ffffffff16565b420191505090565b600080610c66610c6f565b42915091509091565b6000610cd86301e13380610cca600d54610cbc600c54610cae610c9d6004544261161190919063ffffffff16565b60005461163390919063ffffffff16565b61163390919063ffffffff16565b61167190919063ffffffff16565b61167190919063ffffffff16565b905090565b600080610ce8610c6f565b905060055481101515610cff576000915050610d18565b610d148160055461161190919063ffffffff16565b9150505b90565b60096020528060005260406000206000915090505481565b60005481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e602a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015610dc957600080fd5b505afa158015610ddd573d6000803e3d6000fd5b505050506040513d6020811015610df357600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ea6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4e6f7420706174726f6e0000000000000000000000000000000000000000000081525060200191505060405180910390fd5b610eae610a71565b60006001811115610ebb57fe5b600e60009054906101000a900460ff166001811115610ed657fe5b14151515610f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f466f7265636c6f7365640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008114151515610fc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e636f7272656374205072696365000000000000000000000000000000000081525060200191505060405180910390fd5b806000819055506000547f854d6511a28585103049c7770618450f7c9aeb580c69db2913d63869663f475160405160405180910390a250565b600a6020528060005260406000206000915090505481565b60035481565b600e60009054906101000a900460ff1681565b60055481565b61103d610a71565b6000811115156110b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f5072696365206973207a65726f0000000000000000000000000000000000000081525060200191505060405180910390fd5b6000543411151561112e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4e6f7420656e6f7567680000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e602a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b1580156111c057600080fd5b505afa1580156111d4573d6000803e3d6000fd5b505050506040513d60208110156111ea57600080fd5b8101908080519060200190929190505050905060018081111561120957fe5b600e60009054906101000a900460ff16600181111561122457fe5b14156112a6576000805490506000600554111561125357611250600554826114fd90919063ffffffff16565b90505b60008290508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561129e573d6000803e3d6000fd5b505050611301565b600060018111156112b357fe5b600e60009054906101000a900460ff1660018111156112ce57fe5b1415611300576001600e60006101000a81548160ff021916908360018111156112f357fe5b0217905550426004819055505b5b6113166000543461161190919063ffffffff16565b6005819055506113278133846117e8565b813373ffffffffffffffffffffffffffffffffffffffff167f4f79409f494e81c38036d80aa8a6507c2cb08d90bfb2fead5519447646b3497e60405160405180910390a35050565b60025481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e602a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561140557600080fd5b505afa158015611419573d6000803e3d6000fd5b505050506040513d602081101561142f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4e6f7420706174726f6e0000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6114ea610a71565b6114f560055461151e565b565b60045481565b600080828401905083811015151561151457600080fd5b8091505092915050565b8060055410151515611598576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5769746864726177696e6720746f6f206d75636800000000000000000000000081525060200191505060405180910390fd5b6115ad8160055461161190919063ffffffff16565b6005819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115f9573d6000803e3d6000fd5b506000600554141561160e5761160d61169b565b5b50565b600082821115151561162257600080fd5b600082840390508091505092915050565b600080831415611646576000905061166b565b6000828402905082848281151561165957fe5b0414151561166657600080fd5b809150505b92915050565b6000808211151561168157600080fd5b6000828481151561168e57fe5b0490508091505092915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e602a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561172d57600080fd5b505afa158015611741573d6000803e3d6000fd5b505050506040513d602081101561175757600080fd5b81019080805190602001909291905050509050611776813060006117e8565b6000600e60006101000a81548160ff0219169083600181111561179557fe5b021790555060006003819055508073ffffffffffffffffffffffffffffffffffffffff167f6d6bbefef62d4cb6d0e3a4dd306a71d3632319b1e03659513df86b247dd657fe60405160405180910390a250565b611850611802600b5460045461161190919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114fd90919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8484602a6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561198d57600080fd5b505af11580156119a1573d6000803e3d6000fd5b505050508060008190555042600b819055506001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505056fea165627a7a72305820754c1387a2469232547626372dde5a5fb177e038929aa8eaefc2228d8f3bff6400290000000000000000000000000cacc6104d8cd9d7b2850b4f35c65c1ecdeece030000000000000000000000006d7c26f2e77d0ccc200464c8b2040c0b840b28a2

Deployed Bytecode

0x608060405260043610610149576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630ee591ba1461014e57806315488b88146101655780632ef463201461016f578063301bd28e146101d8578063325678031461022f57806333289a461461025e5780633989e231146102ad57806343bc1612146102c45780634bd8aeac1461031b57806355c3bf1014610346578063879d5aad146103715780638bb66d8a1461039c578063929417db146103ce5780639443c2e3146103f95780639fc7a65b14610424578063a035b1fe14610489578063a2b40d19146104b4578063a340cf79146104ef578063a97d70b114610554578063c19d93fb1461057f578063d0e30db0146105b8578063d96a094a146105e3578063e29eb83614610611578063e9fad8ee1461063c578063f07af5f714610653575b600080fd5b34801561015a57600080fd5b5061016361067e565b005b61016d6107b8565b005b34801561017b57600080fd5b506101be6004803603602081101561019257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061087b565b604051808215151515815260200191505060405180910390f35b3480156101e457600080fd5b506101ed61089b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561023b57600080fd5b506102446108c1565b604051808215151515815260200191505060405180910390f35b34801561026a57600080fd5b506102976004803603602081101561028157600080fd5b81019080803590602001909291905050506108ec565b6040518082815260200191505060405180910390f35b3480156102b957600080fd5b506102c2610a71565b005b3480156102d057600080fd5b506102d9610bc1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561032757600080fd5b50610330610be7565b6040518082815260200191505060405180910390f35b34801561035257600080fd5b5061035b610bed565b6040518082815260200191505060405180910390f35b34801561037d57600080fd5b50610386610bf3565b6040518082815260200191505060405180910390f35b3480156103a857600080fd5b506103b1610c5b565b604051808381526020018281526020019250505060405180910390f35b3480156103da57600080fd5b506103e3610c6f565b6040518082815260200191505060405180910390f35b34801561040557600080fd5b5061040e610cdd565b6040518082815260200191505060405180910390f35b34801561043057600080fd5b506104736004803603602081101561044757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d1b565b6040518082815260200191505060405180910390f35b34801561049557600080fd5b5061049e610d33565b6040518082815260200191505060405180910390f35b3480156104c057600080fd5b506104ed600480360360208110156104d757600080fd5b8101908080359060200190929190505050610d39565b005b3480156104fb57600080fd5b5061053e6004803603602081101561051257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ffe565b6040518082815260200191505060405180910390f35b34801561056057600080fd5b50610569611016565b6040518082815260200191505060405180910390f35b34801561058b57600080fd5b5061059461101c565b604051808260018111156105a457fe5b60ff16815260200191505060405180910390f35b3480156105c457600080fd5b506105cd61102f565b6040518082815260200191505060405180910390f35b61060f600480360360208110156105f957600080fd5b8101908080359060200190929190505050611035565b005b34801561061d57600080fd5b5061062661136f565b6040518082815260200191505060405180910390f35b34801561064857600080fd5b50610651611375565b005b34801561065f57600080fd5b506106686114f7565b6040518082815260200191505060405180910390f35b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4e6f74206172746973740000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6007549081150290604051600060405180830381858888f193505050501580156107ad573d6000803e3d6000fd5b506000600781905550565b6107c0610a71565b600060018111156107cd57fe5b600e60009054906101000a900460ff1660018111156107e857fe5b1415151561085e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f466f7265636c6f7365640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b610873346005546114fd90919063ffffffff16565b600581905550565b60086020528060005260406000206000915054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806108cc610c6f565b9050600554811015156108e35760019150506108e9565b60009150505b90565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e602a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561097e57600080fd5b505afa158015610992573d6000803e3d6000fd5b505050506040513d60208110156109a857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4e6f7420706174726f6e0000000000000000000000000000000000000000000081525060200191505060405180910390fd5b610a63610a71565b610a6c8261151e565b919050565b600180811115610a7d57fe5b600e60009054906101000a900460ff166001811115610a9857fe5b1415610bbf576000610aa8610c6f565b905060055481101515610b1c57610b04610af382610ae5600554610ad76004544261161190919063ffffffff16565b61163390919063ffffffff16565b61167190919063ffffffff16565b6004546114fd90919063ffffffff16565b6004819055506005549050610b1761169b565b610b3f565b42600481905550610b38816003546114fd90919063ffffffff16565b6003819055505b610b548160055461161190919063ffffffff16565b600581905550610b6f816002546114fd90919063ffffffff16565b600281905550610b8a816007546114fd90919063ffffffff16565b600781905550807f54acb82a9e70d7c289b149758d23167c915428ae854a7aa4abe5bf2f4ef29f3660405160405180910390a2505b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b600b5481565b600080610c376301e13380610c29600d54610c1b600c5460005461163390919063ffffffff16565b61167190919063ffffffff16565b61167190919063ffffffff16565b9050610c5381610c45610cdd565b61167190919063ffffffff16565b420191505090565b600080610c66610c6f565b42915091509091565b6000610cd86301e13380610cca600d54610cbc600c54610cae610c9d6004544261161190919063ffffffff16565b60005461163390919063ffffffff16565b61163390919063ffffffff16565b61167190919063ffffffff16565b61167190919063ffffffff16565b905090565b600080610ce8610c6f565b905060055481101515610cff576000915050610d18565b610d148160055461161190919063ffffffff16565b9150505b90565b60096020528060005260406000206000915090505481565b60005481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e602a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015610dc957600080fd5b505afa158015610ddd573d6000803e3d6000fd5b505050506040513d6020811015610df357600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ea6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4e6f7420706174726f6e0000000000000000000000000000000000000000000081525060200191505060405180910390fd5b610eae610a71565b60006001811115610ebb57fe5b600e60009054906101000a900460ff166001811115610ed657fe5b14151515610f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f466f7265636c6f7365640000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008114151515610fc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e636f7272656374205072696365000000000000000000000000000000000081525060200191505060405180910390fd5b806000819055506000547f854d6511a28585103049c7770618450f7c9aeb580c69db2913d63869663f475160405160405180910390a250565b600a6020528060005260406000206000915090505481565b60035481565b600e60009054906101000a900460ff1681565b60055481565b61103d610a71565b6000811115156110b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f5072696365206973207a65726f0000000000000000000000000000000000000081525060200191505060405180910390fd5b6000543411151561112e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4e6f7420656e6f7567680000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e602a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b1580156111c057600080fd5b505afa1580156111d4573d6000803e3d6000fd5b505050506040513d60208110156111ea57600080fd5b8101908080519060200190929190505050905060018081111561120957fe5b600e60009054906101000a900460ff16600181111561122457fe5b14156112a6576000805490506000600554111561125357611250600554826114fd90919063ffffffff16565b90505b60008290508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561129e573d6000803e3d6000fd5b505050611301565b600060018111156112b357fe5b600e60009054906101000a900460ff1660018111156112ce57fe5b1415611300576001600e60006101000a81548160ff021916908360018111156112f357fe5b0217905550426004819055505b5b6113166000543461161190919063ffffffff16565b6005819055506113278133846117e8565b813373ffffffffffffffffffffffffffffffffffffffff167f4f79409f494e81c38036d80aa8a6507c2cb08d90bfb2fead5519447646b3497e60405160405180910390a35050565b60025481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e602a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561140557600080fd5b505afa158015611419573d6000803e3d6000fd5b505050506040513d602081101561142f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4e6f7420706174726f6e0000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6114ea610a71565b6114f560055461151e565b565b60045481565b600080828401905083811015151561151457600080fd5b8091505092915050565b8060055410151515611598576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5769746864726177696e6720746f6f206d75636800000000000000000000000081525060200191505060405180910390fd5b6115ad8160055461161190919063ffffffff16565b6005819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115f9573d6000803e3d6000fd5b506000600554141561160e5761160d61169b565b5b50565b600082821115151561162257600080fd5b600082840390508091505092915050565b600080831415611646576000905061166b565b6000828402905082848281151561165957fe5b0414151561166657600080fd5b809150505b92915050565b6000808211151561168157600080fd5b6000828481151561168e57fe5b0490508091505092915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e602a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561172d57600080fd5b505afa158015611741573d6000803e3d6000fd5b505050506040513d602081101561175757600080fd5b81019080805190602001909291905050509050611776813060006117e8565b6000600e60006101000a81548160ff0219169083600181111561179557fe5b021790555060006003819055508073ffffffffffffffffffffffffffffffffffffffff167f6d6bbefef62d4cb6d0e3a4dd306a71d3632319b1e03659513df86b247dd657fe60405160405180910390a250565b611850611802600b5460045461161190919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114fd90919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8484602a6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561198d57600080fd5b505af11580156119a1573d6000803e3d6000fd5b505050508060008190555042600b819055506001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505056fea165627a7a72305820754c1387a2469232547626372dde5a5fb177e038929aa8eaefc2228d8f3bff640029

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

0000000000000000000000000cacc6104d8cd9d7b2850b4f35c65c1ecdeece030000000000000000000000006d7c26f2e77d0ccc200464c8b2040c0b840b28a2

-----Decoded View---------------
Arg [0] : _artist (address): 0x0CaCC6104D8Cd9d7b2850b4f35c65C1eCDEECe03
Arg [1] : _artwork (address): 0x6d7C26F2E77d0cCc200464C8b2040c0B840b28a2

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000cacc6104d8cd9d7b2850b4f35c65c1ecdeece03
Arg [1] : 0000000000000000000000006d7c26f2e77d0ccc200464c8b2040c0b840b28a2


Deployed Bytecode Sourcemap

74:7382:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6029:159;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6029:159:0;;;;;;4454:168;;;;;;886:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;886:40:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;886:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;550:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;550:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2300:435;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2300:435:0;;;;;;;;;;;;;;;;;;;;;;;;;;;5892:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5892:131:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5892:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3446:966;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3446:966:0;;;;;;815:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;815:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;850:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;850:25:0;;;;;;;;;;;;;;;;;;;;;;;1058:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1058:27:0;;;;;;;;;;;;;;;;;;;;;;;3143:279;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3143:279:0;;;;;;;;;;;;;;;;;;;;;;;2148:146;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2148:146:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1936:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1936:206:0;;;;;;;;;;;;;;;;;;;;;;;2782:245;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2782:245:0;;;;;;;;;;;;;;;;;;;;;;;932:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;932:44:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;932:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;515:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;515:20:0;;;;;;;;;;;;;;;;;;;;;;;5611:271;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5611:271:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5611:271:0;;;;;;;;;;;;;;;;;;;;982:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;982:40:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;982:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;665:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;665:31:0;;;;;;;;;;;;;;;;;;;;;;;1257:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1257:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;787:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;787:22:0;;;;;;;;;;;;;;;;;;;;;;;4632:973;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4632:973:0;;;;;;;;;;;;;;;;;;;;598:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;598:29:0;;;;;;;;;;;;;;;;;;;;;;;6194:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6194:93:0;;;;;;745:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;745:32:0;;;;;;;;;;;;;;;;;;;;;;;6029:159;6099:6;;;;;;;;;;;6085:20;;:10;:20;;;6077:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6130:6;;;;;;;;;;;:15;;:27;6146:10;;6130:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6130:27:0;6180:1;6167:10;:14;;;;6029:159::o;4454:168::-;1861:19;:17;:19::i;:::-;4535:23;4526:32;;;;;;;;:5;;;;;;;;;;;:32;;;;;;;;;;4518:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4593:22;4605:9;4593:7;;:11;;:22;;;;:::i;:::-;4583:7;:32;;;;4454:168::o;886:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;550:22::-;;;;;;;;;;;;;:::o;2300:435::-;2343:4;2578:18;2599:15;:13;:15::i;:::-;2578:36;;2641:7;;2627:10;:21;;2624:105;;;2671:4;2664:11;;;;;2624:105;2713:5;2706:12;;;2300:435;;:::o;5892:131::-;5975:7;1770:3;;;;;;;;;;;:11;;;1782:2;1770:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1770:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1770:15:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1770:15:0;;;;;;;;;;;;;;;;1756:29;;:10;:29;;;1748:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1861:19;:17;:19::i;:::-;5994:22;6011:4;5994:16;:22::i;:::-;5892:131;;;:::o;3446:966::-;3543:18;3534:27;;;;;;;;:5;;;;;;;;;;;:27;;;;;;;;;3530:876;;;3577:18;3598:15;:13;:15::i;:::-;3577:36;;3712:7;;3698:10;:21;;3694:484;;;3815:82;3838:57;3884:10;3838:41;3871:7;;3839:26;3847:17;;3839:3;:7;;:26;;;;:::i;:::-;3838:32;;:41;;;;:::i;:::-;:45;;:57;;;;:::i;:::-;3815:17;;:21;;:82;;;;:::i;:::-;3795:17;:102;;;;3928:7;;3915:20;;3975:12;:10;:12::i;:::-;3694:484;;;4091:3;4071:17;:23;;;;4131:32;4152:10;4131:16;;:20;;:32;;;;:::i;:::-;4112:16;:51;;;;3694:484;4214:23;4226:10;4214:7;;:11;;:23;;;;:::i;:::-;4204:7;:33;;;;4268:30;4287:10;4268:14;;:18;;:30;;;;:::i;:::-;4251:14;:47;;;;4325:26;4340:10;4325;;:14;;:26;;;;:::i;:::-;4312:10;:39;;;;4384:10;4370:25;;;;;;;;;;3530:876;;3446:966::o;815:29::-;;;;;;;;;;;;;:::o;850:25::-;;;;:::o;1058:27::-;;;;:::o;3143:279::-;3191:7;3242:11;3256:69;3316:8;3256:55;3290:20;;3256:29;3266:18;;3256:5;;:9;;:29;;;;:::i;:::-;:33;;:55;;;;:::i;:::-;:59;;:69;;;;:::i;:::-;3242:83;;3348:32;3376:3;3348:23;:21;:23::i;:::-;:27;;:32;;;;:::i;:::-;3342:3;:38;3335:45;;;3143:279;:::o;2148:146::-;2207:20;2229:17;2266:15;:13;:15::i;:::-;2283:3;2258:29;;;;2148:146;;:::o;1936:206::-;1982:20;2021:114;2126:8;2021:100;2100:20;;2021:61;2063:18;;2021:37;2031:26;2039:17;;2031:3;:7;;:26;;;;:::i;:::-;2021:5;;:9;;:37;;;;:::i;:::-;:41;;:61;;;;:::i;:::-;:78;;:100;;;;:::i;:::-;:104;;:114;;;;:::i;:::-;2014:121;;1936:206;:::o;2782:245::-;2836:7;2855:18;2876:15;:13;:15::i;:::-;2855:36;;2918:7;;2904:10;:21;;2901:120;;;2948:1;2941:8;;;;;2901:120;2987:23;2999:10;2987:7;;:11;;:23;;;;:::i;:::-;2980:30;;;2782:245;;:::o;932:44::-;;;;;;;;;;;;;;;;;:::o;515:20::-;;;;:::o;5611:271::-;1770:3;;;;;;;;;;;:11;;;1782:2;1770:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1770:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1770:15:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1770:15:0;;;;;;;;;;;;;;;;1756:29;;:10;:29;;;1748:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1861:19;:17;:19::i;:::-;5713:23;5704:32;;;;;;;;:5;;;;;;;;;;;:32;;;;;;;;;;5696:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5782:1;5769:9;:14;;5761:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5830:9;5822:5;:17;;;;5869:5;;5854:21;;;;;;;;;;5611:271;:::o;982:40::-;;;;;;;;;;;;;;;;;:::o;665:31::-;;;;:::o;1257:25::-;;;;;;;;;;;;;:::o;787:22::-;;;;:::o;4632:973::-;1861:19;:17;:19::i;:::-;4726:1;4714:9;:13;4706:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4775:5;;4763:9;:17;4755:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4859:20;4882:3;;;;;;;;;;;:11;;;4894:2;4882:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4882:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4882:15:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4882:15:0;;;;;;;;;;;;;;;;4859:38;;4921:18;4912:27;;;;;;;;:5;;;;;;;;;;;:27;;;;;;;;;4908:534;;;4955:22;4980:5;;4955:30;;5012:1;5002:7;;:11;4999:93;;;5050:27;5069:7;;5050:14;:18;;:27;;;;:::i;:::-;5033:44;;4999:93;5174:35;5228:12;5174:68;;5256:19;:28;;:44;5285:14;5256:44;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5256:44:0;4908:534;;;;;5329:23;5320:32;;;;;;;;:5;;;;;;;;;;;:32;;;;;;;;;5317:125;;;5376:18;5368:5;;:26;;;;;;;;;;;;;;;;;;;;;;;;5428:3;5408:17;:23;;;;5317:125;4908:534;5470:20;5484:5;;5470:9;:13;;:20;;;;:::i;:::-;5460:7;:30;;;;5500:54;5518:12;5532:10;5544:9;5500:17;:54::i;:::-;5588:9;5576:10;5569:29;;;;;;;;;;;;1890:1;4632:973;:::o;598:29::-;;;;:::o;6194:93::-;1770:3;;;;;;;;;;;:11;;;1782:2;1770:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1770:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1770:15:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1770:15:0;;;;;;;;;;;;;;;;1756:29;;:10;:29;;;1748:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1861:19;:17;:19::i;:::-;6255:25;6272:7;;6255:16;:25::i;:::-;6194:93::o;745:32::-;;;;:::o;1439:145:6:-;1497:7;1516:9;1532:1;1528;:5;1516:17;;1556:1;1551;:6;;1543:15;;;;;;;;1576:1;1569:8;;;1439:145;;;;:::o;6313:371:0:-;6487:4;6476:7;;:15;;6468:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6537:17;6549:4;6537:7;;:11;;:17;;;;:::i;:::-;6527:7;:27;;;;6564:10;:19;;:25;6584:4;6564:25;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6564:25:0;6638:1;6627:7;;:12;6624:54;;;6655:12;:10;:12::i;:::-;6624:54;6313:371;:::o;1211:145:6:-;1269:7;1301:1;1296;:6;;1288:15;;;;;;;;1313:9;1329:1;1325;:5;1313:17;;1348:1;1341:8;;;1211:145;;;;:::o;231:421::-;289:7;534:1;529;:6;525:45;;;558:1;551:8;;;;525:45;580:9;596:1;592;:5;580:17;;624:1;619;615;:5;;;;;;;;:10;607:19;;;;;;;;644:1;637:8;;;231:421;;;;;:::o;782:296::-;840:7;937:1;933;:5;925:14;;;;;;;;949:9;965:1;961;:5;;;;;;;;949:17;;1070:1;1063:8;;;782:296;;;;:::o;6690:313:0:-;6784:20;6807:3;;;;;;;;;;;:11;;;6819:2;6807:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6807:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6807:15:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6807:15:0;;;;;;;;;;;;;;;;6784:38;;6832:49;6850:12;6872:4;6879:1;6832:17;:49::i;:::-;6899:23;6891:5;;:31;;;;;;;;;;;;;;;;;;;;;;;;6951:1;6932:16;:20;;;;6983:12;6968:28;;;;;;;;;;;;6690:313;:::o;7009:445::-;7225:66;7254:35;7276:12;;7254:17;;:21;;:35;;;;:::i;:::-;7225:8;:23;7234:13;7225:23;;;;;;;;;;;;;;;;:27;;:66;;;;:::i;:::-;7199:8;:23;7208:13;7199:23;;;;;;;;;;;;;;;:92;;;;7310:3;;;;;;;;;;;:16;;;7327:13;7342:9;7353:2;7310:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7310:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7310:46:0;;;;7375:9;7367:5;:17;;;;7409:3;7394:12;:18;;;;7443:4;7422:7;:18;7430:9;7422:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;7009:445;;;:::o

Swarm Source

bzzr://754c1387a2469232547626372dde5a5fb177e038929aa8eaefc2228d8f3bff64

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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