Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 18480 txns
Misc:
Address Watch: Add To Watch List
Contract Creator: 0xd82369aaec27c7a749afdb4eb71add9e64154cd6at txn 0x148684a9f1493b65a2c25031baad3d5fc62f2c0f0e8d6727a381a3529c7f32ef
 Latest 25 transactions from a total of 18480 transactions
(+4 PendingTxns)

TxHash Age From To Value [TxFee]
0x9130a38829ca07c41e82b6d2ca36ea0e0e8d87f5a3fa88b0584850fe7a5996e5(pending)0x713558113b03e1a110e45270af50e7b024b65d2e  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.891 Ether(Pending)
0x5638e7ee2fff1e8a8f7cb2067a463fe720e7f84eb93ab3144e329e61a2fa1ddd(pending)0x408bcc8c6d3e929f707b45fd2a3e4afe8c5c3bbf  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.0035 Ether(Pending)
0x1c0486356b3777450ddb9848756cfbcd2149a8e5a97e6b8dc8eef48296b53fee(pending)0x954d9420a67469af8b6dcc934688e703a43c9c8c  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.0000024 Ether(Pending)
0x9efdcc4749c8d75faaa97657c1b0edc3c8f0685892d0b7b93a618018e421ec0e(pending)0xa0652bb68340bec7144f1d545fdc2c84b9da11fc  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.03 Ether(Pending)
0x69e48405cd81e4d9b69b3679c4b5abac1b873d144d8b44fd17d05f743c60dddd7 mins ago0xdcd8e436fd89e04dfa35ecfd2355a1c5303419ae  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.86 Ether0.003010794
0x30159e8a0ab0f99a361b69c944b5147bc846951423b2b70771fdea33ccfc092e1 hr 1 min ago0x779fd0fb9a6359f90f57d66317a397230013af18  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.05 Ether0.000840426
0x97d2f48800c5c8d26382bf0d56bf557c1624bc11e5b434c7470c25888bd8285a1 hr 23 mins ago0xc6f776a903cfa54f702ea7daf15cdca45d64f17e  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.085 Ether0.00075112911
0x86bc6f614827b1b46ca11db09df1233a755bf62a736c6fa849f8f642c2a670f32 hrs 25 mins ago0x2a544ee7dca6663841ac2956530bbd1bd482e657  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd2.4 Ether0.00173817
0xf4927e90a33c4c2e18265e504553cd9252b1c531d1bf4c6d464909664329e1042 hrs 25 mins ago0x2a544ee7dca6663841ac2956530bbd1bd482e657  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd2.2 Ether0.0019330856
0x97e5b75d3ea421cf83ed9e126426372e3be9e81ff987133d9228d459a55734f32 hrs 28 mins ago0x2a544ee7dca6663841ac2956530bbd1bd482e657  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd2.855 Ether0.0018929561
0x6871f2647bf7aba591146c00b0d3ade5f3426a4e816e5b4155ba182a1b52f6452 hrs 33 mins ago0x2a544ee7dca6663841ac2956530bbd1bd482e657  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd1.74 Ether0.0020865604
0x4735731221173387e099d71ee915aef5588461ae717b22c77a2944a07e1a57eb2 hrs 34 mins ago0x2a544ee7dca6663841ac2956530bbd1bd482e657  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd1.75 Ether0.0019409596
0x5e5fb3cda206fb076659a9eb0a2e9edae8f1e98c1cc6aeedd8ea43ed2666fc254 hrs 28 mins ago0x522273122b20212fe255875a4737b6f50cc72006  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.4485 Ether0.005659767
0xb793327c860c50d4df4c3d76eab600038c0521217ca5d9b800000e09effbfe705 hrs 35 mins ago0x522273122b20212fe255875a4737b6f50cc72006  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.16 Ether0.005878272
0x02a6b7aa2b058d573e1540079cf85c5a201566bf8406caa77bdfbec70d92dd1c6 hrs 10 mins ago0x78e8c455c998d5a023ce5df5296702bead0b4cd1  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.275 Ether0.0023263632
0x6e173e024762b5f38e52f0ee0d627fbf042bd0c6f1a91b4d149551be2953b3146 hrs 17 mins ago0xc760918ff85d5edaf516685e848bc26ce71ab4be  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd2.58 Ether0.001136114
0x6855e921ebc8e7d351ad44d832e7b41e10680e1e783cdbf4bc98709be85344317 hrs 16 mins ago0xc454e2b4ebb3c74b2caf83e74067a8055b375e4e  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.1 Ether0.00673563
0x2ef6ebca1b8ae894dde01d4e9c04a8b2f47701db0f376d9eb11bf741ce43a7d37 hrs 32 mins ago0x44e9d011df8741be2493e99297e9ad67bb1aa85b  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.15 Ether0.002295364
0xfdaf8617c97569c6765d00a7f573ec2ba32564895baf8700b58b84db15853f9d7 hrs 42 mins ago0x44e9d011df8741be2493e99297e9ad67bb1aa85b  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.225 Ether0.0040299
0x140998e8b363ea9d5a74d2b9157226481c7c5625a9773fa069cf0027b4d0ac7a7 hrs 43 mins ago0x44e9d011df8741be2493e99297e9ad67bb1aa85b  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.225 Ether0.00408492
0x47d98430a0bce58833ceae2f2a3b89c7c57561c03381351506ec37386afe04867 hrs 46 mins ago0x44e9d011df8741be2493e99297e9ad67bb1aa85b  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.225 Ether0.004273969
0xab39b60b020d6d7cc06ddbcca2464bc898697a7a7a09a42ae570a7f8e68967ff7 hrs 48 mins ago0x44e9d011df8741be2493e99297e9ad67bb1aa85b  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.32 Ether0.00401716
0x36a9d4adba354f4efe4196c156c31647ab1e7f6d88cf407a83f2c9ec96bb6abd7 hrs 50 mins ago0x44e9d011df8741be2493e99297e9ad67bb1aa85b  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.25 Ether0.004382364
0xe6f93eb4438abff975454084ebd5930443d79f3a5f41ddb0604d4b81c131ffa58 hrs 42 mins ago0xe47a48dbdb6b225539ff05f2b8a50849584b4f2f  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.41 Ether0.004451655
0x6ea685008cd1cb6cabe3d6fc0694b603e1f215c2df986258857e01fc2dfee9b49 hrs 32 mins ago0xe47a48dbdb6b225539ff05f2b8a50849584b4f2f  IN   0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.35 Ether0.004538335
[ 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
0x69e48405cd81e4d9b69b3679c4b5abac1b873d144d8b44fd17d05f743c60dddd70833107 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.86 Ether
0x30159e8a0ab0f99a361b69c944b5147bc846951423b2b70771fdea33ccfc092e70830651 hr 1 min ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.05 Ether
0x97d2f48800c5c8d26382bf0d56bf557c1624bc11e5b434c7470c25888bd8285a70829791 hr 23 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.085 Ether
0x86bc6f614827b1b46ca11db09df1233a755bf62a736c6fa849f8f642c2a670f370827142 hrs 25 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b2.4 Ether
0xf4927e90a33c4c2e18265e504553cd9252b1c531d1bf4c6d464909664329e10470827112 hrs 25 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b2.2 Ether
0x97e5b75d3ea421cf83ed9e126426372e3be9e81ff987133d9228d459a55734f370827022 hrs 28 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b2.855 Ether
0x6871f2647bf7aba591146c00b0d3ade5f3426a4e816e5b4155ba182a1b52f64570826892 hrs 33 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b1.74 Ether
0x4735731221173387e099d71ee915aef5588461ae717b22c77a2944a07e1a57eb70826862 hrs 34 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b1.75 Ether
0x5e5fb3cda206fb076659a9eb0a2e9edae8f1e98c1cc6aeedd8ea43ed2666fc2570822424 hrs 28 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.4485 Ether
0xb793327c860c50d4df4c3d76eab600038c0521217ca5d9b800000e09effbfe7070819935 hrs 35 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.16 Ether
0x02a6b7aa2b058d573e1540079cf85c5a201566bf8406caa77bdfbec70d92dd1c70818366 hrs 10 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.275 Ether
0x6e173e024762b5f38e52f0ee0d627fbf042bd0c6f1a91b4d149551be2953b31470818096 hrs 17 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b2.58 Ether
0x6855e921ebc8e7d351ad44d832e7b41e10680e1e783cdbf4bc98709be853443170815837 hrs 16 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.1 Ether
0x2ef6ebca1b8ae894dde01d4e9c04a8b2f47701db0f376d9eb11bf741ce43a7d370815247 hrs 32 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.15 Ether
0xfdaf8617c97569c6765d00a7f573ec2ba32564895baf8700b58b84db15853f9d70814897 hrs 42 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.225 Ether
0x140998e8b363ea9d5a74d2b9157226481c7c5625a9773fa069cf0027b4d0ac7a70814837 hrs 43 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.225 Ether
0x47d98430a0bce58833ceae2f2a3b89c7c57561c03381351506ec37386afe048670814707 hrs 46 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.225 Ether
0xab39b60b020d6d7cc06ddbcca2464bc898697a7a7a09a42ae570a7f8e68967ff70814617 hrs 48 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.32 Ether
0x36a9d4adba354f4efe4196c156c31647ab1e7f6d88cf407a83f2c9ec96bb6abd70814547 hrs 50 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.25 Ether
0xe6f93eb4438abff975454084ebd5930443d79f3a5f41ddb0604d4b81c131ffa570812628 hrs 42 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.41 Ether
0x6ea685008cd1cb6cabe3d6fc0694b603e1f215c2df986258857e01fc2dfee9b470810759 hrs 32 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.35 Ether
0x24044f09eeca393dd181eb0ec7fcdef4ff213cd292e91fc279a145e128b03bb4708012313 hrs 35 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.74 Ether
0x5c88de974133154ed76eb9419dc22901799b539a2e931160a1c3377a33fa78e7707980415 hrs 4 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.08 Ether
0xaaeea4b9092c8cd786f66d6ed30dc779a40e9e0b09edfead69ff97550a5d070f707970315 hrs 31 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.03 Ether
0x7e3af5437436a3ac765a6ecf04adc73bb9f90b8d3cdccaa7689300bef7101bbf707959416 hrs ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.082 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: Trade
Compiler Text: v0.4.20+commit.3155dd80
Optimization Enabled: Yes
Runs (Optimiser):  500



  Contract Source Code   Find Similiar Contracts

pragma solidity 0.4.20;

contract IAugur {
    function createChildUniverse(bytes32 _parentPayoutDistributionHash, uint256[] _parentPayoutNumerators, bool _parentInvalid) public returns (IUniverse);
    function isKnownUniverse(IUniverse _universe) public view returns (bool);
    function trustedTransfer(ERC20 _token, address _from, address _to, uint256 _amount) public returns (bool);
    function logMarketCreated(bytes32 _topic, string _description, string _extraInfo, IUniverse _universe, address _market, address _marketCreator, bytes32[] _outcomes, int256 _minPrice, int256 _maxPrice, IMarket.MarketType _marketType) public returns (bool);
    function logMarketCreated(bytes32 _topic, string _description, string _extraInfo, IUniverse _universe, address _market, address _marketCreator, int256 _minPrice, int256 _maxPrice, IMarket.MarketType _marketType) public returns (bool);
    function logInitialReportSubmitted(IUniverse _universe, address _reporter, address _market, uint256 _amountStaked, bool _isDesignatedReporter, uint256[] _payoutNumerators, bool _invalid) public returns (bool);
    function disputeCrowdsourcerCreated(IUniverse _universe, address _market, address _disputeCrowdsourcer, uint256[] _payoutNumerators, uint256 _size, bool _invalid) public returns (bool);
    function logDisputeCrowdsourcerContribution(IUniverse _universe, address _reporter, address _market, address _disputeCrowdsourcer, uint256 _amountStaked) public returns (bool);
    function logDisputeCrowdsourcerCompleted(IUniverse _universe, address _market, address _disputeCrowdsourcer) public returns (bool);
    function logInitialReporterRedeemed(IUniverse _universe, address _reporter, address _market, uint256 _amountRedeemed, uint256 _repReceived, uint256 _reportingFeesReceived, uint256[] _payoutNumerators) public returns (bool);
    function logDisputeCrowdsourcerRedeemed(IUniverse _universe, address _reporter, address _market, uint256 _amountRedeemed, uint256 _repReceived, uint256 _reportingFeesReceived, uint256[] _payoutNumerators) public returns (bool);
    function logFeeWindowRedeemed(IUniverse _universe, address _reporter, uint256 _amountRedeemed, uint256 _reportingFeesReceived) public returns (bool);
    function logMarketFinalized(IUniverse _universe) public returns (bool);
    function logMarketMigrated(IMarket _market, IUniverse _originalUniverse) public returns (bool);
    function logReportingParticipantDisavowed(IUniverse _universe, IMarket _market) public returns (bool);
    function logMarketParticipantsDisavowed(IUniverse _universe) public returns (bool);
    function logOrderCanceled(IUniverse _universe, address _shareToken, address _sender, bytes32 _orderId, Order.Types _orderType, uint256 _tokenRefund, uint256 _sharesRefund) public returns (bool);
    function logOrderCreated(Order.Types _orderType, uint256 _amount, uint256 _price, address _creator, uint256 _moneyEscrowed, uint256 _sharesEscrowed, bytes32 _tradeGroupId, bytes32 _orderId, IUniverse _universe, address _shareToken) public returns (bool);
    function logOrderFilled(IUniverse _universe, address _shareToken, address _filler, bytes32 _orderId, uint256 _numCreatorShares, uint256 _numCreatorTokens, uint256 _numFillerShares, uint256 _numFillerTokens, uint256 _marketCreatorFees, uint256 _reporterFees, uint256 _amountFilled, bytes32 _tradeGroupId) public returns (bool);
    function logCompleteSetsPurchased(IUniverse _universe, IMarket _market, address _account, uint256 _numCompleteSets) public returns (bool);
    function logCompleteSetsSold(IUniverse _universe, IMarket _market, address _account, uint256 _numCompleteSets) public returns (bool);
    function logTradingProceedsClaimed(IUniverse _universe, address _shareToken, address _sender, address _market, uint256 _numShares, uint256 _numPayoutTokens, uint256 _finalTokenBalance) public returns (bool);
    function logUniverseForked() public returns (bool);
    function logFeeWindowTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool);
    function logReputationTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool);
    function logDisputeCrowdsourcerTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool);
    function logShareTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool);
    function logReputationTokenBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logReputationTokenMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logShareTokenBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logShareTokenMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logFeeWindowBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logFeeWindowMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logDisputeCrowdsourcerTokensBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logDisputeCrowdsourcerTokensMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logFeeWindowCreated(IFeeWindow _feeWindow, uint256 _id) public returns (bool);
    function logFeeTokenTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool);
    function logFeeTokenBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logFeeTokenMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logTimestampSet(uint256 _newTimestamp) public returns (bool);
    function logInitialReporterTransferred(IUniverse _universe, IMarket _market, address _from, address _to) public returns (bool);
    function logMarketTransferred(IUniverse _universe, address _from, address _to) public returns (bool);
    function logMarketMailboxTransferred(IUniverse _universe, IMarket _market, address _from, address _to) public returns (bool);
    function logEscapeHatchChanged(bool _isOn) public returns (bool);
}

