Sponsored Link:   Revain - How to find moon tokens to invest? See what crypto experts are saying. Read reviews!
 Latest 25 txns from a total Of 28857 transactions (> more than 25 PendingTxns)
View All

TxHash Age From To Value [TxFee]
0x3922526fc3617008a74da085c52812ebd51a0239bd28500be5ecdd26ce31acf3(pending)0xe627c63ced21671003190cfc653a0366a6b1adce  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0xdf747939233f028de367df577f080c9d64d3098a052810b518348ef00e5e75b9(pending)0xb2d09e21cd287f719e82b50fa09f0e86e0506af8  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x259a3c1a6d101257f2b98d0e938d062a239c62ac6583a4d31a1a90a077bcaaea(pending)0xa5f18bf0a09acdf9044bae3a43032af1d108fe18  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x6f290454fdfac6542f16f0a9ddf71a34680b0435a3514a16ae560c6c3f1248f6(pending)0xf0032a37ddab9d4b71379ae33736eb1a35941794  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x060b72b9689d01fa914f67eeb5e609c0ab378866937cb2a864d73fd70e5cbc14(pending)0x9c01ae75db1bc6dfc0f06184ca8ca779bbe09974  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x5aa324acba16b679bd8ab72e63a2fe6e7e440f8dcc6ba63f243e17556852c6ce(pending)0xd17f532829b12cff21e920be6d6582a57f816803  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x297a6935c2ae6e05e690a2d2077dc71207532f85e8aa604781c70f208f88cac6(pending)0xa62ff822e8dc95a9bc57d39e31523bd0671a293f  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x7dda59ee82be3d2aa8195eb0bfdd659818107488d09d0be7cf579ce1beeeacca(pending)0xe35a7d557e7d56d88f2ba10865f5494d7c2c2d83  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x8c077d0dbedfba5e821e4fe5f5e4181ea3f64d691a8dbc88829cd68273dc0496(pending)0x25565041dfa00528cedaab2eb73e79194d35b8e0  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x1be7adc37c2466f4a395dc7c83e84262b5791561afa38b87426f6254508c46c5(pending)0x886fe8ede0ca538898bcb861ae0c20da1d1b77a4  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0xa5ffceebaa659358f951fb42adb95e556b8e97f7e6154d44578168a22057c6de(pending)0x57928f6af6622ac329215968b89b082473089259  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0xac17fd53a6b14d0d23c6b734d736ee3a0c1f43c7e9bac0bbfd340031f0a838a3(pending)0x4582c009abb44d1bb9104aa2b436b41448f97600  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x50c8b288b15845151207038020ea69422a27c45e863eb0cb1e80ea0576a42a19(pending)0x635c7a4568aabd344ec62fb38f6d9f60b5e7cbd4  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x9cb54d3c2ac820020b6fe537c26b2bda5a438df97b0cc5ab30aa418e836a7eb9(pending)0xa65fae5a2a46b948ed0d31d343eb8b8aa2a71b1a  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x530551776f464dde5c0d80a98e07971e14a03babce4fc650e46610e1c9389a2c(pending)0x6803b084065dd919b6b43b9f6774a21e2e58cb99  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x8af7bdeb44d963563533e32ed52192282457a060e74ab4d9d42df399b0997892(pending)0xa2db92f3ec1d3a47261b6640d6cf3a552a69ff74  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0xfa5c08c3872982525b08f5b614e671ebb45551b6bf0c8ec1009079373a0c7aa6(pending)0xdd3799e0ad358076586702e449591c62f2320fed  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0xfc9f7b2059e7335991e18364f64687a0a17d144aa9345cf86b789d5dc4c7cce0(pending)0x9aebc3354d8ab5a67e311150fd1cbaaeba1802ef  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x91eb6df55e42af9fae2bf00419ea85ff9ecb4d552381f6ab726b02fdd11878b8(pending)0x2e4ede6283cc3ba9299bdd6248c612cdef331e4e  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x4d10cb238c6526f600e3db1dc8a9875081918ae7fb1952efa407fe34e1852a34(pending)0x8b123cbd066eb7197f56dee92b12438a9b98d26d  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x7eaf382c434f8c906d252f26d97aa310ee387e6d94a06ad1230dcb2f798a1591(pending)0xa35745a470c73309042e85a9b8da150399207636  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x9bafc8d2a926bc0394ea91abc8460480902ba99ce57ac6f0f781ad34f0383d55(pending)0x5e141c8921ad8b800461a7d3b02d200566aca9e6  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x8af26a47629e406f6e373b41d8c563e54523188903146f82a3e157d0ebb0ba9d(pending)0x02b12059f4817b921f7cabf6b21a835548909768  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0x674b37b83e3b3b67a87dc1f98ca99a76eee4754c16b0a7ba050f75b268547256(pending)0x3f583dc57316423e5d9e9d6d50b4a27d5b472194  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
0xf9df4a6314e40786ad92b8c2e80be1c3ba35e3b3699e1a390c4632bd0f47d36b(pending)0xe1c74481c510ea850857293d351b0f56b87e0bd3  IN  0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether(pending)
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Warning: The compiled contract might be susceptible to ZeroFunctionSelector (very low-severity) Solidity compiler bugs.

Contract Source Code Verified (Exact match)
Contract Name: STQToken
Compiler Version: v0.4.15+commit.bbb8e64f
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity 0.4.15;

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) constant returns (uint256);
  function transfer(address to, uint256 value) returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal constant returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal constant returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}


/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances. 
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) returns (bool) {
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of. 
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) constant returns (uint256 balance) {
    return balances[_owner];
  }

}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) constant returns (uint256);
  function transferFrom(address from, address to, uint256 value) returns (bool);
  function approve(address spender, uint256 value) returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}



