Sponsored:   Color - Revolutionizing the Dapp Ecosystem, Bounty & Airdrop, Get 240,000 COL NOW!
Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 1613 txns
Misc
Address Watch: Add To Watch List
Contract Creator: 0x002501331bced82b690401b4e1204209eac4f0b7at txn 0x86cfd0fd2cd269f5b10f174be72ae0cf5456b2e1829c92eeb2e0904f50a1405f
Token Balances:
 Latest 25 txns from a total Of 1613 transactions

TxHash Age From To Value [TxFee]
0x880f852d54faa8f5d75f4002e791f8e4f602a0e415f1a61d3d63972d64e7b7b027 days 18 hrs ago0x002501331bced82b690401b4e1204209eac4f0b7  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.00012454
0x048b39a08f2fba7dc23bca03da6ac9a93447c46c63b6a48b5f2cd410a6569fd831 days 15 hrs ago0x59f5c08da30096d8f4fcde5990a79bd344bd09da  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.000215298
0x609cee15435ad143052cb4e917ee267adf6d82105fc0d4936cdeb0e6515e2a0b33 days 19 hrs ago0xadfcbe5659a6306f726e6f76ca669aeec9b41f32  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.000706068
0xa10670e74eb9bec9e18562c50dfff420c8fd0b136e443e47d715377b44f3481333 days 19 hrs ago0xadfcbe5659a6306f726e6f76ca669aeec9b41f32  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.000513504
0x1478b7290492b11bbe9649b434b6923f2b6c0d02f6d6f71af38dc139e5b3f94133 days 19 hrs ago0xadfcbe5659a6306f726e6f76ca669aeec9b41f32  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.000113532
0xf6fcabadac1f8ea89feeed9260fc19bc85dda4dc5ffbd4398b72f87ed51a971635 days 32 mins ago0x03706f143369c161fc0dcccfa006a3bc0b23644d  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.000932958
0x4e9a21471df32403ea70484ca491c8dd8058c561dcbe68661e9ad474dde7d2af35 days 13 hrs ago0xaf469c4a0914938e6149cf621c54fb4b1ec0c202  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.003660066
0xb2e9df0ee76521a26a82da43082f519206cd8ec46ad251d1e66b5572a6c736ee35 days 17 hrs ago0x05954a4cc037899278c414a0e8b9f2797553e236  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.001937682
0xfdefc58265d5aebf4001556373e019946a0fe4b5bb334224bbe67a5b5f4c8e6e42 days 6 hrs ago0x002501331bced82b690401b4e1204209eac4f0b7  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.00067582
0x373310f2a949192dc9ef58fe55ea7ff808b02fba82d27dea8e17b7019853b4c960 days 5 hrs ago0x9be96a6e861d2e5aff1fe0738bed664b6f0b543e  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.000287064
0xb6327b62f714fbf2f96988bbcaec9141e6575af5ec469434124df8c92ca41f6662 days 21 hrs ago0xce5f17718311fd9cd7383fd1fdff754ff3b0e2fe  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.000143532
0x6120a9246aaf5b9563ac9085349faa6615f463c1a770926e3787f0f5403fcf2779 days 6 hrs ago0x3927a116c6849761f8a30ed3cb2931dd773f85fc  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.00071766
0x9d3d12208a8c59920d5df2149f41c446031631b094ec0e964ce2a035469f146b79 days 22 hrs ago0xc0c8f8a62017e593b08c3d3add41bcf445fbfac5  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.00107649
0x4421ec0ffaaee587af82b9cf2e7333f88f2ec03eb963c0593b7f40ca2852b7af85 days 1 hr ago0xa96be63f208ff40c24d0268d5a879c0b59b7896f  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.000287064
0x283785a7871f86983a76dd4a8384d99a962dd4fc3b15f5e459ba0ebc6ec89b1a90 days 4 hrs ago0xda03669c01dc5290f120b562045b17eb14a9efb5  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.00071766
0x710d07d8a48e70d27e4a70def65a1cf9741e596346c76d2ec1105482293dff0390 days 13 hrs ago0xe141249645c8f42f45d582a37f0b0b7a86d3c37a  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.00035883
0xfe84dabf7b76db43ee547b58ecfaab0c3e8b5dff7c62e48f38901e1ca8ed9873109 days 20 hrs ago0xf7007f39a41d87c669bd9beadc3d5cc2ef5a32be  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.000143532
0xea7464ee6767ac5974890a706b65f7c01ca89c6d01605d9af5f2e205ec056725119 days 2 hrs ago0xa5864806b194d02df5b5d30f1a77cabc4f6c02aa  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.000071766
0x4d62db8f51e929a73ec5ac2e1813584f97decb55b3ac10653eb68dc3733ec94b127 days 3 hrs ago0x1e24670b9a64c2af7880de3789a51ee153e4c499  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.000071766
0xae2f033fe1f6c5d9f3c9136f6a19cace2692b3e6e0ed370e64fcd31698291f6a128 days 11 hrs ago0xecdd32b46273d28a79c1c86d5100a9d4c0070fc2  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.000056766
0x60780dfeddb3774f934caf56423717a7431dd63b5c9120d49146cbfa948e6ec1129 days 9 hrs ago0x751208958023f1d5255e146b509fc8c074e50f14  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.000071766
0x2cb79795c81f9a22adc56554e1bffa5eb064720a841a4dd23e2f7aa955deb0b6129 days 12 hrs ago0xfc5480d57c7dbff406bc8ad7044bdae7a8fedecb  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.000071766
0xea563c90e5252f84dba6ffb5d4889b4b0085e83e878462daa0cc246a7a85eace132 days 9 hrs ago0xf22b14f664a7ab9b0f60a4b30e0706ae853afc91  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.0000107649
0xda3ca53fba19814ea8b1f25331228b193617f13cbf369a3a990ca25c482e18a7132 days 21 hrs ago0xd80b80a9daddc019dd5427e53af99578549e9a82  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.00143532
0x3912ffa5cc5d7c6ad1c3b1022893da5ab6febfb070a5c2f7a81e55e8fcf08127134 days 11 hrs ago0x594caf23aa91ed201976e0e05e759cd7f94bf1a2  IN   0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00 Ether0.000071766
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here to View More View All
ParentTxHash Block Age From To Value
0x880f852d54faa8f5d75f4002e791f8e4f602a0e415f1a61d3d63972d64e7b7b0601310827 days 18 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00x36770ff967bd05248b1c4c899ffb70caa3391b842.564357142857142858 Ether
0x048b39a08f2fba7dc23bca03da6ac9a93447c46c63b6a48b5f2cd410a6569fd8599008331 days 15 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00x59f5c08da30096d8f4fcde5990a79bd344bd09da0.001 Ether
0x1478b7290492b11bbe9649b434b6923f2b6c0d02f6d6f71af38dc139e5b3f941597755233 days 19 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00xadfcbe5659a6306f726e6f76ca669aeec9b41f320.152 Ether
0xf6fcabadac1f8ea89feeed9260fc19bc85dda4dc5ffbd4398b72f87ed51a9716597038635 days 32 mins ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00x03706f143369c161fc0dcccfa006a3bc0b23644d0.017 Ether
0x4e9a21471df32403ea70484ca491c8dd8058c561dcbe68661e9ad474dde7d2af596710235 days 13 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00xaf469c4a0914938e6149cf621c54fb4b1ec0c2020.061 Ether
0xb2e9df0ee76521a26a82da43082f519206cd8ec46ad251d1e66b5572a6c736ee596603435 days 17 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00x05954a4cc037899278c414a0e8b9f2797553e2360.086 Ether
0x373310f2a949192dc9ef58fe55ea7ff808b02fba82d27dea8e17b7019853b4c9582282660 days 5 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00x9be96a6e861d2e5aff1fe0738bed664b6f0b543e0.055 Ether
0xb6327b62f714fbf2f96988bbcaec9141e6575af5ec469434124df8c92ca41f66580722462 days 21 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00xce5f17718311fd9cd7383fd1fdff754ff3b0e2fe0.012 Ether
0x6120a9246aaf5b9563ac9085349faa6615f463c1a770926e3787f0f5403fcf27571398479 days 6 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00x3927a116c6849761f8a30ed3cb2931dd773f85fc0.016 Ether
0x9d3d12208a8c59920d5df2149f41c446031631b094ec0e964ce2a035469f146b571020179 days 22 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00xc0c8f8a62017e593b08c3d3add41bcf445fbfac50.018 Ether
0x4421ec0ffaaee587af82b9cf2e7333f88f2ec03eb963c0593b7f40ca2852b7af568135385 days 1 hr ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00xa96be63f208ff40c24d0268d5a879c0b59b7896f0.012 Ether
0x283785a7871f86983a76dd4a8384d99a962dd4fc3b15f5e459ba0ebc6ec89b1a565237890 days 4 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00xda03669c01dc5290f120b562045b17eb14a9efb50.034 Ether
0x710d07d8a48e70d27e4a70def65a1cf9741e596346c76d2ec1105482293dff03565036390 days 13 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00xe141249645c8f42f45d582a37f0b0b7a86d3c37a0.016 Ether
0xfe84dabf7b76db43ee547b58ecfaab0c3e8b5dff7c62e48f38901e1ca8ed98735540166109 days 20 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00xf7007f39a41d87c669bd9beadc3d5cc2ef5a32be0.032 Ether
0xea7464ee6767ac5974890a706b65f7c01ca89c6d01605d9af5f2e205ec0567255486889119 days 2 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00xa5864806b194d02df5b5d30f1a77cabc4f6c02aa0.016 Ether
0x4d62db8f51e929a73ec5ac2e1813584f97decb55b3ac10653eb68dc3733ec94b5439889127 days 3 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00x1e24670b9a64c2af7880de3789a51ee153e4c4990.001 Ether
0xae2f033fe1f6c5d9f3c9136f6a19cace2692b3e6e0ed370e64fcd31698291f6a5432025128 days 11 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00xecdd32b46273d28a79c1c86d5100a9d4c0070fc20.024 Ether
0x60780dfeddb3774f934caf56423717a7431dd63b5c9120d49146cbfa948e6ec15426714129 days 9 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00x751208958023f1d5255e146b509fc8c074e50f140.034 Ether
0x2cb79795c81f9a22adc56554e1bffa5eb064720a841a4dd23e2f7aa955deb0b65425915129 days 12 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00xfc5480d57c7dbff406bc8ad7044bdae7a8fedecb0.012 Ether
0xea563c90e5252f84dba6ffb5d4889b4b0085e83e878462daa0cc246a7a85eace5408640132 days 9 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00xf22b14f664a7ab9b0f60a4b30e0706ae853afc910.001 Ether
0xda3ca53fba19814ea8b1f25331228b193617f13cbf369a3a990ca25c482e18a75405690132 days 21 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00xd80b80a9daddc019dd5427e53af99578549e9a820.019 Ether
0x3912ffa5cc5d7c6ad1c3b1022893da5ab6febfb070a5c2f7a81e55e8fcf081275395946134 days 11 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00x594caf23aa91ed201976e0e05e759cd7f94bf1a20.001 Ether
0x9afa506e1f04d4b35612c41d46f9a180dfa348cf786243407098c46858fe4ad15393698134 days 20 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00x522273122b20212fe255875a4737b6f50cc720060.002 Ether
0x307cd801a0d87f29dbdaa38523ad0babff9342f7726059ae7247d2432a3d0b7b5365119139 days 14 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00x9542cf67da78e0547e559b1d11513c8f161c71560.016 Ether
0x23ec9f423957eb4945983a8273989c22aa6d8e965208c19bcc27f97a6bbbca9f5340528143 days 17 hrs ago0x8c9c9f6d7a4fea6e5b32f19c368db64127011dc00x02cd407bd1216c4b227e20ddab1837f5a74233e40.016 Ether
[ Download CSV Export  ] 
Warning: The compiled contract might be susceptible to EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) Solidity compiler bugs.