contract IControlled {
    function getController() public view returns (IController);
    function setController(IController _controller) public returns(bool);
}

contract Controlled is IControlled {
    IController internal controller;

    modifier onlyWhitelistedCallers {
        require(controller.assertIsWhitelisted(msg.sender));
        _;
    }

    modifier onlyCaller(bytes32 _key) {
        require(msg.sender == controller.lookup(_key));
        _;
    }

    modifier onlyControllerCaller {
        require(IController(msg.sender) == controller);
        _;
    }

    modifier onlyInGoodTimes {
        require(controller.stopInEmergency());
        _;
    }

    modifier onlyInBadTimes {
        require(controller.onlyInEmergency());
        _;
    }

    function Controlled() public {
        controller = IController(msg.sender);
    }

    function getController() public view returns(IController) {
        return controller;
    }

    function setController(IController _controller) public onlyControllerCaller returns(bool) {
        controller = _controller;
        return true;
    }
}

contract IController {
    function assertIsWhitelisted(address _target) public view returns(bool);
    function lookup(bytes32 _key) public view returns(address);
    function stopInEmergency() public view returns(bool);
    function onlyInEmergency() public view returns(bool);
    function getAugur() public view returns (IAugur);
    function getTimestamp() public view returns (uint256);
}

contract CashAutoConverter is Controlled {
    /**
     * @dev Convert any ETH provided in the transaction into Cash before the function executes and convert any remaining Cash balance into ETH after the function completes
     */
    modifier convertToAndFromCash() {
        ethToCash();
        _;
        cashToEth();
    }

    function ethToCash() private returns (bool) {
        if (msg.value > 0) {
            ICash(controller.lookup("Cash")).depositEtherFor.value(msg.value)(msg.sender);
        }
        return true;
    }

    function cashToEth() private returns (bool) {
        ICash _cash = ICash(controller.lookup("Cash"));
        uint256 _tokenBalance = _cash.balanceOf(msg.sender);
        if (_tokenBalance > 0) {
            IAugur augur = controller.getAugur();
            augur.trustedTransfer(_cash, msg.sender, this, _tokenBalance);
            _cash.withdrawEtherTo(msg.sender, _tokenBalance);
        }
        return true;
    }
}