/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) allowed;


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amout of tokens to be transfered
   */
  function transferFrom(address _from, address _to, uint256 _value) returns (bool) {
    var _allowance = allowed[_from][msg.sender];

    // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
    // require (_value <= _allowance);

    balances[_to] = balances[_to].add(_value);
    balances[_from] = balances[_from].sub(_value);
    allowed[_from][msg.sender] = _allowance.sub(_value);
    Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender.
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) returns (bool) {

    // To change the approve amount you first have to reduce the addresses`
    //  allowance to zero by calling `approve(_spender, 0)` if it is not
    //  already 0 to mitigate the race condition described here:
    //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    require((_value == 0) || (allowed[msg.sender][_spender] == 0));

    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifing the amount of tokens still avaible for the spender.
   */
  function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
    return allowed[_owner][_spender];
  }

}


/// @title StandardToken which circulation can be delayed and started by another contract.
/// @dev To be used as a mixin contract.
/// The contract is created in disabled state: circulation is disabled.
contract CirculatingToken is StandardToken {

    event CirculationEnabled();

    modifier requiresCirculation {
        require(m_isCirculating);
        _;
    }


    // PUBLIC interface

    function transfer(address _to, uint256 _value) requiresCirculation returns (bool) {
        return super.transfer(_to, _value);
    }

    function transferFrom(address _from, address _to, uint256 _value) requiresCirculation returns (bool) {
        return super.transferFrom(_from, _to, _value);
    }

    function approve(address _spender, uint256 _value) requiresCirculation returns (bool) {
        return super.approve(_spender, _value);
    }


    // INTERNAL functions

    function enableCirculation() internal returns (bool) {
        if (m_isCirculating)
            return false;

        m_isCirculating = true;
        CirculationEnabled();
        return true;
    }


    // FIELDS

    /// @notice are the circulation started?
    bool public m_isCirculating;
}