Contract Source Code Verified (Similar match)
Note: Displaying similar matching verified source code at contract 0x65c0a4c7be4ca3657b223ac5031b5ba1f686aed9(excluding Constructor Arguments if any)
Contract Name: EnchantedShop
Compiler Version: v0.4.18+commit.9cf6e910
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.18;

// zeppelin-solidity: 1.5.0

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


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


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }


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


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

}

/**
 * @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) public view returns (uint256);
  function transfer(address to, uint256 value) public 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 pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure 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 pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure 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) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);

    // SafeMath.sub will throw if there is not enough balance.
    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) public view 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) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public 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)) internal 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 amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

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

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * Beware that changing an allowance with this method brings the risk that someone may use both the old
   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    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 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public view returns (uint256) {
    return allowed[_owner][_spender];
  }

  /**
   * @dev Increase the amount of tokens that an owner allowed to a spender.
   *
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _addedValue The amount of tokens to increase the allowance by.
   */
  function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  /**
   * @dev Decrease the amount of tokens that an owner allowed to a spender.
   *
   * approve should be called when allowed[_spender] == 0. To decrement
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _subtractedValue The amount of tokens to decrease the allowance by.
   */
  function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}

contract Object is StandardToken, Ownable {
    string public name;
    string public symbol;
    uint8 public constant decimals = 18;
    bool public mintingFinished = false;

    event Burn(address indexed burner, uint value);
    event Mint(address indexed to, uint amount);
    event MintFinished();

    modifier canMint() {
        require(!mintingFinished);
        _;
    }

    function Object(string _name, string _symbol) public {
        name = _name;
        symbol = _symbol;
    }

    function burn(uint _value) public {
        require(_value <= balances[msg.sender]);
        address burner = msg.sender;
        balances[burner] = balances[burner].sub(_value);
        totalSupply = totalSupply.sub(_value);
        Burn(burner, _value);
    }

    function mint(address _to, uint _amount) onlyOwner canMint public returns(bool) {
        totalSupply = totalSupply.add(_amount);
        balances[_to] = balances[_to].add(_amount);
        Mint(_to, _amount);
        Transfer(address(0), _to, _amount);
        return true;
    }

    function finishMinting() onlyOwner canMint public returns(bool) {
        mintingFinished = true;
        MintFinished();
        return true;
    }

    function transfer(address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        require(_value <= balances[msg.sender]);
        require(_value % (1 ether) == 0); // require whole token transfers

        // SafeMath.sub will throw if there is not enough balance.
        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);
        Transfer(msg.sender, _to, _value);
        return true;
    }
}