contract IOwnable {
    function getOwner() public view returns (address);
    function transferOwnership(address newOwner) public returns (bool);
}

contract ITyped {
    function getTypeName() public view returns (bytes32);
}

contract Initializable {
    bool private initialized = false;

    modifier afterInitialized {
        require(initialized);
        _;
    }

    modifier beforeInitialized {
        require(!initialized);
        _;
    }

    function endInitialization() internal beforeInitialized returns (bool) {
        initialized = true;
        return true;
    }

    function getInitialized() public view returns (bool) {
        return initialized;
    }
}

contract MarketValidator is Controlled {
    modifier marketIsLegit(IMarket _market) {
        IUniverse _universe = _market.getUniverse();
        require(controller.getAugur().isKnownUniverse(_universe));
        require(_universe.isContainerForMarket(_market));
        _;
    }
}

contract ReentrancyGuard {
    /**
     * @dev We use a single lock for the whole contract.
     */
    bool private rentrancyLock = false;

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * @notice If you mark a function `nonReentrant`, you should also mark it `external`. Calling one nonReentrant function from another is not supported. Instead, you can implement a `private` function doing the actual work, and a `external` wrapper marked as `nonReentrant`.
     */
    modifier nonReentrant() {
        require(!rentrancyLock);
        rentrancyLock = true;
        _;
        rentrancyLock = false;
    }
}

library SafeMathUint256 {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a * b;
        require(a == 0 || 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) {
        require(b <= a);
        return a - b;
    }

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

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a <= b) {
            return a;
        } else {
            return b;
        }
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a >= b) {
            return a;
        } else {
            return b;
        }
    }

    function getUint256Min() internal pure returns (uint256) {
        return 0;
    }

    function getUint256Max() internal pure returns (uint256) {
        return 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
    }

    function isMultipleOf(uint256 a, uint256 b) internal pure returns (bool) {
        return a % b == 0;
    }

    // Float [fixed point] Operations
    function fxpMul(uint256 a, uint256 b, uint256 base) internal pure returns (uint256) {
        return div(mul(a, b), base);
    }

    function fxpDiv(uint256 a, uint256 b, uint256 base) internal pure returns (uint256) {
        return div(mul(a, base), b);
    }
}

contract ERC20Basic {
    event Transfer(address indexed from, address indexed to, uint256 value);

    function balanceOf(address _who) public view returns (uint256);
    function transfer(address _to, uint256 _value) public returns (bool);
    function totalSupply() public view returns (uint256);
}

contract ERC20 is ERC20Basic {
    event Approval(address indexed owner, address indexed spender, uint256 value);

    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);
}

contract IFeeToken is ERC20, Initializable {
    function initialize(IFeeWindow _feeWindow) public returns (bool);
    function getFeeWindow() public view returns (IFeeWindow);
    function feeWindowBurn(address _target, uint256 _amount) public returns (bool);
    function mintForReportingParticipant(address _target, uint256 _amount) public returns (bool);
}

contract IFeeWindow is ITyped, ERC20 {
    function initialize(IUniverse _universe, uint256 _feeWindowId) public returns (bool);
    function getUniverse() public view returns (IUniverse);
    function getReputationToken() public view returns (IReputationToken);
    function getStartTime() public view returns (uint256);
    function getEndTime() public view returns (uint256);
    function getNumMarkets() public view returns (uint256);
    function getNumInvalidMarkets() public view returns (uint256);
    function getNumIncorrectDesignatedReportMarkets() public view returns (uint256);
    function getNumDesignatedReportNoShows() public view returns (uint256);
    function getFeeToken() public view returns (IFeeToken);
    function isActive() public view returns (bool);
    function isOver() public view returns (bool);
    function onMarketFinalized() public returns (bool);
    function buy(uint256 _attotokens) public returns (bool);
    function redeem(address _sender) public returns (bool);
    function redeemForReportingParticipant() public returns (bool);
    function mintFeeTokens(uint256 _amount) public returns (bool);
    function trustedUniverseBuy(address _buyer, uint256 _attotokens) public returns (bool);
}

contract IMailbox {
    function initialize(address _owner, IMarket _market) public returns (bool);
    function depositEther() public payable returns (bool);
}