/// note: during any ownership changes all pending operations (waiting for more signatures) are cancelled
// TODO acceptOwnership
contract multiowned {

	// TYPES

    // struct for the status of a pending operation.
    struct MultiOwnedOperationPendingState {
        // count of confirmations needed
        uint yetNeeded;

        // bitmap of confirmations where owner #ownerIndex's decision corresponds to 2**ownerIndex bit
        uint ownersDone;

        // position of this operation key in m_multiOwnedPendingIndex
        uint index;
    }

	// EVENTS

    event Confirmation(address owner, bytes32 operation);
    event Revoke(address owner, bytes32 operation);
    event FinalConfirmation(address owner, bytes32 operation);

    // some others are in the case of an owner changing.
    event OwnerChanged(address oldOwner, address newOwner);
    event OwnerAdded(address newOwner);
    event OwnerRemoved(address oldOwner);

    // the last one is emitted if the required signatures change
    event RequirementChanged(uint newRequirement);

	// MODIFIERS

    // simple single-sig function modifier.
    modifier onlyowner {
        require(isOwner(msg.sender));
        _;
    }
    // multi-sig function modifier: the operation must have an intrinsic hash in order
    // that later attempts can be realised as the same underlying operation and
    // thus count as confirmations.
    modifier onlymanyowners(bytes32 _operation) {
        if (confirmAndCheck(_operation)) {
            _;
        }
        // Even if required number of confirmations has't been collected yet,
        // we can't throw here - because changes to the state have to be preserved.
        // But, confirmAndCheck itself will throw in case sender is not an owner.
    }

    modifier validNumOwners(uint _numOwners) {
        require(_numOwners > 0 && _numOwners <= c_maxOwners);
        _;
    }

    modifier multiOwnedValidRequirement(uint _required, uint _numOwners) {
        require(_required > 0 && _required <= _numOwners);
        _;
    }

    modifier ownerExists(address _address) {
        require(isOwner(_address));
        _;
    }

    modifier ownerDoesNotExist(address _address) {
        require(!isOwner(_address));
        _;
    }

    modifier multiOwnedOperationIsActive(bytes32 _operation) {
        require(isOperationActive(_operation));
        _;
    }

	// METHODS

    // constructor is given number of sigs required to do protected "onlymanyowners" transactions
    // as well as the selection of addresses capable of confirming them (msg.sender is not added to the owners!).
    function multiowned(address[] _owners, uint _required)
        validNumOwners(_owners.length)
        multiOwnedValidRequirement(_required, _owners.length)
    {
        assert(c_maxOwners <= 255);

        m_numOwners = _owners.length;
        m_multiOwnedRequired = _required;

        for (uint i = 0; i < _owners.length; ++i)
        {
            address owner = _owners[i];
            // invalid and duplicate addresses are not allowed
            require(0 != owner && !isOwner(owner) /* not isOwner yet! */);

            uint currentOwnerIndex = checkOwnerIndex(i + 1 /* first slot is unused */);
            m_owners[currentOwnerIndex] = owner;
            m_ownerIndex[owner] = currentOwnerIndex;
        }

        assertOwnersAreConsistent();
    }

    /// @notice replaces an owner `_from` with another `_to`.
    /// @param _from address of owner to replace
    /// @param _to address of new owner
    // All pending operations will be canceled!
    function changeOwner(address _from, address _to)
        external
        ownerExists(_from)
        ownerDoesNotExist(_to)
        onlymanyowners(sha3(msg.data))
    {
        assertOwnersAreConsistent();

        clearPending();
        uint ownerIndex = checkOwnerIndex(m_ownerIndex[_from]);
        m_owners[ownerIndex] = _to;
        m_ownerIndex[_from] = 0;
        m_ownerIndex[_to] = ownerIndex;

        assertOwnersAreConsistent();
        OwnerChanged(_from, _to);
    }

    /// @notice adds an owner
    /// @param _owner address of new owner
    // All pending operations will be canceled!
    function addOwner(address _owner)
        external
        ownerDoesNotExist(_owner)
        validNumOwners(m_numOwners + 1)
        onlymanyowners(sha3(msg.data))
    {
        assertOwnersAreConsistent();

        clearPending();
        m_numOwners++;
        m_owners[m_numOwners] = _owner;
        m_ownerIndex[_owner] = checkOwnerIndex(m_numOwners);

        assertOwnersAreConsistent();
        OwnerAdded(_owner);
    }

    /// @notice removes an owner
    /// @param _owner address of owner to remove
    // All pending operations will be canceled!
    function removeOwner(address _owner)
        external
        ownerExists(_owner)
        validNumOwners(m_numOwners - 1)
        multiOwnedValidRequirement(m_multiOwnedRequired, m_numOwners - 1)
        onlymanyowners(sha3(msg.data))
    {
        assertOwnersAreConsistent();

        clearPending();
        uint ownerIndex = checkOwnerIndex(m_ownerIndex[_owner]);
        m_owners[ownerIndex] = 0;
        m_ownerIndex[_owner] = 0;
        //make sure m_numOwners is equal to the number of owners and always points to the last owner
        reorganizeOwners();

        assertOwnersAreConsistent();
        OwnerRemoved(_owner);
    }

    /// @notice changes the required number of owner signatures
    /// @param _newRequired new number of signatures required
    // All pending operations will be canceled!
    function changeRequirement(uint _newRequired)
        external
        multiOwnedValidRequirement(_newRequired, m_numOwners)
        onlymanyowners(sha3(msg.data))
    {
        m_multiOwnedRequired = _newRequired;
        clearPending();
        RequirementChanged(_newRequired);
    }

    /// @notice Gets an owner by 0-indexed position
    /// @param ownerIndex 0-indexed owner position
    function getOwner(uint ownerIndex) public constant returns (address) {
        return m_owners[ownerIndex + 1];
    }

    /// @notice Gets owners
    /// @return memory array of owners
    function getOwners() public constant returns (address[]) {
        address[] memory result = new address[](m_numOwners);
        for (uint i = 0; i < m_numOwners; i++)
            result[i] = getOwner(i);

        return result;
    }

    /// @notice checks if provided address is an owner address
    /// @param _addr address to check
    /// @return true if it's an owner
    function isOwner(address _addr) public constant returns (bool) {
        return m_ownerIndex[_addr] > 0;
    }

    /// @notice Tests ownership of the current caller.
    /// @return true if it's an owner
    // It's advisable to call it by new owner to make sure that the same erroneous address is not copy-pasted to
    // addOwner/changeOwner and to isOwner.
    function amIOwner() external constant onlyowner returns (bool) {
        return true;
    }

    /// @notice Revokes a prior confirmation of the given operation
    /// @param _operation operation value, typically sha3(msg.data)
    function revoke(bytes32 _operation)
        external
        multiOwnedOperationIsActive(_operation)
        onlyowner
    {
        uint ownerIndexBit = makeOwnerBitmapBit(msg.sender);
        var pending = m_multiOwnedPending[_operation];
        require(pending.ownersDone & ownerIndexBit > 0);

        assertOperationIsConsistent(_operation);

        pending.yetNeeded++;
        pending.ownersDone -= ownerIndexBit;

        assertOperationIsConsistent(_operation);
        Revoke(msg.sender, _operation);
    }

    /// @notice Checks if owner confirmed given operation
    /// @param _operation operation value, typically sha3(msg.data)
    /// @param _owner an owner address
    function hasConfirmed(bytes32 _operation, address _owner)
        external
        constant
        multiOwnedOperationIsActive(_operation)
        ownerExists(_owner)
        returns (bool)
    {
        return !(m_multiOwnedPending[_operation].ownersDone & makeOwnerBitmapBit(_owner) == 0);
    }

    // INTERNAL METHODS

    function confirmAndCheck(bytes32 _operation)
        private
        onlyowner
        returns (bool)
    {
        if (512 == m_multiOwnedPendingIndex.length)
            // In case m_multiOwnedPendingIndex grows too much we have to shrink it: otherwise at some point
            // we won't be able to do it because of block gas limit.
            // Yes, pending confirmations will be lost. Dont see any security or stability implications.
            // TODO use more graceful approach like compact or removal of clearPending completely
            clearPending();

        var pending = m_multiOwnedPending[_operation];

        // if we're not yet working on this operation, switch over and reset the confirmation status.
        if (! isOperationActive(_operation)) {
            // reset count of confirmations needed.
            pending.yetNeeded = m_multiOwnedRequired;
            // reset which owners have confirmed (none) - set our bitmap to 0.
            pending.ownersDone = 0;
            pending.index = m_multiOwnedPendingIndex.length++;
            m_multiOwnedPendingIndex[pending.index] = _operation;
            assertOperationIsConsistent(_operation);
        }

        // determine the bit to set for this owner.
        uint ownerIndexBit = makeOwnerBitmapBit(msg.sender);
        // make sure we (the message sender) haven't confirmed this operation previously.
        if (pending.ownersDone & ownerIndexBit == 0) {
            // ok - check if count is enough to go ahead.
            assert(pending.yetNeeded > 0);
            if (pending.yetNeeded == 1) {
                // enough confirmations: reset and run interior.
                delete m_multiOwnedPendingIndex[m_multiOwnedPending[_operation].index];
                delete m_multiOwnedPending[_operation];
                FinalConfirmation(msg.sender, _operation);
                return true;
            }
            else
            {
                // not enough: record that this owner in particular confirmed.
                pending.yetNeeded--;
                pending.ownersDone |= ownerIndexBit;
                assertOperationIsConsistent(_operation);
                Confirmation(msg.sender, _operation);
            }
        }
    }

    // Reclaims free slots between valid owners in m_owners.
    // TODO given that its called after each removal, it could be simplified.
    function reorganizeOwners() private {
        uint free = 1;
        while (free < m_numOwners)
        {
            // iterating to the first free slot from the beginning
            while (free < m_numOwners && m_owners[free] != 0) free++;

            // iterating to the first occupied slot from the end
            while (m_numOwners > 1 && m_owners[m_numOwners] == 0) m_numOwners--;

            // swap, if possible, so free slot is located at the end after the swap
            if (free < m_numOwners && m_owners[m_numOwners] != 0 && m_owners[free] == 0)
            {
                // owners between swapped slots should't be renumbered - that saves a lot of gas
                m_owners[free] = m_owners[m_numOwners];
                m_ownerIndex[m_owners[free]] = free;
                m_owners[m_numOwners] = 0;
            }
        }
    }

    function clearPending() private onlyowner {
        uint length = m_multiOwnedPendingIndex.length;
        for (uint i = 0; i < length; ++i) {
            if (m_multiOwnedPendingIndex[i] != 0)
                delete m_multiOwnedPending[m_multiOwnedPendingIndex[i]];
        }
        delete m_multiOwnedPendingIndex;
    }

    function checkOwnerIndex(uint ownerIndex) private constant returns (uint) {
        assert(0 != ownerIndex && ownerIndex <= c_maxOwners);
        return ownerIndex;
    }

    function makeOwnerBitmapBit(address owner) private constant returns (uint) {
        uint ownerIndex = checkOwnerIndex(m_ownerIndex[owner]);
        return 2 ** ownerIndex;
    }

    function isOperationActive(bytes32 _operation) private constant returns (bool) {
        return 0 != m_multiOwnedPending[_operation].yetNeeded;
    }


    function assertOwnersAreConsistent() private constant {
        assert(m_numOwners > 0);
        assert(m_numOwners <= c_maxOwners);
        assert(m_owners[0] == 0);
        assert(0 != m_multiOwnedRequired && m_multiOwnedRequired <= m_numOwners);
    }

    function assertOperationIsConsistent(bytes32 _operation) private constant {
        var pending = m_multiOwnedPending[_operation];
        assert(0 != pending.yetNeeded);
        assert(m_multiOwnedPendingIndex[pending.index] == _operation);
        assert(pending.yetNeeded <= m_multiOwnedRequired);
    }


   	// FIELDS

    uint constant c_maxOwners = 250;

    // the number of owners that must confirm the same operation before it is run.
    uint public m_multiOwnedRequired;


    // pointer used to find a free slot in m_owners
    uint public m_numOwners;

    // list of owners (addresses),
    // slot 0 is unused so there are no owner which index is 0.
    // TODO could we save space at the end of the array for the common case of <10 owners? and should we?
    address[256] internal m_owners;

    // index on the list of owners to allow reverse lookup: owner address => index in m_owners
    mapping(address => uint) internal m_ownerIndex;


    // the ongoing operations.
    mapping(bytes32 => MultiOwnedOperationPendingState) internal m_multiOwnedPending;
    bytes32[] internal m_multiOwnedPendingIndex;
}