contract Shop is Ownable {
    using SafeMath for *;

    struct ShopSettings {
        address bank;
        uint32 startTime;
        uint32 endTime;
        uint fundsRaised;
        uint rate;
        uint price;
        //uint recommendedBid;
    }

    Object public object;
    ShopSettings public shopSettings;

    modifier onlyValidPurchase() {
        require(msg.value % shopSettings.price == 0); // whole numbers only
        require((now >= shopSettings.startTime && now <= shopSettings.endTime) && msg.value != 0);
        _;
    }

    modifier whenClosed() { // not actually implemented?
        require(now > shopSettings.endTime);
        _;
    }

    modifier whenOpen() {
        require(now < shopSettings.endTime);
        _;
    }

    modifier onlyValidAddress(address _bank) {
        require(_bank != address(0));
        _;
    }

    modifier onlyOne() {
        require(calculateTokens() == 1 ether);
        _;
    }

    modifier onlyBuyer(address _beneficiary) {
        require(_beneficiary == msg.sender);
        _;
    }

    event ShopClosed(uint32 date);
    event ObjectPurchase(address indexed purchaser, address indexed beneficiary, uint value, uint amount);

    function () external payable {
        buyObject(msg.sender);
    }

    function Shop(address _bank, string _name, string _symbol, uint _rate, uint32 _endTime)
    onlyValidAddress(_bank) public {
        require(_rate >= 0);
        require(_endTime > now);
        shopSettings = ShopSettings(_bank, uint32(now), _endTime, 0, _rate, 0);
        calculatePrice(); // set initial price based on initial rate
        object = new Object(_name, _symbol);
    }

    function buyObject(address _beneficiary) onlyValidPurchase
    onlyBuyer(_beneficiary)
    onlyValidAddress(_beneficiary) public payable {
        uint numTokens = calculateTokens();
        shopSettings.fundsRaised = shopSettings.fundsRaised.add(msg.value);
        object.mint(_beneficiary, numTokens);
        ObjectPurchase(msg.sender, _beneficiary, msg.value, numTokens);
        forwardFunds();
    }

    function calculateTokens() internal returns(uint) {
        // rate is literally tokens per eth in wei;
        // passing in a rate of 10 ETH (10*10^18) equates to 10 tokens per ETH, or a price of 0.1 ETH per token
        // rate is always 1/price!
        calculatePrice(); // update price
        return msg.value.mul(1 ether).div(1 ether.mul(1 ether).div(shopSettings.rate));
    }

    function calculatePrice() internal returns(uint) {
        shopSettings.price = (1 ether).mul(1 ether).div(shopSettings.rate); // update price based on current rate
        //shopSettings.recommendedBid = shopSettings.price.add((1 ether).div(100)); // update recommended bid based on current price
    }

    function closeShop() onlyOwner whenOpen public {
        shopSettings.endTime = uint32(now);
        ShopClosed(uint32(now));
    }

    function forwardFunds() internal {
        shopSettings.bank.transfer(msg.value);
    }
}