contract IMarket is ITyped, IOwnable {
    enum MarketType {
        YES_NO,
        CATEGORICAL,
        SCALAR
    }

    function initialize(IUniverse _universe, uint256 _endTime, uint256 _feePerEthInAttoeth, ICash _cash, address _designatedReporterAddress, address _creator, uint256 _numOutcomes, uint256 _numTicks) public payable returns (bool _success);
    function derivePayoutDistributionHash(uint256[] _payoutNumerators, bool _invalid) public view returns (bytes32);
    function getUniverse() public view returns (IUniverse);
    function getFeeWindow() public view returns (IFeeWindow);
    function getNumberOfOutcomes() public view returns (uint256);
    function getNumTicks() public view returns (uint256);
    function getDenominationToken() public view returns (ICash);
    function getShareToken(uint256 _outcome)  public view returns (IShareToken);
    function getMarketCreatorSettlementFeeDivisor() public view returns (uint256);
    function getForkingMarket() public view returns (IMarket _market);
    function getEndTime() public view returns (uint256);
    function getMarketCreatorMailbox() public view returns (IMailbox);
    function getWinningPayoutDistributionHash() public view returns (bytes32);
    function getWinningPayoutNumerator(uint256 _outcome) public view returns (uint256);
    function getReputationToken() public view returns (IReputationToken);
    function getFinalizationTime() public view returns (uint256);
    function getInitialReporterAddress() public view returns (address);
    function deriveMarketCreatorFeeAmount(uint256 _amount) public view returns (uint256);
    function isContainerForShareToken(IShareToken _shadyTarget) public view returns (bool);
    function isContainerForReportingParticipant(IReportingParticipant _reportingParticipant) public view returns (bool);
    function isInvalid() public view returns (bool);
    function finalize() public returns (bool);
    function designatedReporterWasCorrect() public view returns (bool);
    function designatedReporterShowed() public view returns (bool);
    function isFinalized() public view returns (bool);
    function finalizeFork() public returns (bool);
    function assertBalances() public view returns (bool);
}

contract IReportingParticipant {
    function getStake() public view returns (uint256);
    function getPayoutDistributionHash() public view returns (bytes32);
    function liquidateLosing() public returns (bool);
    function redeem(address _redeemer) public returns (bool);
    function isInvalid() public view returns (bool);
    function isDisavowed() public view returns (bool);
    function migrate() public returns (bool);
    function getPayoutNumerator(uint256 _outcome) public view returns (uint256);
    function getMarket() public view returns (IMarket);
    function getSize() public view returns (uint256);
}

contract IDisputeCrowdsourcer is IReportingParticipant, ERC20 {
    function initialize(IMarket market, uint256 _size, bytes32 _payoutDistributionHash, uint256[] _payoutNumerators, bool _invalid) public returns (bool);
    function contribute(address _participant, uint256 _amount) public returns (uint256);
}

contract IReputationToken is ITyped, ERC20 {
    function initialize(IUniverse _universe) public returns (bool);
    function migrateOut(IReputationToken _destination, uint256 _attotokens) public returns (bool);
    function migrateIn(address _reporter, uint256 _attotokens) public returns (bool);
    function trustedReportingParticipantTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function trustedMarketTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function trustedFeeWindowTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function trustedUniverseTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function getUniverse() public view returns (IUniverse);
    function getTotalMigrated() public view returns (uint256);
    function getTotalTheoreticalSupply() public view returns (uint256);
    function mintForReportingParticipant(uint256 _amountMigrated) public returns (bool);
}

contract IUniverse is ITyped {
    function initialize(IUniverse _parentUniverse, bytes32 _parentPayoutDistributionHash) external returns (bool);
    function fork() public returns (bool);
    function getParentUniverse() public view returns (IUniverse);
    function createChildUniverse(uint256[] _parentPayoutNumerators, bool _invalid) public returns (IUniverse);
    function getChildUniverse(bytes32 _parentPayoutDistributionHash) public view returns (IUniverse);
    function getReputationToken() public view returns (IReputationToken);
    function getForkingMarket() public view returns (IMarket);
    function getForkEndTime() public view returns (uint256);
    function getForkReputationGoal() public view returns (uint256);
    function getParentPayoutDistributionHash() public view returns (bytes32);
    function getDisputeRoundDurationInSeconds() public view returns (uint256);
    function getOrCreateFeeWindowByTimestamp(uint256 _timestamp) public returns (IFeeWindow);
    function getOrCreateCurrentFeeWindow() public returns (IFeeWindow);
    function getOrCreateNextFeeWindow() public returns (IFeeWindow);
    function getOpenInterestInAttoEth() public view returns (uint256);
    function getRepMarketCapInAttoeth() public view returns (uint256);
    function getTargetRepMarketCapInAttoeth() public view returns (uint256);
    function getOrCacheValidityBond() public returns (uint256);
    function getOrCacheDesignatedReportStake() public returns (uint256);
    function getOrCacheDesignatedReportNoShowBond() public returns (uint256);
    function getOrCacheReportingFeeDivisor() public returns (uint256);
    function getDisputeThresholdForFork() public view returns (uint256);
    function getInitialReportMinValue() public view returns (uint256);
    function calculateFloatingValue(uint256 _badMarkets, uint256 _totalMarkets, uint256 _targetDivisor, uint256 _previousValue, uint256 _defaultValue, uint256 _floor) public pure returns (uint256 _newValue);
    function getOrCacheMarketCreationCost() public returns (uint256);
    function getCurrentFeeWindow() public view returns (IFeeWindow);
    function getOrCreateFeeWindowBefore(IFeeWindow _feeWindow) public returns (IFeeWindow);
    function isParentOf(IUniverse _shadyChild) public view returns (bool);
    function updateTentativeWinningChildUniverse(bytes32 _parentPayoutDistributionHash) public returns (bool);
    function isContainerForFeeWindow(IFeeWindow _shadyTarget) public view returns (bool);
    function isContainerForMarket(IMarket _shadyTarget) public view returns (bool);
    function isContainerForReportingParticipant(IReportingParticipant _reportingParticipant) public view returns (bool);
    function isContainerForShareToken(IShareToken _shadyTarget) public view returns (bool);
    function isContainerForFeeToken(IFeeToken _shadyTarget) public view returns (bool);
    function addMarketTo() public returns (bool);
    function removeMarketFrom() public returns (bool);
    function decrementOpenInterest(uint256 _amount) public returns (bool);
    function decrementOpenInterestFromMarket(uint256 _amount) public returns (bool);
    function incrementOpenInterest(uint256 _amount) public returns (bool);
    function incrementOpenInterestFromMarket(uint256 _amount) public returns (bool);
    function getWinningChildUniverse() public view returns (IUniverse);
    function isForking() public view returns (bool);
}

contract ICash is ERC20 {
    function depositEther() external payable returns(bool);
    function depositEtherFor(address _to) external payable returns(bool);
    function withdrawEther(uint256 _amount) external returns(bool);
    function withdrawEtherTo(address _to, uint256 _amount) external returns(bool);
    function withdrawEtherToIfPossible(address _to, uint256 _amount) external returns (bool);
}

contract ICreateOrder {
    function publicCreateOrder(Order.Types, uint256, uint256, IMarket, uint256, bytes32, bytes32, bytes32) external payable returns (bytes32);
    function createOrder(address, Order.Types, uint256, uint256, IMarket, uint256, bytes32, bytes32, bytes32) external returns (bytes32);
}

contract IFillOrder {
    function publicFillOrder(bytes32 _orderId, uint256 _amountFillerWants, bytes32 _tradeGroupId) external payable returns (uint256);
    function fillOrder(address _filler, bytes32 _orderId, uint256 _amountFillerWants, bytes32 tradeGroupId) external returns (uint256);
}