/**
 * @title Contract which is owned by owners and operated by controller.
 *
 * @notice Provides a way to set up an entity (typically other contract) entitled to control actions of this contract.
 * Controller is set up by owners or during construction.
 *
 * @dev controller check is performed by onlyController modifier.
 */
contract MultiownedControlled is multiowned {

    event ControllerSet(address controller);
    event ControllerRetired(address was);


    modifier onlyController {
        require(msg.sender == m_controller);
        _;
    }


    // PUBLIC interface

    function MultiownedControlled(address[] _owners, uint _signaturesRequired, address _controller)
        multiowned(_owners, _signaturesRequired)
    {
        m_controller = _controller;
        ControllerSet(m_controller);
    }

    /// @dev sets the controller
    function setController(address _controller) external onlymanyowners(sha3(msg.data)) {
        m_controller = _controller;
        ControllerSet(m_controller);
    }

    /// @dev ability for controller to step down
    function detachController() external onlyController {
        address was = m_controller;
        m_controller = address(0);
        ControllerRetired(was);
    }


    // FIELDS

    /// @notice address of entity entitled to mint new tokens
    address public m_controller;
}


/// @title StandardToken which can be minted by another contract.
contract MintableMultiownedToken is MultiownedControlled, StandardToken {

    /// @dev parameters of an extra token emission
    struct EmissionInfo {
        // tokens created
        uint256 created;

        // totalSupply at the moment of emission (excluding created tokens)
        uint256 totalSupplyWas;
    }

    event Mint(address indexed to, uint256 amount);
    event Emission(uint256 tokensCreated, uint256 totalSupplyWas, uint256 time);
    event Dividend(address indexed to, uint256 amount);


    // PUBLIC interface

    function MintableMultiownedToken(address[] _owners, uint _signaturesRequired, address _minter)
        MultiownedControlled(_owners, _signaturesRequired, _minter)
    {
        dividendsPool = this;   // or any other special unforgeable value, actually

        // emission #0 is a dummy: because of default value 0 in m_lastAccountEmission
        m_emissions.push(EmissionInfo({created: 0, totalSupplyWas: 0}));
    }

    /// @notice Request dividends for current account.
    function requestDividends() external {
        payDividendsTo(msg.sender);
    }

    /// @notice hook on standard ERC20#transfer to pay dividends
    function transfer(address _to, uint256 _value) returns (bool) {
        payDividendsTo(msg.sender);
        payDividendsTo(_to);
        return super.transfer(_to, _value);
    }

    /// @notice hook on standard ERC20#transferFrom to pay dividends
    function transferFrom(address _from, address _to, uint256 _value) returns (bool) {
        payDividendsTo(_from);
        payDividendsTo(_to);
        return super.transferFrom(_from, _to, _value);
    }

    // Disabled: this could be undesirable because sum of (balanceOf() for each token owner) != totalSupply
    // (but: sum of (balances[owner] for each token owner) == totalSupply!).
    //
    // @notice hook on standard ERC20#balanceOf to take dividends into consideration
    // function balanceOf(address _owner) constant returns (uint256) {
    //     var (hasNewDividends, dividends) = calculateDividendsFor(_owner);
    //     return hasNewDividends ? super.balanceOf(_owner).add(dividends) : super.balanceOf(_owner);
    // }


    /// @dev mints new tokens
    function mint(address _to, uint256 _amount) external onlyController {
        require(m_externalMintingEnabled);
        payDividendsTo(_to);
        mintInternal(_to, _amount);
    }

    /// @dev disables mint(), irreversible!
    function disableMinting() external onlyController {
        require(m_externalMintingEnabled);
        m_externalMintingEnabled = false;
    }


    // INTERNAL functions

    /**
     * @notice Starts new token emission
     * @param _tokensCreated Amount of tokens to create
     * @dev Dividends are not distributed immediately as it could require billions of gas,
     * instead they are `pulled` by a holder from dividends pool account before any update to the holder account occurs.
     */
    function emissionInternal(uint256 _tokensCreated) internal {
        require(0 != _tokensCreated);
        require(_tokensCreated < totalSupply / 2);  // otherwise it looks like an error

        uint256 totalSupplyWas = totalSupply;

        m_emissions.push(EmissionInfo({created: _tokensCreated, totalSupplyWas: totalSupplyWas}));
        mintInternal(dividendsPool, _tokensCreated);

        Emission(_tokensCreated, totalSupplyWas, now);
    }

    function mintInternal(address _to, uint256 _amount) internal {
        totalSupply = totalSupply.add(_amount);
        balances[_to] = balances[_to].add(_amount);
        Transfer(this, _to, _amount);
        Mint(_to, _amount);
    }

    /// @dev adds dividends to the account _to
    function payDividendsTo(address _to) internal {
        var (hasNewDividends, dividends) = calculateDividendsFor(_to);
        if (!hasNewDividends)
            return;

        if (0 != dividends) {
            balances[dividendsPool] = balances[dividendsPool].sub(dividends);
            balances[_to] = balances[_to].add(dividends);
            Transfer(dividendsPool, _to, dividends);
        }
        m_lastAccountEmission[_to] = getLastEmissionNum();
    }

    /// @dev calculates dividends for the account _for
    /// @return (true if state has to be updated, dividend amount (could be 0!))
    function calculateDividendsFor(address _for) constant internal returns (bool hasNewDividends, uint dividends) {
        assert(_for != dividendsPool);  // no dividends for the pool!

        uint256 lastEmissionNum = getLastEmissionNum();
        uint256 lastAccountEmissionNum = m_lastAccountEmission[_for];
        assert(lastAccountEmissionNum <= lastEmissionNum);
        if (lastAccountEmissionNum == lastEmissionNum)
            return (false, 0);

        uint256 initialBalance = balances[_for];    // beware of recursion!
        if (0 == initialBalance)
            return (true, 0);

        uint256 balance = initialBalance;
        for (uint256 emissionToProcess = lastAccountEmissionNum + 1; emissionToProcess <= lastEmissionNum; emissionToProcess++) {
            EmissionInfo storage emission = m_emissions[emissionToProcess];
            assert(0 != emission.created && 0 != emission.totalSupplyWas);

            uint256 dividend = balance.mul(emission.created).div(emission.totalSupplyWas);
            Dividend(_for, dividend);

            balance = balance.add(dividend);
        }

        return (true, balance.sub(initialBalance));
    }

    function getLastEmissionNum() private constant returns (uint256) {
        return m_emissions.length - 1;
    }


    // FIELDS

    /// @notice if this true then token is still externally mintable (but this flag does't affect emissions!)
    bool public m_externalMintingEnabled = true;

    /// @dev internal address of dividends in balances mapping.
    address dividendsPool;

    /// @notice record of issued dividend emissions
    EmissionInfo[] public m_emissions;

    /// @dev for each token holder: last emission (index in m_emissions) which was processed for this holder
    mapping(address => uint256) m_lastAccountEmission;
}