contract EnchantedShop is Shop {
    using SafeMath for *;

    mapping(address => uint) public balanceOwed; // balances owed to individual addresses
    mapping(address => uint) public latestBalanceCheck; // latest balance check of individual addresses
    mapping(address => uint) public itemsOwned;
    //mapping(address => uint) public totalWithdrawn; // used in calculating total earnings
    mapping(address => uint) public excessEth; // excess eth sent by individual addresses
    /*
    Using itemsOwned in place of object.balanceOf(msg.sender) prevents users who did not purchase tokens from the contract but who were instead transferred tokens from receiving earnings on them (which would require extra contract and token functionality to account for when those items were acquired). Using itemsOwned also means that users can transfer their tokens out but will still earn returns on them if they were purchased from the shop. We can also perform a check against the user's balanceOf to prevent this if desired.
    */
    uint public itemReturn;
    uint public maxDebt; // maximum possible debt owed by the shop if no funds were claimed
    uint public runningDebt; // total of individually amortized debts owed by this shop
    uint public additionalDebt; // general debt not yet accounted for due to amortization
    uint public debtPaid; // total debt paid by this shop
    uint public constant devFee = 125; // 125 represents 12.5%
    uint public originalPrice;

    uint public totalExcessEth; // total of individually amortized excess eth transfers, analogous to runningDebt

    bool public lock;
    uint public unlockDate;

    event ShopDeployed(address wallet, uint rate, uint itemReturn, uint32 endTime);
    //event EnchantedObjectMinted(uint totalSupply);
    event PriceUpdate(uint price);

    event FundsMoved(uint amount);
    event SafeLocked(uint date);
    event StartedSafeUnlock(uint date);

    event WillWithdraw(uint amount);

    modifier onlyContributors {
        require(itemsOwned[msg.sender] > 0);
        _;
    }

    modifier onlyValidPurchase() { // override onlyValidPurchase so that buyObject requires >= enough for 1 token instead of whole numbers only
        require(msg.value >= shopSettings.price); // at least enough for 1
        require((now >= shopSettings.startTime && now <= shopSettings.endTime) && msg.value != 0);
        _;
    }

    function EnchantedShop(address _bank, string _name, string _symbol, uint _rate, uint32 _endTime, uint _itemReturn)
    Shop(_bank, _name, _symbol, _rate, _endTime) public
    {
        require(_itemReturn == shopSettings.price.div(100)); // safety check; ensure we're using 1% returns and that we're using the correct price
        itemReturn = _itemReturn; // return should be in given wei
        originalPrice = shopSettings.price;
        ShopDeployed(_bank, _rate, _itemReturn, _endTime);
        unlockDate = 0;
        lock = true;
        SafeLocked(now);
    }

    function calculateTokens() internal returns(uint) {
        // rate is literally tokens per eth in wei;
        // passing in a rate of 10 ETH (10*10^18) equates to 10 tokens per ETH, or a price of 0.1 ETH per token
        calculatePrice(); // update price based on current rate
        return (1 ether);
    }

    function forwardFunds() internal {
        uint fee = shopSettings.price.mul(devFee).div(1000); // used to be msg.value.mul(devFee).div(1000); but we have refactored to only ever issue 1 token and the msg.value may exceed the price of one token
        uint supply = object.totalSupply();

        if (msg.value > shopSettings.price) { // if sender sent extra eth, account for it so we can send it back later
            excessEth[msg.sender] = excessEth[msg.sender].add(msg.value.sub(shopSettings.price));
            totalExcessEth = totalExcessEth.add(msg.value.sub(shopSettings.price));
        }
        
        shopSettings.bank.transfer(fee);
        itemsOwned[msg.sender] = itemsOwned[msg.sender].add(1 ether);
                
        // update caller's balance and our debt
        uint earnings = (itemsOwned[msg.sender].div(1 ether).sub(1)).mul(supply.sub(latestBalanceCheck[msg.sender])).div(1 ether).mul(itemReturn);
        if (latestBalanceCheck[msg.sender] != 0) { // if this isn't the first time we've checked buyer's balance owed...
            balanceOwed[msg.sender] = balanceOwed[msg.sender].add(earnings);
            runningDebt = runningDebt.add(earnings);
        }
        latestBalanceCheck[msg.sender] = supply;
        maxDebt = maxDebt.add((supply.sub(1 ether)).div(1 ether).mul(itemReturn)); // update maxDebt given the new item total

        additionalDebt = maxDebt.sub(runningDebt).sub(debtPaid); // update total debt not yet accounted for due to amoritzation
        
        if (additionalDebt < 0) { // this check may be unnecessary but may have been needed for the prototype
            additionalDebt = 0;
        }
        
        // update price of item (using rate for scalability) so that we can always cover fee + returns
        if (supply.div(1 ether).mul(itemReturn).add(runningDebt).add(additionalDebt) > (this.balance.sub(totalExcessEth))) {
            shopSettings.rate = (1 ether).mul(1 ether).div(supply.div(1 ether).mul(itemReturn).mul(1000).div((uint(1000).sub(devFee))));
            calculatePrice(); // update price
            PriceUpdate(shopSettings.price);
        }

        //EnchantedObjectMinted(supply); // FIX THIS
    }

    /*
    changes needed for refactoring

    // "enchanted items have a recommended bid which increases your likelihood of obtaining the item. However, you will still pay the best possible price—any ETH sent in excess of the lowest available price of the item is automatically added to your account balance and can be withdrawn from the contract at any time."

    // add recommendedBid which is real price rounded up to the next .01 - use round/truncate: https://ethereum.stackexchange.com/questions/5836/what-is-the-cheapest-way-to-roundup-or-ceil-to-multiple-of-1000
    // add price paid - real price to balance owed
    // mint exactly one token (calculateTokens)

    // we don't seem to actually use whenClosed, whenOpen

    */

    function claimFunds() onlyContributors public {
        // must use onlyContributors (itemsOwned > 0) as a check here!
        uint latest = latestBalanceCheck[msg.sender];
        uint supply = object.totalSupply();
        uint balance = balanceOwed[msg.sender];
        uint earnings = itemsOwned[msg.sender].div(1 ether).mul(supply.sub(latest)).div(1 ether).mul(itemReturn);
        
        uint excess = excessEth[msg.sender];

        // update latestBalanceCheck, reset balance owed to caller, and reset excess eth owed to caller
        // do all of these before calling transfer function or incrementing balance mappings so as to circumvent reentrancy attacks
        latestBalanceCheck[msg.sender] = supply;
        balanceOwed[msg.sender] = 0;
        excessEth[msg.sender] = 0;

        balance = balance.add(earnings); // account for user's earnings since lastBalanceCheck, but don't add it to balanceOwed to prevent reentrancy attacks
        // next, update our debt:
        runningDebt = runningDebt.add(earnings);
        runningDebt = runningDebt.sub(balance); // might be going negative due to not adding the excess eth send to runningDebt
        debtPaid = debtPaid.add(balance);

        // account for excess Eth
        balance = balance.add(excess);
        totalExcessEth = totalExcessEth.sub(excess);

        WillWithdraw(balance);

        // finally, send balance owed to msg.sender
        require(balance > 0);
        msg.sender.transfer(balance);
        //totalWithdrawn[msg.sender] = totalWithdrawn[msg.sender].add(balance.sub(excess));

        // might want to return bool
    }

    function startUnlock()
    onlyOwner public
    {
        require(lock && now.sub(unlockDate) > 2 weeks);
        unlockDate = now + 2 weeks;
        lock = false;
        StartedSafeUnlock(now);
    }

    function emergencyWithdraw(uint amount, bool relock)
    onlyOwner public
    {
        require(!lock && now > unlockDate);
        shopSettings.bank.transfer(amount);
        if (relock) {
            lock = relock;
            SafeLocked(now);
        }
    }

}