contract IOrders {
    function saveOrder(Order.Types _type, IMarket _market, uint256 _fxpAmount, uint256 _price, address _sender, uint256 _outcome, uint256 _moneyEscrowed, uint256 _sharesEscrowed, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId) public returns (bytes32 _orderId);
    function removeOrder(bytes32 _orderId) public returns (bool);
    function getMarket(bytes32 _orderId) public view returns (IMarket);
    function getOrderType(bytes32 _orderId) public view returns (Order.Types);
    function getOutcome(bytes32 _orderId) public view returns (uint256);
    function getAmount(bytes32 _orderId) public view returns (uint256);
    function getPrice(bytes32 _orderId) public view returns (uint256);
    function getOrderCreator(bytes32 _orderId) public view returns (address);
    function getOrderSharesEscrowed(bytes32 _orderId) public view returns (uint256);
    function getOrderMoneyEscrowed(bytes32 _orderId) public view returns (uint256);
    function getBetterOrderId(bytes32 _orderId) public view returns (bytes32);
    function getWorseOrderId(bytes32 _orderId) public view returns (bytes32);
    function getBestOrderId(Order.Types _type, IMarket _market, uint256 _outcome) public view returns (bytes32);
    function getWorstOrderId(Order.Types _type, IMarket _market, uint256 _outcome) public view returns (bytes32);
    function getLastOutcomePrice(IMarket _market, uint256 _outcome) public view returns (uint256);
    function getOrderId(Order.Types _type, IMarket _market, uint256 _fxpAmount, uint256 _price, address _sender, uint256 _blockNumber, uint256 _outcome, uint256 _moneyEscrowed, uint256 _sharesEscrowed) public pure returns (bytes32);
    function getTotalEscrowed(IMarket _market) public view returns (uint256);
    function isBetterPrice(Order.Types _type, uint256 _price, bytes32 _orderId) public view returns (bool);
    function isWorsePrice(Order.Types _type, uint256 _price, bytes32 _orderId) public view returns (bool);
    function assertIsNotBetterPrice(Order.Types _type, uint256 _price, bytes32 _betterOrderId) public view returns (bool);
    function assertIsNotWorsePrice(Order.Types _type, uint256 _price, bytes32 _worseOrderId) public returns (bool);
    function recordFillOrder(bytes32 _orderId, uint256 _sharesFilled, uint256 _tokensFilled) public returns (bool);
    function setPrice(IMarket _market, uint256 _outcome, uint256 _price) external returns (bool);
    function incrementTotalEscrowed(IMarket _market, uint256 _amount) external returns (bool);
    function decrementTotalEscrowed(IMarket _market, uint256 _amount) external returns (bool);
}

contract IShareToken is ITyped, ERC20 {
    function initialize(IMarket _market, uint256 _outcome) external returns (bool);
    function createShares(address _owner, uint256 _amount) external returns (bool);
    function destroyShares(address, uint256 balance) external returns (bool);
    function getMarket() external view returns (IMarket);
    function getOutcome() external view returns (uint256);
    function trustedOrderTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function trustedFillOrderTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function trustedCancelOrderTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
}

library Order {
    using SafeMathUint256 for uint256;

    enum Types {
        Bid, Ask
    }

    enum TradeDirections {
        Long, Short
    }

    struct Data {
        // Contracts
        IOrders orders;
        IMarket market;
        IAugur augur;

        // Order
        bytes32 id;
        address creator;
        uint256 outcome;
        Order.Types orderType;
        uint256 amount;
        uint256 price;
        uint256 sharesEscrowed;
        uint256 moneyEscrowed;
        bytes32 betterOrderId;
        bytes32 worseOrderId;
    }

    //
    // Constructor
    //

    // No validation is needed here as it is simply a librarty function for organizing data
    function create(IController _controller, address _creator, uint256 _outcome, Order.Types _type, uint256 _attoshares, uint256 _price, IMarket _market, bytes32 _betterOrderId, bytes32 _worseOrderId) internal view returns (Data) {
        require(_outcome < _market.getNumberOfOutcomes());
        require(_price < _market.getNumTicks());

        IOrders _orders = IOrders(_controller.lookup("Orders"));
        IAugur _augur = _controller.getAugur();

        return Data({
            orders: _orders,
            market: _market,
            augur: _augur,
            id: 0,
            creator: _creator,
            outcome: _outcome,
            orderType: _type,
            amount: _attoshares,
            price: _price,
            sharesEscrowed: 0,
            moneyEscrowed: 0,
            betterOrderId: _betterOrderId,
            worseOrderId: _worseOrderId
        });
    }

    //
    // "public" functions
    //

    function getOrderId(Order.Data _orderData) internal view returns (bytes32) {
        if (_orderData.id == bytes32(0)) {
            bytes32 _orderId = _orderData.orders.getOrderId(_orderData.orderType, _orderData.market, _orderData.amount, _orderData.price, _orderData.creator, block.number, _orderData.outcome, _orderData.moneyEscrowed, _orderData.sharesEscrowed);
            require(_orderData.orders.getAmount(_orderId) == 0);
            _orderData.id = _orderId;
        }
        return _orderData.id;
    }

    function getOrderTradingTypeFromMakerDirection(Order.TradeDirections _creatorDirection) internal pure returns (Order.Types) {
        return (_creatorDirection == Order.TradeDirections.Long) ? Order.Types.Bid : Order.Types.Ask;
    }

    function getOrderTradingTypeFromFillerDirection(Order.TradeDirections _fillerDirection) internal pure returns (Order.Types) {
        return (_fillerDirection == Order.TradeDirections.Long) ? Order.Types.Ask : Order.Types.Bid;
    }

    function escrowFunds(Order.Data _orderData) internal returns (bool) {
        if (_orderData.orderType == Order.Types.Ask) {
            return escrowFundsForAsk(_orderData);
        } else if (_orderData.orderType == Order.Types.Bid) {
            return escrowFundsForBid(_orderData);
        }
    }

    function saveOrder(Order.Data _orderData, bytes32 _tradeGroupId) internal returns (bytes32) {
        return _orderData.orders.saveOrder(_orderData.orderType, _orderData.market, _orderData.amount, _orderData.price, _orderData.creator, _orderData.outcome, _orderData.moneyEscrowed, _orderData.sharesEscrowed, _orderData.betterOrderId, _orderData.worseOrderId, _tradeGroupId);
    }

    //
    // Private functions
    //

    function escrowFundsForBid(Order.Data _orderData) private returns (bool) {
        require(_orderData.moneyEscrowed == 0);
        require(_orderData.sharesEscrowed == 0);
        uint256 _attosharesToCover = _orderData.amount;
        uint256 _numberOfOutcomes = _orderData.market.getNumberOfOutcomes();

        // Figure out how many almost-complete-sets (just missing `outcome` share) the creator has
        uint256 _attosharesHeld = 2**254;
        for (uint256 _i = 0; _i < _numberOfOutcomes; _i++) {
            if (_i != _orderData.outcome) {
                uint256 _creatorShareTokenBalance = _orderData.market.getShareToken(_i).balanceOf(_orderData.creator);
                _attosharesHeld = SafeMathUint256.min(_creatorShareTokenBalance, _attosharesHeld);
            }
        }

        // Take shares into escrow if they have any almost-complete-sets
        if (_attosharesHeld > 0) {
            _orderData.sharesEscrowed = SafeMathUint256.min(_attosharesHeld, _attosharesToCover);
            _attosharesToCover -= _orderData.sharesEscrowed;
            for (_i = 0; _i < _numberOfOutcomes; _i++) {
                if (_i != _orderData.outcome) {
                    _orderData.market.getShareToken(_i).trustedOrderTransfer(_orderData.creator, _orderData.market, _orderData.sharesEscrowed);
                }
            }
        }
        // If not able to cover entire order with shares alone, then cover remaining with tokens
        if (_attosharesToCover > 0) {
            _orderData.moneyEscrowed = _attosharesToCover.mul(_orderData.price);
            require(_orderData.augur.trustedTransfer(_orderData.market.getDenominationToken(), _orderData.creator, _orderData.market, _orderData.moneyEscrowed));
        }

        return true;
    }

    function escrowFundsForAsk(Order.Data _orderData) private returns (bool) {
        require(_orderData.moneyEscrowed == 0);
        require(_orderData.sharesEscrowed == 0);
        IShareToken _shareToken = _orderData.market.getShareToken(_orderData.outcome);
        uint256 _attosharesToCover = _orderData.amount;

        // Figure out how many shares of the outcome the creator has
        uint256 _attosharesHeld = _shareToken.balanceOf(_orderData.creator);

        // Take shares in escrow if user has shares
        if (_attosharesHeld > 0) {
            _orderData.sharesEscrowed = SafeMathUint256.min(_attosharesHeld, _attosharesToCover);
            _attosharesToCover -= _orderData.sharesEscrowed;
            _shareToken.trustedOrderTransfer(_orderData.creator, _orderData.market, _orderData.sharesEscrowed);
        }

        // If not able to cover entire order with shares alone, then cover remaining with tokens
        if (_attosharesToCover > 0) {
            _orderData.moneyEscrowed = _orderData.market.getNumTicks().sub(_orderData.price).mul(_attosharesToCover);
            require(_orderData.augur.trustedTransfer(_orderData.market.getDenominationToken(), _orderData.creator, _orderData.market, _orderData.moneyEscrowed));
        }

        return true;
    }
}