/// @title Storiqa coin contract
contract STQToken is CirculatingToken, MintableMultiownedToken {


    // PUBLIC interface

    function STQToken(address[] _owners)
        MintableMultiownedToken(_owners, 2, /* minter: */ address(0))
    {
        require(3 == _owners.length);
    }

    /// @dev Allows token transfers
    function startCirculation() external onlyController {
        assert(enableCirculation());    // must be called once
    }

    /// @notice Starts new token emission
    /// @param _tokensCreatedInSTQ Amount of STQ (not STQ-wei!) to create, like 30 000 or so
    function emission(uint256 _tokensCreatedInSTQ) external onlymanyowners(sha3(msg.data)) {
        emissionInternal(_tokensCreatedInSTQ.mul(uint256(10) ** uint256(decimals)));
    }


    // FIELDS

    string public constant name = 'Storiqa Token';
    string public constant symbol = 'STQ';
    uint8 public constant decimals = 18;
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"removeOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"startCirculation","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_numOwners","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_externalMintingEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"amIOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"detachController","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokensCreatedInSTQ","type":"uint256"}],"name":"emission","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"addOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_multiOwnedRequired","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"disableMinting","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setController","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getOwners","outputs":[{"name":"","type":"address[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"m_emissions","outputs":[{"name":"created","type":"uint256"},{"name":"totalSupplyWas","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_operation","type":"bytes32"}],"name":"revoke","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newRequired","type":"uint256"}],"name":"changeRequirement","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_operation","type":"bytes32"},{"name":"_owner","type":"address"}],"name":"hasConfirmed","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"ownerIndex","type":"uint256"}],"name":"getOwner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"requestDividends","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_controller","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_isCirculating","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"_owners","type":"address[]"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokensCreated","type":"uint256"},{"indexed":false,"name":"totalSupplyWas","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"Emission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Dividend","type":"event"},{"anonymous":false,"inputs":[],"name":"CirculationEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"controller","type":"address"}],"name":"ControllerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"was","type":"address"}],"name":"ControllerRetired","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Confirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Revoke","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"FinalConfirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"}],"name":"OwnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newRequirement","type":"uint256"}],"name":"RequirementChanged","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052610109805461ff00191661010017905534156200002057600080fd5b60405162002419380380620024198339810160405280805190910190505b80600260005b8282825b82825b6000806000845160008111801562000064575060fa8111155b15156200007057600080fd5b848651600082118015620000845750808211155b15156200009057600080fd5b5b8751600155600087815595505b87518610156200016e57878681518110620000b557fe5b906020019060200201519450600160a060020a03851615801590620000f05750620000ee85640100000000620009916200028382021704565b155b1515620000fc57600080fd5b620001186001870164010000000062001560620002a482021704565b93508460028561010081106200012a57fe5b0160005b8154600160a060020a039384166101009290920a918202918402191617905585166000908152610102602052604090208490555b8560010195506200009e565b6200018664010000000062001453620002c882021704565b5b5b50505b50506101058054600160a060020a031916600160a060020a0387811691909117918290557f79f74fd5964b6943d8a1865abfb7f668c92fa3f32c0a2e3195da7d0946703ad79550169250604091505051600160a060020a03909116815260200160405180910390a15b505061010980546201000060b060020a0319166201000030600160a060020a0316021790555061010a8054600181016200022f83826200032c565b916000526020600020906002020160005b604080519081016040526000808252602082015291905081518155602082015181600101555050505b50505080516003146200027b57600080fd5b5b506200038b565b600160a060020a03811660009081526101026020526040812054115b919050565b60008115801590620002b7575060fa8211155b1515620002c057fe5b50805b919050565b60015460009011620002d657fe5b60015460fa901115620002e557fe5b600260005b0160005b9054600160a060020a036101009290920a900416156200030a57fe5b6000541580159062000320575060015460005411155b15156200032957fe5b5b565b8154818355818115116200035b576002028160020283600052602060002091820191016200035b919062000361565b5b505050565b6200038891905b8082111562000384576000808255600182015560020162000368565b5090565b90565b61207e806200039b6000396000f300606060405236156101935763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610198578063095ea7b314610223578063173825d91461025957806318160ddd1461027a57806320190ccd1461029f57806323b872dd146102b45780632f54bf6e146102f0578063313ce5671461032357806340c10f191461034c5780634123cb6b1461037057806344cc5f7e146103955780634e4ab830146103bc57806357d444fd146103e357806358292a3d146103f85780637065cb481461041057806370a0823114610431578063787d64e4146104625780637e5cd5c11461048757806392eefe9b1461049c57806395d89b41146104bd578063a0e67e2b14610548578063a9059cbb146105af578063af107749146105e5578063b75c7dc614610613578063ba51a6df1461062b578063c2cf732614610643578063c41a360a14610679578063d4a9991f146106ab578063d7311963146106c0578063d785e5c9146106ef578063dd62ed3e14610716578063f00d4b5d1461074d575b600080fd5b34156101a357600080fd5b6101ab610774565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101e85780820151818401525b6020016101cf565b50505050905090810190601f1680156102155780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561022e57600080fd5b610245600160a060020a03600435166024356107ab565b604051901515815260200160405180910390f35b341561026457600080fd5b610278600160a060020a03600435166107d4565b005b341561028557600080fd5b61028d610931565b60405190815260200160405180910390f35b34156102aa57600080fd5b610278610938565b005b34156102bf57600080fd5b610245600160a060020a0360043581169060243516604435610968565b604051901515815260200160405180910390f35b34156102fb57600080fd5b610245600160a060020a0360043516610991565b604051901515815260200160405180910390f35b341561032e57600080fd5b6103366109b2565b60405160ff909116815260200160405180910390f35b341561035757600080fd5b610278600160a060020a03600435166024356109b7565b005b341561037b57600080fd5b61028d610a03565b60405190815260200160405180910390f35b34156103a057600080fd5b610245610a09565b604051901515815260200160405180910390f35b34156103c757600080fd5b610245610a18565b604051901515815260200160405180910390f35b34156103ee57600080fd5b610278610a36565b005b341561040357600080fd5b610278600435610ac1565b005b341561041b57600080fd5b610278600160a060020a0360043516610b14565b005b341561043c57600080fd5b61028d600160a060020a0360043516610c3b565b60405190815260200160405180910390f35b341561046d57600080fd5b61028d610c5b565b60405190815260200160405180910390f35b341561049257600080fd5b610278610c61565b005b34156104a757600080fd5b610278600160a060020a0360043516610ca4565b005b34156104c857600080fd5b6101ab610d44565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101e85780820151818401525b6020016101cf565b50505050905090810190601f1680156102155780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561055357600080fd5b61055b610d7b565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561059b5780820151818401525b602001610582565b505050509050019250505060405180910390f35b34156105ba57600080fd5b610245600160a060020a0360043516602435610dfe565b604051901515815260200160405180910390f35b34156105f057600080fd5b6105fb600435610e25565b60405191825260208201526040908101905180910390f35b341561061e57600080fd5b610278600435610e54565b005b341561063657600080fd5b610278600435610f20565b005b341561064e57600080fd5b610245600435600160a060020a0360243516610fb5565b604051901515815260200160405180910390f35b341561068457600080fd5b61068f60043561100d565b604051600160a060020a03909116815260200160405180910390f35b34156106b657600080fd5b61027861103e565b005b34156106cb57600080fd5b61068f61104a565b604051600160a060020a03909116815260200160405180910390f35b34156106fa57600080fd5b61024561105a565b604051901515815260200160405180910390f35b341561072157600080fd5b61028d600160a060020a0360043581169060243516611064565b60405190815260200160405180910390f35b341561075857600080fd5b610278600160a060020a0360043581169060243516611092565b005b60408051908101604052600d81527f53746f7269716120546f6b656e00000000000000000000000000000000000000602082015281565b6101095460009060ff1615156107c057600080fd5b6107ca83836111ca565b90505b5b92915050565b6000816107e081610991565b15156107eb57600080fd5b6001805403600081118015610801575060fa8111155b151561080c57600080fd5b60005460018054036000821180156108245750808211155b151561082f57600080fd5b60003660405180838380828437820191505092505050604051809103902061085681611273565b1561092357610863611453565b61086b6114b2565b600160a060020a0387166000908152610102602052604090205461088e90611560565b9550600060028761010081106108a057fe5b0160005b8154600160a060020a039384166101009290920a91820291840219161790558716600090815261010260205260408120556108dd611582565b6108e5611453565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da87604051600160a060020a03909116815260200160405180910390a15b5b5b505b50505b505b505050565b6101065481565b6101055433600160a060020a0390811691161461095457600080fd5b61095c611768565b151561096457fe5b5b5b565b6000610973846117c0565b61097c836117c0565b6109878484846118ca565b90505b9392505050565b600160a060020a03811660009081526101026020526040812054115b919050565b601281565b6101055433600160a060020a039081169116146109d357600080fd5b61010954610100900460ff1615156109ea57600080fd5b6109f3826117c0565b6109fd82826118f5565b5b5b5050565b60015481565b61010954610100900460ff1681565b6000610a2333610991565b1515610a2e57600080fd5b5060015b5b90565b6101055460009033600160a060020a03908116911614610a5557600080fd5b50610105805473ffffffffffffffffffffffffffffffffffffffff198116909155600160a060020a03167fc82cd8e6862d9c7b2c4c1d4f8dbac09a809e276399883e1070457f61a0f5349081604051600160a060020a03909116815260200160405180910390a15b5b50565b600036604051808383808284378201915050925050506040518091039020610ae881611273565b156109fd576109fd610b0883670de0b6b3a764000063ffffffff6119c016565b6119ef565b5b5b5b5050565b80610b1e81610991565b15610b2857600080fd5b600154600101600081118015610b3f575060fa8111155b1515610b4a57600080fd5b600036604051808383808284378201915050925050506040518091039020610b7181611273565b1561092a57610b7e611453565b610b866114b2565b6001805481019081905584906002906101008110610ba057fe5b0160005b6101000a815481600160a060020a030219169083600160a060020a03160217905550610bd1600154611560565b600160a060020a03851660009081526101026020526040902055610bf3611453565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c384604051600160a060020a03909116815260200160405180910390a15b5b5b505b505b5050565b600160a060020a038116600090815261010760205260409020545b919050565b60005481565b6101055433600160a060020a03908116911614610c7d57600080fd5b61010954610100900460ff161515610c9457600080fd5b610109805461ff00191690555b5b565b600036604051808383808284378201915050925050506040518091039020610ccb81611273565b156109fd57610105805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384811691909117918290557f79f74fd5964b6943d8a1865abfb7f668c92fa3f32c0a2e3195da7d0946703ad79116604051600160a060020a03909116815260200160405180910390a15b5b5b5050565b60408051908101604052600381527f5354510000000000000000000000000000000000000000000000000000000000602082015281565b610d83611f5a565b610d8b611f5a565b6000600154604051805910610d9d5750595b908082528060200260200182016040525b509150600090505b600154811015610df557610dc98161100d565b828281518110610dd557fe5b600160a060020a039092166020928302909101909101525b600101610db6565b8192505b505090565b6000610e09336117c0565b610e12836117c0565b6107ca8383611acc565b90505b92915050565b61010a805482908110610e3457fe5b906000526020600020906002020160005b50805460019091015490915082565b60008082610e6181611af5565b1515610e6c57600080fd5b610e7533610991565b1515610e8057600080fd5b610e8933611b0d565b6000858152610103602052604081206001810154929550935090841611610eaf57600080fd5b610eb884611b41565b815460019081018355820180548490039055610ed384611b41565b7fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b3385604051600160a060020a03909216825260208201526040908101905180910390a15b5b5b50505050565b80600154600082118015610f345750808211155b1515610f3f57600080fd5b600036604051808383808284378201915050925050506040518091039020610f6681611273565b1561092a576000849055610f786114b2565b7facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da8460405190815260200160405180910390a15b5b5b505b505050565b600082610fc181611af5565b1515610fcc57600080fd5b82610fd681610991565b1515610fe157600080fd5b610fea84611b0d565b6000868152610103602052604090206001015416151592505b5b505b5092915050565b6000600260018301610100811061102057fe5b0160005b9054906101000a9004600160a060020a031690505b919050565b610964336117c0565b5b565b61010554600160a060020a031681565b6101095460ff1681565b600160a060020a03808316600090815261010860209081526040808320938516835292905220545b92915050565b60008261109e81610991565b15156110a957600080fd5b826110b381610991565b156110bd57600080fd5b6000366040518083838082843782019150509250505060405180910390206110e481611273565b15610927576110f1611453565b6110f96114b2565b600160a060020a0386166000908152610102602052604090205461111c90611560565b935084600285610100811061112d57fe5b0160005b8154600160a060020a039384166101009290920a918202918402191617905586811660009081526101026020526040808220829055918716815220849055611177611453565b7fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c8686604051600160a060020a039283168152911660208201526040908101905180910390a15b5b5b505b505b50505050565b60008115806111fd5750600160a060020a0333811660009081526101086020908152604080832093871683529290522054155b151561120857600080fd5b600160a060020a0333811660008181526101086020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b600080600061128133610991565b151561128c57600080fd5b6101045461020014156112a1576112a16114b2565b5b60008481526101036020526040902091506112bc84611af5565b1515611313576000805483556001808401919091556101048054916112e391908301611f6c565b60028301819055610104805486929081106112fa57fe5b906000526020600020900160005b505561131384611b41565b5b61131d33611b0d565b905080826001015416600014156114495781546000901161133a57fe5b8154600114156113e957600084815261010360205260409020600201546101048054909190811061136757fe5b906000526020600020900160005b50600090819055848152610103602052604080822082815560018101839055600201919091557f367569357efc39b74a025c4ba1d64068b2b574e3b0d081c48d42f7feeca4cd16903390869051600160a060020a03909216825260208201526040908101905180910390a160019250611449565b81546000190182556001820180548217905561140484611b41565b7fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda3385604051600160a060020a03909216825260208201526040908101905180910390a15b5b5b5b5050919050565b6001546000901161146057fe5b60015460fa90111561146e57fe5b600260005b0160005b9054600160a060020a036101009290920a9004161561149257fe5b6000541580159061095c575060015460005411155b151561096457fe5b5b565b6000806114be33610991565b15156114c957600080fd5b50506101045460005b8181101561154d576101048054829081106114e957fe5b906000526020600020900160005b5054156115445761010360006101048381548110151561151357fe5b906000526020600020900160005b505481526020810191909152604001600090812081815560018101829055600201555b5b6001016114d2565b6109fd6101046000611f96565b5b5b5050565b60008115801590611572575060fa8211155b151561157a57fe5b50805b919050565b60015b600154811015610abd575b600154811080156115c5575060028161010081106115aa57fe5b0160005b9054600160a060020a036101009290920a90041615155b156115d257600101611590565b5b6001805411801561160a575060015460029061010081106115f057fe5b0160005b9054600160a060020a036101009290920a900416155b1561161e57600180546000190190556115d2565b600154811080156116565750600154600290610100811061163b57fe5b0160005b9054600160a060020a036101009290920a90041615155b80156116855750600281610100811061166b57fe5b0160005b9054600160a060020a036101009290920a900416155b1561175f57600154600290610100811061169b57fe5b0160005b9054906101000a9004600160a060020a0316600282610100811015156116c157fe5b0160005b6101000a815481600160a060020a030219169083600160a060020a03160217905550806101026000600284610100811015156116fd57fe5b0160005b905461010091820a9004600160a060020a031682526020820192909252604001600090812092909255600154600291811061173857fe5b0160005b6101000a815481600160a060020a030219169083600160a060020a031602179055505b611585565b5b50565b6101095460009060ff161561177f57506000610a32565b610109805460ff191660011790557f61ff8191b26826d8bb82f4fa7cb8ef434fa4f34635af54cac08f7c476c5e279460405160405180910390a15060015b90565b6000806117cc83611b98565b915091508115156117dc5761092c565b80156118a25761010954620100009004600160a060020a03166000908152610107602052604090205461180f9082611d48565b61010954600160a060020a0362010000909104811660009081526101076020526040808220939093559085168152205461184f908263ffffffff611d5f16565b600160a060020a0380851660008181526101076020526040908190209390935561010954909262010000909104909116906000805160206120338339815191529084905190815260200160405180910390a35b6118aa611d79565b600160a060020a038416600090815261010b60205260409020555b505050565b6101095460009060ff1615156118df57600080fd5b610987848484611d85565b90505b5b9392505050565b61010654611909908263ffffffff611d5f16565b61010655600160a060020a03821660009081526101076020526040902054611937908263ffffffff611d5f16565b600160a060020a038084166000818152610107602052604090819020939093559130909116906000805160206120338339815191529084905190815260200160405180910390a381600160a060020a03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405190815260200160405180910390a25b5050565b60008282028315806119dc57508284828115156119d957fe5b04145b15156119e457fe5b8091505b5092915050565b60008115156119fd57600080fd5b610106546002905b048210611a1157600080fd5b506101065461010a805460018101611a298382611fb8565b916000526020600020906002020160005b6040805190810160405285815260208101859052919050815181556020820151600190910155505061010954611a8090600160a060020a036201000090910416836118f5565b7fb6d34f12e241bbb736de0a0cc42ddcb06ed877521d75a28e8c375794fadaf23582824260405180848152602001838152602001828152602001935050505060405180910390a15b5050565b6101095460009060ff161515611ae157600080fd5b6107ca8383611e8d565b90505b5b92915050565b6000818152610103602052604090205415155b919050565b600160a060020a038116600090815261010260205260408120548190611b3290611560565b90508060020a91505b50919050565b60008181526101036020526040902080541515611b5a57fe5b600281015461010480548492908110611b6f57fe5b906000526020600020900160005b505414611b8657fe5b600054815411156109fd57fe5b5b5050565b600080600080600080600080600061010960029054906101000a9004600160a060020a0316600160a060020a03168a600160a060020a031614151515611bda57fe5b611be2611d79565b600160a060020a038b16600090815261010b6020526040902054909750955086861115611c0b57fe5b86861415611c1f5760009850889750611d3c565b600160a060020a038a16600090815261010760205260409020549450841515611c4f576001985060009750611d3c565b8493508560010192505b868311611d255761010a805484908110611c6f57fe5b906000526020600020906002020160005b50805490925015801590611c975750600182015415155b1515611c9f57fe5b60018201548254611cc89190611cbc90879063ffffffff6119c016565b9063ffffffff611f3e16565b905089600160a060020a03167ff6a7e669306918b018d1eb595a21c8180bdecc0c90847daef23f9cf5fbd4902a8260405190815260200160405180910390a2611d17848263ffffffff611d5f16565b93505b600190920191611c59565b6001611d37858763ffffffff611d4816565b985098505b50505050505050915091565b600082821115611d5457fe5b508082035b92915050565b6000828201838110156119e457fe5b8091505b5092915050565b61010a54600019015b90565b600160a060020a0380841660009081526101086020908152604080832033851684528252808320549386168352610107909152812054909190611dce908463ffffffff611d5f16565b600160a060020a03808616600090815261010760205260408082209390935590871681522054611e04908463ffffffff611d4816565b600160a060020a03861660009081526101076020526040902055611e2e818463ffffffff611d4816565b600160a060020a0380871660008181526101086020908152604080832033861684529091529081902093909355908616916000805160206120338339815191529086905190815260200160405180910390a3600191505b509392505050565b600160a060020a03331660009081526101076020526040812054611eb7908363ffffffff611d4816565b600160a060020a03338116600090815261010760205260408082209390935590851681522054611eed908363ffffffff611d5f16565b600160a060020a038085166000818152610107602052604090819020939093559133909116906000805160206120338339815191529085905190815260200160405180910390a35060015b92915050565b6000808284811515611f4c57fe5b0490508091505b5092915050565b60206040519081016040526000815290565b81548183558181151161092c5760008381526020902061092c918101908301611fea565b5b505050565b5080546000825590600052602060002090810190610abd9190611fea565b5b50565b81548183558181151161092c5760020281600202836000526020600020918201910161092c919061200b565b5b505050565b610a3291905b808211156120045760008155600101611ff0565b5090565b90565b610a3291905b808211156120045760008082556001820155600201612011565b5090565b905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820806aac597cf63a0e8500f39bd70c0bc9a6bdededd0b02717d9e0cf89c8e3956a002900000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000af9eca973ba1bf87923d45dce471181f77de301e000000000000000000000000c21afa07ce196500d45cd13b835645a2b05760e70000000000000000000000007e71a0514d727a2828209cf74f05686f382e545d

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

-----Decoded View---------------
Found 5 constructor arguments :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [2] : 000000000000000000000000af9eca973ba1bf87923d45dce471181f77de301e
Arg [3] : 000000000000000000000000c21afa07ce196500d45cd13b835645a2b05760e7
Arg [4] : 0000000000000000000000007e71a0514d727a2828209cf74f05686f382e545d


   Swarm Source:
bzzr://806aac597cf63a0e8500f39bd70c0bc9a6bdededd0b02717d9e0cf89c8e3956a

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.