/*
to-do:
- implement something so that calling claimFunds() if the balance var is 0 throws an exception?

- implement a check if necessary for when balance to be sent to msg.sender > address.balance

- implement an emergency withdrawal function for owners?
    migrate this from ShopManager

- "forwardFunds() in EnchantedShop has to be executed sequentially with other purchases, we may want to implement the design you were talking about before which forces 1 tx per block or whatever it was" -- will know more after testing









    address public bank;
    bool public lock;
    uint public unlockDate;

    event FundsMoved(uint amount);
    event SafeLocked(uint date);
    event StartedSafeUnlock(uint date);
    
    function ShopManager (address _bank) public {
        bank = _bank;
        unlockDate = 0;
        lock = true;
        SafeLocked(now);
    }

    function startUnlock()
    onlyOwner public
    {
        require(lock && now - unlockDate > 2 weeks);
        unlockDate = now + 2 weeks;
        lock = false;
        StartedSafeUnlock(now);
    }

    function fundsToBank()
    onlyOwner public
    {
        require(!lock && now > unlockDate);
        bank.transfer(this.balance);
        lock = true;
        SafeLocked(now);
    }


*/

    Contract ABI  
[{"constant":true,"inputs":[],"name":"additionalDebt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"object","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"itemsOwned","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"latestBalanceCheck","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"devFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"unlockDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"itemReturn","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"originalPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"startUnlock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyObject","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"closeShop","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"shopSettings","outputs":[{"name":"bank","type":"address"},{"name":"startTime","type":"uint32"},{"name":"endTime","type":"uint32"},{"name":"fundsRaised","type":"uint256"},{"name":"rate","type":"uint256"},{"name":"price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"runningDebt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"relock","type":"bool"}],"name":"emergencyWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"debtPaid","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxDebt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalExcessEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"excessEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lock","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOwed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_bank","type":"address"},{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_rate","type":"uint256"},{"name":"_endTime","type":"uint32"},{"name":"_itemReturn","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"wallet","type":"address"},{"indexed":false,"name":"rate","type":"uint256"},{"indexed":false,"name":"itemReturn","type":"uint256"},{"indexed":false,"name":"endTime","type":"uint32"}],"name":"ShopDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"price","type":"uint256"}],"name":"PriceUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"FundsMoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"date","type":"uint256"}],"name":"SafeLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"date","type":"uint256"}],"name":"StartedSafeUnlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"WillWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"date","type":"uint32"}],"name":"ShopClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"ObjectPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405234156200001057600080fd5b60405162003c2538038062003c25833981016040528080519060200190919080518201919060200180518201919060200180519060200190919080519060200190919080519060200190919050508585858585336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515620000e157600080fd5b60008310151515620000f257600080fd5b428263ffffffff161115156200010757600080fd5b60c0604051908101604052808773ffffffffffffffffffffffffffffffffffffffff1681526020014263ffffffff1681526020018363ffffffff168152602001600081526020018481526020016000815250600260008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548163ffffffff021916908363ffffffff160217905550606082015181600101556080820151816002015560a082015181600301559050506200022f620004b16401000000000262001aa5176401000000009004565b5084846200023c6200056b565b808060200180602001838103835285818151815260200191508051906020019080838360005b838110156200027f57808201518184015260208101905062000262565b50505050905090810190601f168015620002ad5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015620002e8578082015181840152602081019050620002cb565b50505050905090810190601f168015620003165780820380516001836020036101000a031916815260200191505b50945050505050604051809103906000f08015156200033457600080fd5b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050620003a36064600260030154620005106401000000000262001a4f179091906401000000009004565b81141515620003b157600080fd5b80600a81905550600260030154600f819055507f71be1851bb7ff5d8237de4de4b82736205ee1d47ca1d2895b92bf33fbacd4ebd86848385604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018263ffffffff1663ffffffff16815260200194505050505060405180910390a160006012819055506001601160006101000a81548160ff0219169083151502179055507fa7bc3cb9591bd9990bb948d3975502affafeef235b08b15eea1bf5be92badff1426040518082815260200191505060405180910390a15050505050506200057c565b6000620005046002800154620004e7670de0b6b3a7640000806200052c6401000000000262001a6a179091906401000000009004565b620005106401000000000262001a4f179091906401000000009004565b60026003018190555090565b60008082848115156200051f57fe5b0490508091505092915050565b600080600084141562000543576000915062000564565b82840290508284828115156200055557fe5b041415156200056057fe5b8091505b5092915050565b604051611b89806200209c83390190565b611b10806200058c6000396000f300606060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305d8bb971461013e5780632812988f1461016757806348e1c18b146101bc5780634bdbea2f146102095780636827e7641461025657806369ac57211461027f5780636e9cfb79146102a857806376a24f25146102d15780637baf5b84146102fa578063828f1b421461030f5780638da5cb5b1461033d5780639b6dbc8a14610392578063a52c34c3146103a7578063ac30777314610437578063b1bb5fde1461044c578063bb5b3edc14610475578063cbb04cbd146104a3578063d0064c00146104cc578063d7bea56a146104f5578063db31fb031461051e578063f2fde38b1461056b578063f83d08ba146105a4578063ff9852bf146105d1575b61013c3361061e565b005b341561014957600080fd5b610151610899565b6040518082815260200191505060405180910390f35b341561017257600080fd5b61017a61089f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101c757600080fd5b6101f3600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506108c5565b6040518082815260200191505060405180910390f35b341561021457600080fd5b610240600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506108dd565b6040518082815260200191505060405180910390f35b341561026157600080fd5b6102696108f5565b6040518082815260200191505060405180910390f35b341561028a57600080fd5b6102926108fa565b6040518082815260200191505060405180910390f35b34156102b357600080fd5b6102bb610900565b6040518082815260200191505060405180910390f35b34156102dc57600080fd5b6102e4610906565b6040518082815260200191505060405180910390f35b341561030557600080fd5b61030d61090c565b005b61033b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061061e565b005b341561034857600080fd5b610350610a04565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561039d57600080fd5b6103a5610a29565b005b34156103b257600080fd5b6103ba610b16565b604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff168152602001848152602001838152602001828152602001965050505050505060405180910390f35b341561044257600080fd5b61044a610b80565b005b341561045757600080fd5b61045f610fe5565b6040518082815260200191505060405180910390f35b341561048057600080fd5b6104a160048080359060200190919080351515906020019091905050610feb565b005b34156104ae57600080fd5b6104b6611130565b6040518082815260200191505060405180910390f35b34156104d757600080fd5b6104df611136565b6040518082815260200191505060405180910390f35b341561050057600080fd5b61050861113c565b6040518082815260200191505060405180910390f35b341561052957600080fd5b610555600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611142565b6040518082815260200191505060405180910390f35b341561057657600080fd5b6105a2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061115a565b005b34156105af57600080fd5b6105b76112af565b604051808215151515815260200191505060405180910390f35b34156105dc57600080fd5b610608600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506112c2565b6040518082815260200191505060405180910390f35b6000600260030154341015151561063457600080fd5b600260000160149054906101000a900463ffffffff1663ffffffff16421015801561067a5750600260000160189054906101000a900463ffffffff1663ffffffff164211155b8015610687575060003414155b151561069257600080fd5b813373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415156106cd57600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561070a57600080fd5b6107126112da565b925061072c346002600101546112f390919063ffffffff16565b600260010181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1985856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561080257600080fd5b6102c65a03f1151561081357600080fd5b50505060405180519050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17f6c712ed756d8ee310ddf7fcd41ffcfb4dd5dd9dcbfe8bd92fad7717a6b5cb3486604051808381526020018281526020019250505060405180910390a3610893611311565b50505050565b600d5481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60086020528060005260406000206000915090505481565b60076020528060005260406000206000915090505481565b607d81565b60125481565b600a5481565b600f5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561096757600080fd5b601160009054906101000a900460ff16801561099957506212750061099760125442611a3690919063ffffffff16565b115b15156109a457600080fd5b6212750042016012819055506000601160006101000a81548160ff0219169083151502179055507f19245155fbfd5d28f967eb8d3965f5a0608252e7acdece34eb2c00919a9f5163426040518082815260200191505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a8457600080fd5b600260000160189054906101000a900463ffffffff1663ffffffff1642101515610aad57600080fd5b42600260000160186101000a81548163ffffffff021916908363ffffffff1602179055507fb567a1e708dab1490bd0e0c66021fec2bd86fa13605874f72415015ad4b31ee642604051808263ffffffff1663ffffffff16815260200191505060405180910390a1565b60028060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900463ffffffff16908060000160189054906101000a900463ffffffff16908060010154908060020154908060030154905086565b600080600080600080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111515610bd557600080fd5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549450600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515610ca557600080fd5b6102c65a03f11515610cb657600080fd5b505050604051805190509350600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549250610db0600a54610da2670de0b6b3a7640000610d94610d2c8a8a611a3690919063ffffffff16565b610d86670de0b6b3a7640000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a4f90919063ffffffff16565b611a6a90919063ffffffff16565b611a4f90919063ffffffff16565b611a6a90919063ffffffff16565b9150600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ed582846112f390919063ffffffff16565b9250610eec82600c546112f390919063ffffffff16565b600c81905550610f0783600c54611a3690919063ffffffff16565b600c81905550610f2283600e546112f390919063ffffffff16565b600e81905550610f3b81846112f390919063ffffffff16565b9250610f5281601054611a3690919063ffffffff16565b6010819055507fb5df3ef832e32a6fad6eb76596d61268bb83567253a51b6b6e24b5f029c87c2e836040518082815260200191505060405180910390a1600083111515610f9e57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501515610fde57600080fd5b5050505050565b600c5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561104657600080fd5b601160009054906101000a900460ff16158015611064575060125442115b151561106f57600080fd5b600260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015156110d457600080fd5b801561112c5780601160006101000a81548160ff0219169083151502179055507fa7bc3cb9591bd9990bb948d3975502affafeef235b08b15eea1bf5be92badff1426040518082815260200191505060405180910390a15b5050565b600e5481565b600b5481565b60105481565b60096020528060005260406000206000915090505481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111b557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156111f157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601160009054906101000a900460ff1681565b60066020528060005260406000206000915090505481565b60006112e4611aa5565b50670de0b6b3a7640000905090565b600080828401905083811015151561130757fe5b8091505092915050565b60008060006113436103e8611335607d600260030154611a6a90919063ffffffff16565b611a4f90919063ffffffff16565b9250600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156113d357600080fd5b6102c65a03f115156113e457600080fd5b5050506040518051905091506002600301543411156114dc5761146661141860026003015434611a3690919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112f390919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506114d56114c460026003015434611a3690919063ffffffff16565b6010546112f390919063ffffffff16565b6010819055505b600260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050151561154157600080fd5b61159b670de0b6b3a7640000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112f390919063ffffffff16565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116dc600a546116ce670de0b6b3a76400006116c0611645600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205488611a3690919063ffffffff16565b6116b260016116a4670de0b6b3a7640000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a4f90919063ffffffff16565b611a3690919063ffffffff16565b611a6a90919063ffffffff16565b611a4f90919063ffffffff16565b611a6a90919063ffffffff16565b90506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415156117d85761177981600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112f390919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117d181600c546112f390919063ffffffff16565b600c819055505b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611879611868600a5461185a670de0b6b3a764000061184c670de0b6b3a764000088611a3690919063ffffffff16565b611a4f90919063ffffffff16565b611a6a90919063ffffffff16565b600b546112f390919063ffffffff16565b600b819055506118aa600e5461189c600c54600b54611a3690919063ffffffff16565b611a3690919063ffffffff16565b600d819055506000600d5410156118c4576000600d819055505b6118f06010543073ffffffffffffffffffffffffffffffffffffffff1631611a3690919063ffffffff16565b611947600d54611939600c5461192b600a5461191d670de0b6b3a76400008a611a4f90919063ffffffff16565b611a6a90919063ffffffff16565b6112f390919063ffffffff16565b6112f390919063ffffffff16565b1115611a31576119e36119ba611969607d6103e8611a3690919063ffffffff16565b6119ac6103e861199e600a54611990670de0b6b3a76400008a611a4f90919063ffffffff16565b611a6a90919063ffffffff16565b611a6a90919063ffffffff16565b611a4f90919063ffffffff16565b6119d5670de0b6b3a764000080611a6a90919063ffffffff16565b611a4f90919063ffffffff16565b60028001819055506119f3611aa5565b507fae46785019700e30375a5d7b4f91e32f8060ef085111f896ebf889450aa2ab5a6002600301546040518082815260200191505060405180910390a15b505050565b6000828211151515611a4457fe5b818303905092915050565b6000808284811515611a5d57fe5b0490508091505092915050565b6000806000841415611a7f5760009150611a9e565b8284029050828482811515611a9057fe5b04141515611a9a57fe5b8091505b5092915050565b6000611ad86002800154611aca670de0b6b3a764000080611a6a90919063ffffffff16565b611a4f90919063ffffffff16565b600260030181905550905600a165627a7a723058205f886375a76a5cb52db71f6ebf0c92c93b9f71d3e47e53224f4e39c7e70e4903002960606040526000600660006101000a81548160ff02191690831515021790555034156200002b57600080fd5b60405162001b8938038062001b898339810160405280805182019190602001805182019190505033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160049080519060200190620000ab929190620000cd565b508060059080519060200190620000c4929190620000cd565b5050506200017c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200011057805160ff191683800117855562000141565b8280016001018555821562000141579182015b828111156200014057825182559160200191906001019062000123565b5b50905062000150919062000154565b5090565b6200017991905b80821115620001755760008160009055506001016200015b565b5090565b90565b6119fd806200018c6000396000f3006060604052600436106100f1576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305d2035b146100f657806306fdde0314610123578063095ea7b3146101b157806318160ddd1461020b57806323b872dd14610234578063313ce567146102ad57806340c10f19146102dc57806342966c6814610336578063661884631461035957806370a08231146103b35780637d64bcb4146104005780638da5cb5b1461042d57806395d89b4114610482578063a9059cbb14610510578063d73dd6231461056a578063dd62ed3e146105c4578063f2fde38b14610630575b600080fd5b341561010157600080fd5b610109610669565b604051808215151515815260200191505060405180910390f35b341561012e57600080fd5b61013661067c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561017657808201518184015260208101905061015b565b50505050905090810190601f1680156101a35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101bc57600080fd5b6101f1600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061071a565b604051808215151515815260200191505060405180910390f35b341561021657600080fd5b61021e61080c565b6040518082815260200191505060405180910390f35b341561023f57600080fd5b610293600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610812565b604051808215151515815260200191505060405180910390f35b34156102b857600080fd5b6102c0610bd1565b604051808260ff1660ff16815260200191505060405180910390f35b34156102e757600080fd5b61031c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bd6565b604051808215151515815260200191505060405180910390f35b341561034157600080fd5b6103576004808035906020019091905050610dbe565b005b341561036457600080fd5b610399600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610f13565b604051808215151515815260200191505060405180910390f35b34156103be57600080fd5b6103ea600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111a4565b6040518082815260200191505060405180910390f35b341561040b57600080fd5b6104136111ed565b604051808215151515815260200191505060405180910390f35b341561043857600080fd5b6104406112b5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561048d57600080fd5b6104956112db565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104d55780820151818401526020810190506104ba565b50505050905090810190601f1680156105025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561051b57600080fd5b610550600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611379565b604051808215151515815260200191505060405180910390f35b341561057557600080fd5b6105aa600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506115bf565b604051808215151515815260200191505060405180910390f35b34156105cf57600080fd5b61061a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506117bb565b6040518082815260200191505060405180910390f35b341561063b57600080fd5b610667600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611842565b005b600660009054906101000a900460ff1681565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107125780601f106106e757610100808354040283529160200191610712565b820191906000526020600020905b8154815290600101906020018083116106f557829003601f168201915b505050505081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60005481565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561084f57600080fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561089d57600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561092857600080fd5b61097a82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461199a90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a0f82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119b390919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ae182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461199a90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c3457600080fd5b600660009054906101000a900460ff16151515610c5057600080fd5b610c65826000546119b390919063ffffffff16565b600081905550610cbd82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119b390919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610e0e57600080fd5b339050610e6382600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461199a90919063ffffffff16565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ebb8260005461199a90919063ffffffff16565b6000819055508073ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040518082815260200191505060405180910390a25050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115611024576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110b8565b611037838261199a90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561124b57600080fd5b600660009054906101000a900460ff1615151561126757600080fd5b6001600660006101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a16001905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113715780601f1061134657610100808354040283529160200191611371565b820191906000526020600020905b81548152906001019060200180831161135457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156113b657600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561140457600080fd5b6000670de0b6b3a76400008381151561141957fe5b0614151561142657600080fd5b61147882600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461199a90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061150d82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119b390919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600061165082600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119b390919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561189e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156118da57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008282111515156119a857fe5b818303905092915050565b60008082840190508381101515156119c757fe5b80915050929150505600a165627a7a723058207fa3ef8de074600e8cd200cc3e8758e54c268c210cc8d10b2ee5c0e0972f5df2002900000000000000000000000036770ff967bd05248b1c4c899ffb70caa3391b8400000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000005a83da9200000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000000846726f6720486174000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000748454c4d37373700000000000000000000000000000000000000000000000000

   Swarm Source:
bzzr://7fa3ef8de074600e8cd200cc3e8758e54c268c210cc8d10b2ee5c0e0972f5df2

 

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.