contract Trade is CashAutoConverter, ReentrancyGuard, MarketValidator {
    uint256 internal constant FILL_ORDER_MINIMUM_GAS_NEEDED = 2000000;
    uint256 internal constant CREATE_ORDER_MINIMUM_GAS_NEEDED = 700000;

    function publicBuy(IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) {
        bytes32 _result = trade(msg.sender, Order.TradeDirections.Long, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId);
        _market.assertBalances();
        return _result;
    }

    function publicSell(IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) {
        bytes32 _result = trade(msg.sender, Order.TradeDirections.Short, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId);
        _market.assertBalances();
        return _result;
    }

    function publicTrade(Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) {
        bytes32 _result = trade(msg.sender, _direction, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId);
        _market.assertBalances();
        return _result;
    }

    function publicFillBestOrder(Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _tradeGroupId) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (uint256) {
        uint256 _result = fillBestOrder(msg.sender, _direction, _market, _outcome, _fxpAmount, _price, _tradeGroupId);
        _market.assertBalances();
        return _result;
    }

    function trade(address _sender, Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId) internal returns (bytes32) {
        uint256 _bestFxpAmount = fillBestOrder(_sender, _direction, _market, _outcome, _fxpAmount, _price, _tradeGroupId);
        if (_bestFxpAmount == 0) {
            return bytes32(1);
        }
        if (msg.gas < getCreateOrderMinGasNeeded()) {
            return bytes32(1);
        }
        Order.Types _type = Order.getOrderTradingTypeFromMakerDirection(_direction);
        return ICreateOrder(controller.lookup("CreateOrder")).createOrder(_sender, _type, _bestFxpAmount, _price, _market, _outcome, _betterOrderId, _worseOrderId, _tradeGroupId);
    }

    function fillBestOrder(address _sender, Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _tradeGroupId) internal nonReentrant returns (uint256 _bestFxpAmount) {
        // we need to fill a BID if we want to SELL and we need to fill an ASK if we want to BUY
        Order.Types _type = Order.getOrderTradingTypeFromFillerDirection(_direction);
        IOrders _orders = IOrders(controller.lookup("Orders"));
        bytes32 _orderId = _orders.getBestOrderId(_type, _market, _outcome);
        _bestFxpAmount = _fxpAmount;

        while (_orderId != 0 && _bestFxpAmount > 0 && msg.gas >= getFillOrderMinGasNeeded()) {
            uint256 _orderPrice = _orders.getPrice(_orderId);
            // If the price is acceptable relative to the trade type
            if (_type == Order.Types.Bid ? _orderPrice >= _price : _orderPrice <= _price) {
                bytes32 _nextOrderId = _orders.getWorseOrderId(_orderId);
                _orders.setPrice(_market, _outcome, _orderPrice);
                _bestFxpAmount = IFillOrder(controller.lookup("FillOrder")).fillOrder(_sender, _orderId, _bestFxpAmount, _tradeGroupId);
                _orderId = _nextOrderId;
            } else {
                _orderId = bytes32(0);
            }
        }
        if (_orderId != 0) {
            return 0;
        }
        return _bestFxpAmount;
    }

    function publicBuyWithLimit(IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId, uint256 _loopLimit) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) {
        bytes32 _result = tradeWithLimit(msg.sender, Order.TradeDirections.Long, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId, _loopLimit);
        _market.assertBalances();
        return _result;
    }

    function publicSellWithLimit(IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId, uint256 _loopLimit) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) {
        bytes32 _result = tradeWithLimit(msg.sender, Order.TradeDirections.Short, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId, _loopLimit);
        _market.assertBalances();
        return _result;
    }

    function publicTradeWithLimit(Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId, uint256 _loopLimit) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) {
        bytes32 _result = tradeWithLimit(msg.sender, _direction, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId, _loopLimit);
        _market.assertBalances();
        return _result;
    }

    function publicFillBestOrderWithLimit(Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _tradeGroupId, uint256 _loopLimit) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (uint256) {
        uint256 _result = fillBestOrderWithLimit(msg.sender, _direction, _market, _outcome, _fxpAmount, _price, _tradeGroupId, _loopLimit);
        _market.assertBalances();
        return _result;
    }

    function tradeWithLimit(address _sender, Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId, uint256 _loopLimit) internal returns (bytes32) {
        uint256 _bestFxpAmount = fillBestOrderWithLimit(_sender, _direction, _market, _outcome, _fxpAmount, _price, _tradeGroupId, _loopLimit);
        if (_bestFxpAmount == 0) {
            return bytes32(1);
        }
        return ICreateOrder(controller.lookup("CreateOrder")).createOrder(_sender, Order.getOrderTradingTypeFromMakerDirection(_direction), _bestFxpAmount, _price, _market, _outcome, _betterOrderId, _worseOrderId, _tradeGroupId);
    }

    function fillBestOrderWithLimit(address _sender, Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _tradeGroupId, uint256 _loopLimit) internal nonReentrant returns (uint256 _bestFxpAmount) {
        // we need to fill a BID if we want to SELL and we need to fill an ASK if we want to BUY
        Order.Types _type = Order.getOrderTradingTypeFromFillerDirection(_direction);
        IOrders _orders = IOrders(controller.lookup("Orders"));
        bytes32 _orderId = _orders.getBestOrderId(_type, _market, _outcome);
        _bestFxpAmount = _fxpAmount;
        while (_orderId != 0 && _bestFxpAmount > 0 && _loopLimit > 0) {
            uint256 _orderPrice = _orders.getPrice(_orderId);
            // If the price is acceptable relative to the trade type
            if (_type == Order.Types.Bid ? _orderPrice >= _price : _orderPrice <= _price) {
                bytes32 _nextOrderId = _orders.getWorseOrderId(_orderId);
                _orders.setPrice(_market, _outcome, _orderPrice);
                _bestFxpAmount = IFillOrder(controller.lookup("FillOrder")).fillOrder(_sender, _orderId, _bestFxpAmount, _tradeGroupId);
                _orderId = _nextOrderId;
            } else {
                _orderId = bytes32(0);
            }
            _loopLimit -= 1;
        }
        if (_orderId != 0) {
            return 0;
        }
        return _bestFxpAmount;
    }

    // COVERAGE: This is not covered and cannot be. We need to use a different minimum gas while running coverage since the additional logging make the cost rise a great deal
    function getFillOrderMinGasNeeded() internal pure returns (uint256) {
        return FILL_ORDER_MINIMUM_GAS_NEEDED;
    }

    function getCreateOrderMinGasNeeded() internal pure returns (uint256) {
        return CREATE_ORDER_MINIMUM_GAS_NEEDED;
    }
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"},{"name":"_loopLimit","type":"uint256"}],"name":"publicSellWithLimit","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_direction","type":"uint8"},{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"}],"name":"publicTrade","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getController","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_direction","type":"uint8"},{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"},{"name":"_loopLimit","type":"uint256"}],"name":"publicTradeWithLimit","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setController","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_direction","type":"uint8"},{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_tradeGroupId","type":"bytes32"},{"name":"_loopLimit","type":"uint256"}],"name":"publicFillBestOrderWithLimit","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"}],"name":"publicSell","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_direction","type":"uint8"},{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_tradeGroupId","type":"bytes32"}],"name":"publicFillBestOrder","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"},{"name":"_loopLimit","type":"uint256"}],"name":"publicBuyWithLimit","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"}],"name":"publicBuy","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"}]

  Contract Creation Code Switch To Opcodes View
606060405260008054600160a060020a033316600160a860020a0319909116179055612854806100306000396000f30060606040526004361061008a5763ffffffff60e060020a6000350416630a9a877b811461008f57806315c64b61146100ca5780633018205f146100f6578063554de08c1461012557806392eefe9b14610155578063a127d74e14610188578063b1b12ef6146101b1578063ef01e5a3146101d7578063f0697887146101fd578063f2beaf5914610226575b600080fd5b6100b8600160a060020a036004351660243560443560643560843560a43560c43560e43561024c565b60405190815260200160405180910390f35b6100b860ff60043516600160a060020a036024351660443560643560843560a43560c43560e43561051e565b341561010157600080fd5b6101096107b7565b604051600160a060020a03909116815260200160405180910390f35b6100b860ff60043516600160a060020a036024351660443560643560843560a43560c43560e435610104356107c6565b341561016057600080fd5b610174600160a060020a0360043516610a98565b604051901515815260200160405180910390f35b6100b860ff60043516600160a060020a036024351660443560643560843560a43560c435610ae6565b6100b8600160a060020a036004351660243560443560643560843560a43560c435610db4565b6100b860ff60043516600160a060020a036024351660443560643560843560a43561104e565b6100b8600160a060020a036004351660243560443560643560843560a43560c43560e43561131a565b6100b8600160a060020a036004351660243560443560643560843560a43560c43561156d565b60008089600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561029857600080fd5b6102c65a03f115156102a957600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561030057600080fd5b6102c65a03f1151561031157600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561037157600080fd5b6102c65a03f1151561038257600080fd5b50505060405180519050151561039757600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156103ee57600080fd5b6102c65a03f115156103ff57600080fd5b50505060405180519050151561041457600080fd5b61041c6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561046657600080fd5b6102c65a03f1151561047757600080fd5b50505060405180519050151561048c57600080fd5b61049f3360018e8e8e8e8e8e8e8e6118cc565b92508b600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104e757600080fd5b6102c65a03f115156104f857600080fd5b505050604051805190505082935061050e611a69565b5050505098975050505050505050565b60008088600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561056a57600080fd5b6102c65a03f1151561057b57600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156105d257600080fd5b6102c65a03f115156105e357600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561064357600080fd5b6102c65a03f1151561065457600080fd5b50505060405180519050151561066957600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156106c057600080fd5b6102c65a03f115156106d157600080fd5b5050506040518051905015156106e657600080fd5b6106ee6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561073857600080fd5b6102c65a03f1151561074957600080fd5b50505060405180519050151561075e57600080fd5b61076f338d8d8d8d8d8d8d8d611ce9565b92508a600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104e757600080fd5b600054600160a060020a031690565b60008089600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561081257600080fd5b6102c65a03f1151561082357600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561087a57600080fd5b6102c65a03f1151561088b57600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156108eb57600080fd5b6102c65a03f115156108fc57600080fd5b50505060405180519050151561091157600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561096857600080fd5b6102c65a03f1151561097957600080fd5b50505060405180519050151561098e57600080fd5b6109966117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156109e057600080fd5b6102c65a03f115156109f157600080fd5b505050604051805190501515610a0657600080fd5b610a18338e8e8e8e8e8e8e8e8e6118cc565b92508b600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610a6057600080fd5b6102c65a03f11515610a7157600080fd5b5050506040518051905050829350610a87611a69565b505050509998505050505050505050565b6000805433600160a060020a03908116911614610ab457600080fd5b5060008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556001919050565b60008087600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b3257600080fd5b6102c65a03f11515610b4357600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b9a57600080fd5b6102c65a03f11515610bab57600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610c0b57600080fd5b6102c65a03f11515610c1c57600080fd5b505050604051805190501515610c3157600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610c8857600080fd5b6102c65a03f11515610c9957600080fd5b505050604051805190501515610cae57600080fd5b610cb66117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d0057600080fd5b6102c65a03f11515610d1157600080fd5b505050604051805190501515610d2657600080fd5b610d36338c8c8c8c8c8c8c611ea5565b925089600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d7e57600080fd5b6102c65a03f11515610d8f57600080fd5b5050506040518051905050829350610da5611a69565b50505050979650505050505050565b60008088600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610e0057600080fd5b6102c65a03f11515610e1157600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610e6857600080fd5b6102c65a03f11515610e7957600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ed957600080fd5b6102c65a03f11515610eea57600080fd5b505050604051805190501515610eff57600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610f5657600080fd5b6102c65a03f11515610f6757600080fd5b505050604051805190501515610f7c57600080fd5b610f846117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610fce57600080fd5b6102c65a03f11515610fdf57600080fd5b505050604051805190501515610ff457600080fd5b6110063360018d8d8d8d8d8d8d611ce9565b92508a600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d7e57600080fd5b60008086600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561109a57600080fd5b6102c65a03f115156110ab57600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561110257600080fd5b6102c65a03f1151561111357600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561117357600080fd5b6102c65a03f1151561118457600080fd5b50505060405180519050151561119957600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111f057600080fd5b6102c65a03f1151561120157600080fd5b50505060405180519050151561121657600080fd5b61121e6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561126857600080fd5b6102c65a03f1151561127957600080fd5b50505060405180519050151561128e57600080fd5b61129d338b8b8b8b8b8b61233c565b925088600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156112e557600080fd5b6102c65a03f115156112f657600080fd5b505050604051805190505082935061130c611a69565b505050509695505050505050565b60008089600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561136657600080fd5b6102c65a03f1151561137757600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156113ce57600080fd5b6102c65a03f115156113df57600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561143f57600080fd5b6102c65a03f1151561145057600080fd5b50505060405180519050151561146557600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156114bc57600080fd5b6102c65a03f115156114cd57600080fd5b5050506040518051905015156114e257600080fd5b6114ea6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561153457600080fd5b6102c65a03f1151561154557600080fd5b50505060405180519050151561155a57600080fd5b61049f3360008e8e8e8e8e8e8e8e6118cc565b60008088600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156115b957600080fd5b6102c65a03f115156115ca57600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561162157600080fd5b6102c65a03f1151561163257600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561169257600080fd5b6102c65a03f115156116a357600080fd5b5050506040518051905015156116b857600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561170f57600080fd5b6102c65a03f1151561172057600080fd5b50505060405180519050151561173557600080fd5b61173d6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561178757600080fd5b6102c65a03f1151561179857600080fd5b5050506040518051905015156117ad57600080fd5b6110063360008d8d8d8d8d8d8d611ce9565b6000803411156118c65760008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f43617368000000000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561183857600080fd5b6102c65a03f1151561184957600080fd5b50505060405180519050600160a060020a0316634faa8a26343360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156118a957600080fd5b6125ee5a03f115156118ba57600080fd5b50505050604051805150505b50600190565b6000806118df8c8c8c8c8c8c8a8a611ea5565b90508015156118f15760019150611a5a565b60008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4372656174654f726465720000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561196057600080fd5b6102c65a03f1151561197157600080fd5b50505060405180519050600160a060020a031663f79383288d6119938e6127d3565b848b8f8f8d8d8d6000604051602001526040518a63ffffffff1660e060020a028152600401808a600160a060020a0316600160a060020a031681526020018960018111156119dd57fe5b60ff168152602080820199909952604080820198909852600160a060020a03909616606087015250608085019390935260a084019190915260c083015260e08201526101000193509091505180830381600087803b1515611a3d57600080fd5b6102c65a03f11515611a4e57600080fd5b50505060405180519250505b509a9950505050505050505050565b60008054819081908190600160a060020a031663f39ec1f7826040516020015260405160e060020a63ffffffff83160281527f43617368000000000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b1515611add57600080fd5b6102c65a03f11515611aee57600080fd5b5050506040518051935050600160a060020a0383166370a082313360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611b5057600080fd5b6102c65a03f11515611b6157600080fd5b50505060405180519250506000821115611cdf5760008054600160a060020a031690634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611bbe57600080fd5b6102c65a03f11515611bcf57600080fd5b5050506040518051915050600160a060020a03811663ec2389948433308660006040516020015260405160e060020a63ffffffff8716028152600160a060020a0394851660048201529284166024840152921660448201526064810191909152608401602060405180830381600087803b1515611c4b57600080fd5b6102c65a03f11515611c5c57600080fd5b50505060405180515050600160a060020a038316631baffe38338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611cc357600080fd5b6102c65a03f11515611cd457600080fd5b505050604051805150505b6001935050505090565b6000806000611cfd8c8c8c8c8c8c8a61233c565b9150811515611d0f5760019250611e96565b611d176127f7565b5a1015611d275760019250611e96565b611d308b6127d3565b60008054919250600160a060020a039091169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4372656174654f726465720000000000000000000000000000000000000000006004820152602401602060405180830381600087803b1515611da457600080fd5b6102c65a03f11515611db557600080fd5b50505060405180519050600160a060020a031663f79383288d83858b8f8f8d8d8d6000604051602001526040518a63ffffffff1660e060020a028152600401808a600160a060020a0316600160a060020a03168152602001896001811115611e1957fe5b60ff168152602080820199909952604080820198909852600160a060020a03909616606087015250608085019390935260a084019190915260c083015260e08201526101000193509091505180830381600087803b1515611e7957600080fd5b6102c65a03f11515611e8a57600080fd5b50505060405180519350505b50509998505050505050505050565b600080600080600080600060149054906101000a900460ff16151515611eca57600080fd5b6000805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055611f088d6127fe565b60008054919650600160a060020a039091169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4f726465727300000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b1515611f7c57600080fd5b6102c65a03f11515611f8d57600080fd5b5050506040518051945050600160a060020a038416637b6eaa65868e8e6000604051602001526040518463ffffffff1660e060020a02815260040180846001811115611fd557fe5b60ff16815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050602060405180830381600087803b151561201957600080fd5b6102c65a03f1151561202a57600080fd5b50505060405180518b97509350505b82158015906120485750600086115b80156120545750600087115b156123015783600160a060020a03166331d98b3f8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156120a857600080fd5b6102c65a03f115156120b957600080fd5b50505060405180519250600090508560018111156120d357fe5b146120e157888211156120e6565b888210155b156122f15783600160a060020a0316638925f9e98460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561213a57600080fd5b6102c65a03f1151561214b57600080fd5b5050506040518051915050600160a060020a038416633011e16a8d8d8560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156121bc57600080fd5b6102c65a03f115156121cd57600080fd5b5050506040518051505060008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f46696c6c4f7264657200000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561224657600080fd5b6102c65a03f1151561225757600080fd5b50505060405180519050600160a060020a0316631faf89958f85898c60006040516020015260405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401602060405180830381600087803b15156122cc57600080fd5b6102c65a03f115156122dd57600080fd5b5050506040518051905095508092506122f6565b600092505b600187039650612039565b821561230c57600095505b50506000805474ff00000000000000000000000000000000000000001916905550919a9950505050505050505050565b600080600080600080600060149054906101000a900460ff1615151561236157600080fd5b6000805474ff000000000000000000000000000000000000000019167401000000000000000000000000000000000000000017905561239f8c6127fe565b60008054919650600160a060020a039091169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4f726465727300000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561241357600080fd5b6102c65a03f1151561242457600080fd5b5050506040518051945050600160a060020a038416637b6eaa65868d8d6000604051602001526040518463ffffffff1660e060020a0281526004018084600181111561246c57fe5b60ff16815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050602060405180830381600087803b15156124b057600080fd5b6102c65a03f115156124c157600080fd5b50505060405180518a97509350505b82158015906124df5750600086115b80156124f257506124ee612821565b5a10155b156127995783600160a060020a03166331d98b3f8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561254657600080fd5b6102c65a03f1151561255757600080fd5b505050604051805192506000905085600181111561257157fe5b1461257f5787821115612584565b878210155b1561278f5783600160a060020a0316638925f9e98460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156125d857600080fd5b6102c65a03f115156125e957600080fd5b5050506040518051915050600160a060020a038416633011e16a8c8c8560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561265a57600080fd5b6102c65a03f1151561266b57600080fd5b5050506040518051505060008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f46696c6c4f7264657200000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b15156126e457600080fd5b6102c65a03f115156126f557600080fd5b50505060405180519050600160a060020a0316631faf89958e85898b60006040516020015260405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401602060405180830381600087803b151561276a57600080fd5b6102c65a03f1151561277b57600080fd5b505050604051805190509550809250612794565b600092505b6124d0565b82156127a457600095505b50506000805474ff00000000000000000000000000000000000000001916905550919998505050505050505050565b6000808260018111156127e257fe5b146127ee5760016127f1565b60005b92915050565b620aae6090565b60008082600181111561280d57fe5b146128195760006127f1565b506001919050565b621e8480905600a165627a7a723058200500e1a87e08b214e06bb4855347ffacaa09452fc18bdcb06206029873f1aecf0029

   Swarm Source:
bzzr://0500e1a87e08b214e06bb4855347ffacaa09452fc18bdcb06206029873f1aecf

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.