Contract 0x2fcA5F257895B8bcEDe0C0D06141B718Ec9a3041

 

TxHash Block Age From To Value [TxFee]
0x22f90664a1787f2daacdf0a9cb88fa03b2565b3d9b8566366a3797b12ec15cd6721475910 days 19 hrs ago0xf629a2005c22ce0f871338e5f3830c476ed46118 IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.00029879
0x29ac8cd2f5cd9dd845939a1c91b63612c1f0e0126a56e85060f5c7892868284f721474010 days 19 hrs ago0xf629a2005c22ce0f871338e5f3830c476ed46118 IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.00096563
0x74a3442a9082bbe4ab809c161aaf8847e5c65c0fe4ebbb332cc6bc790da7a715721473810 days 19 hrs ago0xf629a2005c22ce0f871338e5f3830c476ed46118 IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.00111563
0x68664b7cdb9dd8a1148e89c528d65a9ce80f7f4925d46b7042b92987104ddf1b699760752 days 17 hrs ago0x766fa18dfdeba0979acd9c20dc5e433d2e5860a3 IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.0000657338
0xa0113c9da0d87dd9a5a58baf4f9149418b2b4f09b610d211b05cdc12ebbf6aad692241665 days 10 hrs ago0xf629a2005c22ce0f871338e5f3830c476ed46118 IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.00055479
0x13427c1a104576b455883b9379ea342eecd814fcdd967359f6846f05fc282f12691394866 days 21 hrs ago0x2e4179b9d5dd3f51870f2cbca62cc6cc61c9808a IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.000483035
0xf098accb7147d559527537065638c435d65a68e0c890585c1978a20bafaeacc6690856467 days 19 hrs ago0x2e4179b9d5dd3f51870f2cbca62cc6cc61c9808a IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.000483035
0x788fa4f6531c0854eadd1476337c17130d6345f20b538b88412cf8a1a12ecca3690854667 days 19 hrs ago0x828fad5895080f60568f2cb1cca9661563b0b4df IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.001256723
0xf50a079d46d6fbbda4b92e3db453df5c8dc1b79f0ad9b4154d29a59176ece086690836567 days 19 hrs ago0xff28c44ecd0bb71415914c00e3c2e40d0ea894d4 IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.000476016
0x0bc0139c48be52cc2304dce8be6864863bbc133fef8adf2ebb222cd72aabe217688564471 days 14 hrs ago0xf629a2005c22ce0f871338e5f3830c476ed46118 IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.00228846
0x7c644d5fb758b4a11a2c717178e480b3c1d45c4dc2856ebf874ddbd46c28258a688409471 days 21 hrs ago0x2e4179b9d5dd3f51870f2cbca62cc6cc61c9808a IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.000482715
0xdbcbb6ec5b992947183586350c70120f8ea4ba45293d0ceacd10ce1cb3461297688406871 days 21 hrs ago0x2e4179b9d5dd3f51870f2cbca62cc6cc61c9808a IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.000483035
0xb66abb8b9e64da8424cd10afe562709a9d30f47d82dbb81b2a6dd414d7a29c49688405671 days 21 hrs ago0x2e4179b9d5dd3f51870f2cbca62cc6cc61c9808a IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410.199483232 Ether0.000517258
0x5c2d4ede2296bb001f04e668ea460a8bc85c76b8967ec80fa98c5e1131db93ce687191673 days 21 hrs ago0x2e4179b9d5dd3f51870f2cbca62cc6cc61c9808a IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.0018150084
0x62a144f444ceae9956bd3931f3bc82a1248aa9a000b385b18f8f3a465053af04686697474 days 16 hrs ago0xbb2769c15b2ee872bebf114daa25bf5f401a6ac4 IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.0001643345
0xb3ab3de213fbef8350a885df3a413b1405a8985a84f7bd41ff861e70da9ecc86684130778 days 22 hrs ago0x2e4179b9d5dd3f51870f2cbca62cc6cc61c9808a IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.00122088
0x6ccd73565fcb09257ffe0cfbbc9c7f4439550e954ea8d611d318a75744a7728b683741379 days 13 hrs ago0x95163d3d19fc871e6efa01a14c0dd20708e72431 IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.0004646508
0xade2062f71a42e8bde92ad1529cdde3366860d4f69ba68b6e35744851bfe9bdb682368381 days 20 hrs ago0xad271a0aa5380f37653c8fb9385ea1671509409d IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.000341628
0xa3566d5858bb0d7529deece7fbc58a953e0dd272b96d5bff4adbc9f87ac04833682362981 days 20 hrs ago0xad271a0aa5380f37653c8fb9385ea1671509409d IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.0003757908
0xab4a6672369148dbfb687c04918310c2e3a1c958b8430bd8397add3d271620d0682360281 days 20 hrs ago0xad271a0aa5380f37653c8fb9385ea1671509409d IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.000398118
0x7f8283d6547a7e1788d0d525f80d56caaf1bc06ac9acceba02e5cc67671e8647682355981 days 21 hrs ago0xad271a0aa5380f37653c8fb9385ea1671509409d IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.000370097
0x40bcd3cb14ad2cbb3b3ecacb0cd625e6c73e2f97775fd85a37534870fc1615e4682353381 days 21 hrs ago0xad271a0aa5380f37653c8fb9385ea1671509409d IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.000370097
0x1195e9a179f5fa3632d95d197465d61b94a240e855db1e171f83f0bb5bceda2a680610184 days 18 hrs ago0x788153229d8580a59ce476a22d6132f1f44ed54b IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.000119516
0x14cec20b48a3460f716c8e5798c4be2fcf799c41a32b471825cbbb0310f12115679426786 days 17 hrs ago0xbb2769c15b2ee872bebf114daa25bf5f401a6ac4 IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.0016252529
0x5475922ba3046f43bef3b2cc5b25bac78db7ebd7219b69cfa20c03bfe3816271679424086 days 17 hrs ago0xbb2769c15b2ee872bebf114daa25bf5f401a6ac4 IN  0x2fca5f257895b8bcede0c0d06141b718ec9a30410 Ether0.0022222529
[ Download CSV Export 

Latest 16 Internal Transactions Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x22f90664a1787f2daacdf0a9cb88fa03b2565b3d9b8566366a3797b12ec15cd6721475910 days 19 hrs ago0x2fca5f257895b8bcede0c0d06141b718ec9a30410xf629a2005c22ce0f871338e5f3830c476ed461180.084296216233317057 Ether
0x68664b7cdb9dd8a1148e89c528d65a9ce80f7f4925d46b7042b92987104ddf1b699760752 days 17 hrs ago0x2fca5f257895b8bcede0c0d06141b718ec9a30410x766fa18dfdeba0979acd9c20dc5e433d2e5860a30.43005574095280778 Ether
0xf50a079d46d6fbbda4b92e3db453df5c8dc1b79f0ad9b4154d29a59176ece086690836567 days 19 hrs ago0x2fca5f257895b8bcede0c0d06141b718ec9a30410xff28c44ecd0bb71415914c00e3c2e40d0ea894d40.100852352 Ether
0x62a144f444ceae9956bd3931f3bc82a1248aa9a000b385b18f8f3a465053af04686697474 days 16 hrs ago0x2fca5f257895b8bcede0c0d06141b718ec9a30410xbb2769c15b2ee872bebf114daa25bf5f401a6ac40.27033859154422512 Ether
0x1195e9a179f5fa3632d95d197465d61b94a240e855db1e171f83f0bb5bceda2a680610184 days 18 hrs ago0x2fca5f257895b8bcede0c0d06141b718ec9a30410x788153229d8580a59ce476a22d6132f1f44ed54b0.0764938072400705 Ether
0x573e064a00e6116f15ad3da238d94974caf3fd9c8451aa50ad1277d842cff9bb6611383116 days 17 hrs ago0x2fca5f257895b8bcede0c0d06141b718ec9a30410xad271a0aa5380f37653c8fb9385ea1671509409d0.35 Ether
0x0fb788a03eaf31a1a42082b4d26fc8c54b60f63fe4de720d809000aba781473f6557079125 days 14 hrs ago0x2fca5f257895b8bcede0c0d06141b718ec9a30410xbb2769c15b2ee872bebf114daa25bf5f401a6ac40.0022 Ether
0x0c06187d1ce43a0bafc584529605b1aeeb60bc749346fbd618c7b454c4d264a06530985129 days 20 hrs ago0x2fca5f257895b8bcede0c0d06141b718ec9a30410xbb9a718d42e68ac1019fc557f35eb0bacd6793fc0.0758375872 Ether
0x3240c2b792c765340184fdba8d584c8f01199bd72b4e23f4d3506efdffe784dc6525416130 days 18 hrs ago0x2fca5f257895b8bcede0c0d06141b718ec9a30410xff28c44ecd0bb71415914c00e3c2e40d0ea894d40.31113088 Ether
0x199dc75da633ade88a4e17cc054d207a08ca23622907111ada36f223e24f4e126524699130 days 21 hrs ago0x2fca5f257895b8bcede0c0d06141b718ec9a30410x8af7bd104eff917109fd9bbf5f44139d97724e860.18 Ether
0x95db9a9febc9d525b5e6e73735d3bfaa27ae3d3f09086616bcbed10577a91dee6524555130 days 21 hrs ago0x2fca5f257895b8bcede0c0d06141b718ec9a30410x614261773ae87cf97ca450eb76d977c85b1ab3a00.027852352 Ether
0x638b9f926e908968605c4e024dce31758e7d32e15cfe593dc7f4a7a11ad31f9a6501006134 days 17 hrs ago0x2fca5f257895b8bcede0c0d06141b718ec9a30410x0ce384fbd41d04206891bcc9d2d7defaefed242f0.0093 Ether
0xde5441e0056c2b51a7cf69768421b66a2a75168c21db20ba41676a50167209326500345134 days 20 hrs ago0x2fca5f257895b8bcede0c0d06141b718ec9a30410x614261773ae87cf97ca450eb76d977c85b1ab3a00.05 Ether
0x65b155ba91d72bd8a3c0cf3039e3478fb24ab87592a6a71e4d007e824d2e60706500321134 days 20 hrs ago0x2fca5f257895b8bcede0c0d06141b718ec9a30410x614261773ae87cf97ca450eb76d977c85b1ab3a00.05 Ether
0x2eb9223b440fbc467aa43989be0c69a647e4e2dde4e478e636ffa0ab329dcf276495343135 days 15 hrs ago0x2fca5f257895b8bcede0c0d06141b718ec9a30410xbb9a718d42e68ac1019fc557f35eb0bacd6793fc0.1 Ether
0xe2b257e6b0d2748d853dbdc2c7614f978fd438defda62468ede6e174c0f11f466494948135 days 17 hrs ago0x2fca5f257895b8bcede0c0d06141b718ec9a30410xad271a0aa5380f37653c8fb9385ea1671509409d0.2498375872 Ether
[ Download CSV Export 
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: TrexDexMain
Compiler Version: v0.4.24+commit.e67f0147
Optimization Enabled: Yes
Runs (Optimizer):  200


Contract Source Code
pragma solidity ^0.4.21;

library SafeMath {
    function add(uint256 _a, uint256 _b) pure internal returns (uint256) {
        uint256 c = _a + _b;
        assert(c >= _a && c >= _b);
        
        return c;
    }

    function sub(uint256 _a, uint256 _b) pure internal returns (uint256) {
        assert(_b <= _a);

        return _a - _b;
    }

    function mul(uint256 _a, uint256 _b) pure internal returns (uint256) {
        uint256 c = _a * _b;
        assert(_a == 0 || c / _a == _b);

        return c;
    }

    function div(uint256 _a, uint256 _b) pure internal returns (uint256) {
        assert(_b > 0);

        return _a / _b;
    }
}

contract Token {
    string public name;
    string public symbol;
    uint256 public decimals;
    uint256 public totalSupply;
    mapping (address => uint256) public balanceOf;
    mapping (address => mapping (address => uint256)) public allowance;

    function transfer(address _to, uint256 _value) public returns (bool _success);
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool _success);
    function approve(address _spender, uint256 _value) public returns (bool _success);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract StrictToken is Token {
    bool public strict = true;
    mapping (address => uint256) public rate;

    function getRate(address _address) public view returns (uint256);
    function getStrict() public pure returns (bool);
}

contract TrexDexMain {
    using SafeMath for uint256;

    address public owner;
    address public feeAddress;
    mapping (address => mapping (address => uint256)) public makeFees;
    mapping (address => mapping (address => uint256)) public takeFees;
    mapping (address => uint256) public depositFees;
    mapping (address => uint256) public withdrawFees;
    mapping (address => bool) public strictTokens;
    mapping (address => bool) public tokenDeposits;
    mapping (address => bool) public tokenWithdraws;
    mapping (address => mapping (address => bool)) public tokenTrades;
    mapping (address => mapping (address => uint256)) public deposits;
    mapping (address => mapping (bytes32 => bool)) public orders;
    mapping (address => mapping (bytes32 => uint256)) public orderFills;

    event Order(address buyTokenAddress, uint256 buyAmount, address sellTokenAddress, uint256 sellAmount, address takeAddress, address baseTokenAddress, uint256 expireBlock, uint256 nonce, address makeAddress);
    event Cancel(bytes32 orderHash);
    event Trade(bytes32 orderHash, uint256 buyAmount, uint256 sellAmount, uint256 takeFee, uint256 makeFee, address takeAddress);
    event Deposit(address tokenAddress, address userAddress, uint256 amount, uint256 fee, uint256 balance);
    event Withdraw(address tokenAddress, address userAddress, uint256 amount, uint256 fee, uint256 balance);
    event TransferIn(address tokenAddress, address userAddress, uint256 amount, uint256 balance);
    event TransferOut(address tokenAddress, address userAddress, uint256 amount, uint256 balance);

    modifier isOwner {
        assert(msg.sender == owner);
        _;
    }

    modifier hasPayloadSize(uint256 size) {
        assert(msg.data.length >= size + 4);
        _;
    }    

    constructor(address _feeAddress) public {
        owner = msg.sender;
        feeAddress = _feeAddress;
    }

    function() public {
        revert();
    }

    function transfer(address _tokenAddress, address _userAddress, uint256 _amount) public isOwner {
        require (deposits[_tokenAddress][msg.sender] >= _amount);
        deposits[_tokenAddress][_userAddress] = deposits[_tokenAddress][_userAddress].add(_amount);
        deposits[_tokenAddress][msg.sender] = deposits[_tokenAddress][msg.sender].sub(_amount);

        emit TransferIn(_tokenAddress, _userAddress, _amount, deposits[_tokenAddress][_userAddress]);
        emit TransferOut(_tokenAddress, msg.sender, _amount, deposits[_tokenAddress][msg.sender]);
    }

    function setOwner(address _owner) public isOwner {
        owner = _owner;
    }

    function setFeeAddress(address _feeAddress) public isOwner {
        feeAddress = _feeAddress;
    }

    function setStrictToken(address _tokenAddress, bool _isStrict) public isOwner {
        strictTokens[_tokenAddress] = _isStrict;
    }

    function setTokenTransfers(address[] _tokenAddress, bool[] _depositEnabled, bool[] _withdrawEnabled, uint256[] _depositFee, uint256[] _withdrawFee) public isOwner {
        for (uint256 i = 0; i < _tokenAddress.length; i++) {
            setTokenTransfer(_tokenAddress[i], _depositEnabled[i], _withdrawEnabled[i], _depositFee[i], _withdrawFee[i]);
        }
    }

    function setTokenTransfer(address _tokenAddress, bool _depositEnabled, bool _withdrawEnabled, uint256 _depositFee, uint256 _withdrawFee) public isOwner {
        tokenDeposits[_tokenAddress] = _depositEnabled;
        tokenWithdraws[_tokenAddress] = _withdrawEnabled;
        depositFees[_tokenAddress] = _depositFee;
        withdrawFees[_tokenAddress] = _withdrawFee;
    }

    function setTokenTrades(address[] _tokenAddress, address[] _baseTokenAddress, bool[] _tradeEnabled, uint256[] _makeFee, uint256[] _takeFee) public isOwner {
        for (uint256 i = 0; i < _tokenAddress.length; i++) {
            setTokenTrade(_tokenAddress[i], _baseTokenAddress[i], _tradeEnabled[i], _makeFee[i], _takeFee[i]);
        }
    }

    function setTokenTrade(address _tokenAddress, address _baseTokenAddress, bool _tradeEnabled, uint256 _makeFee, uint256 _takeFee) public isOwner {
        tokenTrades[_baseTokenAddress][_tokenAddress] = _tradeEnabled;
        makeFees[_baseTokenAddress][_tokenAddress] = _makeFee;
        takeFees[_baseTokenAddress][_tokenAddress] = _takeFee;
    }

    function deposit() payable public {
        uint256 fee = _depositToken(0x0, msg.sender, msg.value);

        emit Deposit(0x0, msg.sender, msg.value, fee, deposits[0x0][msg.sender]);
    }

    function depositToken(address _tokenAddress, uint256 _amount) public hasPayloadSize(2 * 32) {
        require (_tokenAddress != 0x0 && tokenDeposits[_tokenAddress]);
        require (Token(_tokenAddress).transferFrom(msg.sender, this, _amount));
        uint256 fee = _depositToken(_tokenAddress, msg.sender, _amount);

        emit Deposit(_tokenAddress, msg.sender, _amount, fee, deposits[_tokenAddress][msg.sender]);
    }

    function _depositToken(address _tokenAddress, address _userAddress, uint256 _amount) private returns (uint256 fee) {
        fee = _amount.mul(depositFees[_tokenAddress]).div(1 ether);
        deposits[_tokenAddress][_userAddress] = deposits[_tokenAddress][_userAddress].add(_amount.sub(fee));
        deposits[_tokenAddress][feeAddress] = deposits[_tokenAddress][feeAddress].add(fee);
    }

    function withdraw(uint256 _amount) public hasPayloadSize(32) {
        require (deposits[0x0][msg.sender] >= _amount);
        uint256 fee = _withdrawToken(0x0, msg.sender, _amount);
        msg.sender.transfer(_amount - fee);

        emit Withdraw(0x0, msg.sender, _amount, fee, deposits[0x0][msg.sender]);
    }

    function withdrawToken(address _tokenAddress, uint256 _amount) public hasPayloadSize(2 * 32) {
        require (_tokenAddress != 0x0 && tokenWithdraws[_tokenAddress]);
        require (deposits[_tokenAddress][msg.sender] >= _amount);
        uint256 fee = _withdrawToken(_tokenAddress, msg.sender, _amount);
        if (!Token(_tokenAddress).transfer(msg.sender, _amount - fee)) {
            revert();
        }

        emit Withdraw(_tokenAddress, msg.sender, _amount, fee, deposits[_tokenAddress][msg.sender]);
    }

    function _withdrawToken(address _tokenAddress, address _userAddress, uint256 _amount) private returns (uint256 fee) {
        fee = _amount.mul(withdrawFees[_tokenAddress]).div(1 ether);
        deposits[_tokenAddress][_userAddress] = deposits[_tokenAddress][_userAddress].sub(_amount);
        deposits[_tokenAddress][feeAddress] = deposits[_tokenAddress][feeAddress].add(fee);
    }

    function balanceOf(address _tokenAddress, address _userAddress) view public returns (uint256) {
        return deposits[_tokenAddress][_userAddress];
    }

    function order(address _buyTokenAddress, uint256 _buyAmount, address _sellTokenAddress, uint256 _sellAmount, address _takeAddress, address _baseTokenAddress, uint256 _expireBlock, uint256 _nonce) public hasPayloadSize(8 * 32) {
        require (_checkTrade(_buyTokenAddress, _buyAmount, _sellTokenAddress, _sellAmount, _baseTokenAddress));
        bytes32 hash = _buildHash(_buyTokenAddress, _buyAmount, _sellTokenAddress, _sellAmount, _takeAddress, _baseTokenAddress, _expireBlock, _nonce);
        require (!orders[msg.sender][hash]);
        orders[msg.sender][hash] = true;

        emit Order(_buyTokenAddress, _buyAmount, _sellTokenAddress, _sellAmount, _takeAddress, _baseTokenAddress, _expireBlock, _nonce, msg.sender);
    }

    function tradeMulti(address[] _buyTokenAddress, uint256[] _buyAmount, address[] _sellTokenAddress, uint256[] _sellAmount, address[] _takeAddress, address[] _baseTokenAddress, uint256[] _expireBlock, uint256[] _nonce, address[] _makeAddress, uint256[] _amount, uint8[] _v, bytes32[] _r, bytes32[] _s) public {
        for (uint256 i = 0; i < _buyTokenAddress.length; i++) {
            trade(_buyTokenAddress[i], _buyAmount[i], _sellTokenAddress[i], _sellAmount[i], _takeAddress[i], _baseTokenAddress[i], _expireBlock[i], _nonce[i], _makeAddress[i], _amount[i], _v[i], _r[i], _s[i]);
        }
    }

    function trade(address _buyTokenAddress, uint256 _buyAmount, address _sellTokenAddress, uint256 _sellAmount, address _takeAddress, address _baseTokenAddress, uint256 _expireBlock, uint256 _nonce, address _makeAddress, uint256 _amount, uint8 _v, bytes32 _r, bytes32 _s) public {
        assert(msg.data.length >= 13 * 32 + 4);
        require (_checkTrade(_buyTokenAddress, _buyAmount, _sellTokenAddress, _sellAmount, _baseTokenAddress));
        require (_takeAddress == 0x0 || msg.sender == _takeAddress);
        bytes32 hash = _buildHash(_buyTokenAddress, _buyAmount, _sellTokenAddress, _sellAmount, _takeAddress, _baseTokenAddress, _expireBlock, _nonce);
        require (_checkHash(hash, _makeAddress, _v, _r, _s));
        require (block.number <= _expireBlock);
        require (orderFills[_makeAddress][hash] + _amount <= _buyAmount);
        _trade(hash, _buyTokenAddress, _buyAmount, _sellTokenAddress, _sellAmount, _baseTokenAddress, _makeAddress, _amount);
    }

    function _trade(bytes32 hash, address _buyTokenAddress, uint256 _buyAmount, address _sellTokenAddress, uint256 _sellAmount, address _baseTokenAddress, address _makeAddress, uint256 _amount) private {
        address tokenAddress = (_baseTokenAddress == _buyTokenAddress ? _sellTokenAddress : _buyTokenAddress);
        uint256 makeFee = _amount.mul(makeFees[_baseTokenAddress][tokenAddress]).div(1 ether);
        uint256 takeFee = _amount.mul(takeFees[_baseTokenAddress][tokenAddress]).div(1 ether);
        if (_buyAmount == 0) {
            _buyAmount = _calcStrictAmount(_sellTokenAddress, _sellAmount, _buyTokenAddress);
        }
        else if (_sellAmount == 0) {
            _sellAmount = _calcStrictAmount(_buyTokenAddress, _buyAmount, _sellTokenAddress);
        }
        uint256 tradeAmount = _sellAmount.mul(_amount).div(_buyAmount);
        deposits[_buyTokenAddress][msg.sender] = deposits[_buyTokenAddress][msg.sender].sub(_amount.add(takeFee));
        deposits[_buyTokenAddress][_makeAddress] = deposits[_buyTokenAddress][_makeAddress].add(_amount.sub(makeFee));
        deposits[_buyTokenAddress][feeAddress] = deposits[_buyTokenAddress][feeAddress].add(makeFee.add(takeFee));
        deposits[_sellTokenAddress][_makeAddress] = deposits[_sellTokenAddress][_makeAddress].sub(tradeAmount);
        deposits[_sellTokenAddress][msg.sender] = deposits[_sellTokenAddress][msg.sender].add(tradeAmount);
        orderFills[_makeAddress][hash] = orderFills[_makeAddress][hash].add(_amount);

        emit Trade(hash, _amount, tradeAmount, takeFee, makeFee, msg.sender);
    }

    function _calcStrictAmount(address _tokenAddress, uint256 _amount, address _strictTokenAddress) private view returns (uint256) {
        uint256 rate = StrictToken(_strictTokenAddress).getRate(_tokenAddress);
        require(rate > 0);

        return rate.mul(_amount).div(1 ether);
    }

    function _checkTrade(address _buyTokenAddress, uint256 _buyAmount, address _sellTokenAddress, uint256 _sellAmount, address _baseTokenAddress) private view returns (bool) {
        if (!_checkTradeAddress(_buyTokenAddress, _sellTokenAddress, _baseTokenAddress)) {
            return false;
        }
        else if (_buyAmount != 0 && strictTokens[_buyTokenAddress]) {
            return false;
        }
        else if (_sellAmount != 0 && strictTokens[_sellTokenAddress]) {
            return false;
        }

        return true;
    }

    function _checkTradeAddress(address _buyTokenAddress, address _sellTokenAddress, address _baseTokenAddress) private view returns (bool) {
        return _baseTokenAddress == _buyTokenAddress ? tokenTrades[_buyTokenAddress][_sellTokenAddress] : tokenTrades[_sellTokenAddress][_buyTokenAddress];
    }

    function testTrade(address _buyTokenAddress, uint256 _buyAmount, address _sellTokenAddress, uint256 _sellAmount, address _takeAddress, address _baseTokenAddress, uint256 _expireBlock, uint256 _nonce, address _makeAddress, uint256 _amount, uint8 _v, bytes32 _r, bytes32 _s) constant public returns (bool) {
        if (!_checkTrade(_buyTokenAddress, _buyAmount, _sellTokenAddress, _sellAmount, _baseTokenAddress)) {
            return false;
        }
        else if (!(_takeAddress == 0x0 || msg.sender == _takeAddress)) {
            return false;
        }
        else if (!_hasDeposit(_buyTokenAddress, _takeAddress, _amount)) {
            return false;
        }
        else if (availableVolume(_buyTokenAddress, _buyAmount, _sellTokenAddress, _sellAmount, _takeAddress, _baseTokenAddress, _expireBlock, _nonce, _makeAddress, _v, _r, _s) > _amount) {
            return false;
        }
        
        return true;
    }

    function _hasDeposit(address _buyTokenAddress, address _userAddress, uint256 _amount) private view returns (bool) {
        return deposits[_buyTokenAddress][_userAddress] >= _amount;
    }

    function availableVolume(address _buyTokenAddress, uint256 _buyAmount, address _sellTokenAddress, uint256 _sellAmount, address _takeAddress, address _baseTokenAddress, uint256 _expireBlock, uint256 _nonce, address _makeAddress, uint8 _v, bytes32 _r, bytes32 _s) constant public returns (uint256) {
        bytes32 hash = _buildHash(_buyTokenAddress, _buyAmount, _sellTokenAddress, _sellAmount, _takeAddress, _baseTokenAddress, _expireBlock, _nonce);
        if (!_checkHash(hash, _makeAddress, _v, _r, _s)) {
            return 0;
        }

        return _availableVolume(hash, _buyTokenAddress, _buyAmount, _sellTokenAddress, _sellAmount, _makeAddress);
    }

    function _availableVolume(bytes32 hash, address _buyTokenAddress, uint256 _buyAmount, address _sellTokenAddress, uint256 _sellAmount, address _makeAddress) private view returns (uint256) {
        if (_buyAmount == 0) {
            _buyAmount = _calcStrictAmount(_sellTokenAddress, _sellAmount, _buyTokenAddress);
        }
        else if (_sellAmount == 0) {
            _sellAmount = _calcStrictAmount(_buyTokenAddress, _buyAmount, _sellTokenAddress);
        }
        uint256 available1 = _buyAmount.sub(orderFills[_makeAddress][hash]);
        uint256 available2 = deposits[_sellTokenAddress][_makeAddress].mul(_buyAmount).div(_sellAmount);

        return available1 < available2 ? available1 : available2;
    }

    function amountFilled(address _buyTokenAddress, uint256 _buyAmount, address _sellTokenAddress, uint256 _sellAmount, address _takeAddress, address _baseTokenAddress, uint256 _expireBlock, uint256 _nonce, address _makeAddress) constant public returns (uint256) {
        bytes32 hash = _buildHash(_buyTokenAddress, _buyAmount, _sellTokenAddress, _sellAmount, _takeAddress, _baseTokenAddress, _expireBlock, _nonce);

        return orderFills[_makeAddress][hash];
    }

    function cancelOrder(address _buyTokenAddress, uint256 _buyAmount, address _sellTokenAddress, uint256 _sellAmount, address _takeAddress, address _baseTokenAddress, uint256 _expireBlock, uint256 _nonce, uint8 _v, bytes32 _r, bytes32 _s) public hasPayloadSize(11 * 32) {
        bytes32 hash = _buildHash(_buyTokenAddress, _buyAmount, _sellTokenAddress, _sellAmount, _takeAddress, _baseTokenAddress, _expireBlock, _nonce);
        require (_checkHash(hash, msg.sender, _v, _r, _s));
        orderFills[msg.sender][hash] = _buyAmount;

        emit Cancel(hash);
    }

    function _buildHash(address _buyTokenAddress, uint256 _buyAmount, address _sellTokenAddress, uint256 _sellAmount, address _takeAddress, address _baseTokenAddress, uint256 _expireBlock, uint256 _nonce) private view returns (bytes32) {
        return sha256(abi.encodePacked(this, _buyTokenAddress, _buyAmount, _sellTokenAddress, _sellAmount, _takeAddress, _baseTokenAddress, _expireBlock, _nonce));
    }

    function _checkHash(bytes32 _hash, address _makeAddress, uint8 _v, bytes32 _r, bytes32 _s) private view returns (bool) {
        return (orders[_makeAddress][_hash] || ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", _hash)), _v, _r, _s) == _makeAddress);
    }

}

Contract ABI
[{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"strictTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"makeFees","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"withdrawFees","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"bytes32"}],"name":"orderFills","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_buyTokenAddress","type":"address"},{"name":"_buyAmount","type":"uint256"},{"name":"_sellTokenAddress","type":"address"},{"name":"_sellAmount","type":"uint256"},{"name":"_takeAddress","type":"address"},{"name":"_baseTokenAddress","type":"address"},{"name":"_expireBlock","type":"uint256"},{"name":"_nonce","type":"uint256"},{"name":"_makeAddress","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_v","type":"uint8"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"}],"name":"testTrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_amount","type":"uint256"}],"name":"depositToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_buyTokenAddress","type":"address"},{"name":"_buyAmount","type":"uint256"},{"name":"_sellTokenAddress","type":"address"},{"name":"_sellAmount","type":"uint256"},{"name":"_takeAddress","type":"address"},{"name":"_baseTokenAddress","type":"address"},{"name":"_expireBlock","type":"uint256"},{"name":"_nonce","type":"uint256"},{"name":"_makeAddress","type":"address"},{"name":"_v","type":"uint8"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"}],"name":"availableVolume","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_buyTokenAddress","type":"address[]"},{"name":"_buyAmount","type":"uint256[]"},{"name":"_sellTokenAddress","type":"address[]"},{"name":"_sellAmount","type":"uint256[]"},{"name":"_takeAddress","type":"address[]"},{"name":"_baseTokenAddress","type":"address[]"},{"name":"_expireBlock","type":"uint256[]"},{"name":"_nonce","type":"uint256[]"},{"name":"_makeAddress","type":"address[]"},{"name":"_amount","type":"uint256[]"},{"name":"_v","type":"uint8[]"},{"name":"_r","type":"bytes32[]"},{"name":"_s","type":"bytes32[]"}],"name":"tradeMulti","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address[]"},{"name":"_baseTokenAddress","type":"address[]"},{"name":"_tradeEnabled","type":"bool[]"},{"name":"_makeFee","type":"uint256[]"},{"name":"_takeFee","type":"uint256[]"}],"name":"setTokenTrades","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_baseTokenAddress","type":"address"},{"name":"_tradeEnabled","type":"bool"},{"name":"_makeFee","type":"uint256"},{"name":"_takeFee","type":"uint256"}],"name":"setTokenTrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"depositFees","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"tokenTrades","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_buyTokenAddress","type":"address"},{"name":"_buyAmount","type":"uint256"},{"name":"_sellTokenAddress","type":"address"},{"name":"_sellAmount","type":"uint256"},{"name":"_takeAddress","type":"address"},{"name":"_baseTokenAddress","type":"address"},{"name":"_expireBlock","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"order","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address[]"},{"name":"_depositEnabled","type":"bool[]"},{"name":"_withdrawEnabled","type":"bool[]"},{"name":"_depositFee","type":"uint256[]"},{"name":"_withdrawFee","type":"uint256[]"}],"name":"setTokenTransfers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"deposits","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_isStrict","type":"bool"}],"name":"setStrictToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"bytes32"}],"name":"orders","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_userAddress","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_depositEnabled","type":"bool"},{"name":"_withdrawEnabled","type":"bool"},{"name":"_depositFee","type":"uint256"},{"name":"_withdrawFee","type":"uint256"}],"name":"setTokenTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"takeFees","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_buyTokenAddress","type":"address"},{"name":"_buyAmount","type":"uint256"},{"name":"_sellTokenAddress","type":"address"},{"name":"_sellAmount","type":"uint256"},{"name":"_takeAddress","type":"address"},{"name":"_baseTokenAddress","type":"address"},{"name":"_expireBlock","type":"uint256"},{"name":"_nonce","type":"uint256"},{"name":"_v","type":"uint8"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"}],"name":"cancelOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenDeposits","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenWithdraws","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_buyTokenAddress","type":"address"},{"name":"_buyAmount","type":"uint256"},{"name":"_sellTokenAddress","type":"address"},{"name":"_sellAmount","type":"uint256"},{"name":"_takeAddress","type":"address"},{"name":"_baseTokenAddress","type":"address"},{"name":"_expireBlock","type":"uint256"},{"name":"_nonce","type":"uint256"},{"name":"_makeAddress","type":"address"}],"name":"amountFilled","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_userAddress","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_buyTokenAddress","type":"address"},{"name":"_buyAmount","type":"uint256"},{"name":"_sellTokenAddress","type":"address"},{"name":"_sellAmount","type":"uint256"},{"name":"_takeAddress","type":"address"},{"name":"_baseTokenAddress","type":"address"},{"name":"_expireBlock","type":"uint256"},{"name":"_nonce","type":"uint256"},{"name":"_makeAddress","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_v","type":"uint8"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"}],"name":"trade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_feeAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"buyTokenAddress","type":"address"},{"indexed":false,"name":"buyAmount","type":"uint256"},{"indexed":false,"name":"sellTokenAddress","type":"address"},{"indexed":false,"name":"sellAmount","type":"uint256"},{"indexed":false,"name":"takeAddress","type":"address"},{"indexed":false,"name":"baseTokenAddress","type":"address"},{"indexed":false,"name":"expireBlock","type":"uint256"},{"indexed":false,"name":"nonce","type":"uint256"},{"indexed":false,"name":"makeAddress","type":"address"}],"name":"Order","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"orderHash","type":"bytes32"}],"name":"Cancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"orderHash","type":"bytes32"},{"indexed":false,"name":"buyAmount","type":"uint256"},{"indexed":false,"name":"sellAmount","type":"uint256"},{"indexed":false,"name":"takeFee","type":"uint256"},{"indexed":false,"name":"makeFee","type":"uint256"},{"indexed":false,"name":"takeAddress","type":"address"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenAddress","type":"address"},{"indexed":false,"name":"userAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"fee","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenAddress","type":"address"},{"indexed":false,"name":"userAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"fee","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenAddress","type":"address"},{"indexed":false,"name":"userAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"TransferIn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenAddress","type":"address"},{"indexed":false,"name":"userAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"TransferOut","type":"event"}]

Contract Creation Code
608060405234801561001057600080fd5b5060405160208061279d833981016040525160008054600160a060020a0319908116331790915560018054600160a060020a039093169290911691909117905561273e8061005f6000396000f3006080604052600436106101a05763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630369fc8e81146101b2578063055bfae4146101e757806313af403514610220578063164e68de1461024357806319774d431461026457806328d9a78e146102885780632e1a7d4d146102e5578063338b5dea146102fd578063412753581461032157806342dca7251461035257806358ffcae0146103ab57806363681c48146106ac578063672d17fc146107e55780637f067a251461081757806383d4a01b146108385780638636c1b91461085f5780638705fcd4146108a057806387a42e1a146108c15780638da5cb5b146109fa5780638f601f6614610a0f5780639a04346814610a365780639e281a9814610a5c578063bb5f462914610a80578063beabacc814610aa4578063c9d7cf0f14610ace578063cfccbdef14610aff578063d0e30db014610b26578063d81e78fa14610b2e578063e6074da714610b7e578063e905767814610b9f578063f57020e814610bc0578063f7888aec14610c0a578063feecfc8914610c31575b3480156101ac57600080fd5b50600080fd5b3480156101be57600080fd5b506101d3600160a060020a0360043516610c8e565b604080519115158252519081900360200190f35b3480156101f357600080fd5b5061020e600160a060020a0360043581169060243516610ca3565b60408051918252519081900360200190f35b34801561022c57600080fd5b50610241600160a060020a0360043516610cc0565b005b34801561024f57600080fd5b5061020e600160a060020a0360043516610d03565b34801561027057600080fd5b5061020e600160a060020a0360043516602435610d15565b34801561029457600080fd5b506101d3600160a060020a03600435811690602435906044358116906064359060843581169060a43581169060c4359060e4359061010435166101243560ff61014435166101643561018435610d32565b3480156102f157600080fd5b50610241600435610dcc565b34801561030957600080fd5b50610241600160a060020a0360043516602435610ed5565b34801561032d57600080fd5b50610336611049565b60408051600160a060020a039092168252519081900360200190f35b34801561035e57600080fd5b5061020e600160a060020a03600435811690602435906044358116906064359060843581169060a43581169060c4359060e43590610104351660ff61012435166101443561016435611058565b3480156103b757600080fd5b506040805160206004803580820135838102808601850190965280855261024195369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506110ab9650505050505050565b3480156106b857600080fd5b506040805160206004803580820135838102808601850190965280855261024195369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a99890198929750908201955093508392508501908490808284375094975061120f9650505050505050565b3480156107f157600080fd5b50610241600160a060020a036004358116906024351660443515156064356084356112c1565b34801561082357600080fd5b5061020e600160a060020a0360043516611338565b34801561084457600080fd5b506101d3600160a060020a036004358116906024351661134a565b34801561086b57600080fd5b50610241600160a060020a03600435811690602435906044358116906064359060843581169060a4351660c43560e43561136a565b3480156108ac57600080fd5b50610241600160a060020a0360043516611476565b3480156108cd57600080fd5b506040805160206004803580820135838102808601850190965280855261024195369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506114b99650505050505050565b348015610a0657600080fd5b50610336611563565b348015610a1b57600080fd5b5061020e600160a060020a0360043581169060243516611572565b348015610a4257600080fd5b50610241600160a060020a0360043516602435151561158f565b348015610a6857600080fd5b50610241600160a060020a03600435166024356115ce565b348015610a8c57600080fd5b506101d3600160a060020a036004351660243561176d565b348015610ab057600080fd5b50610241600160a060020a036004358116906024351660443561178d565b348015610ada57600080fd5b50610241600160a060020a036004351660243515156044351515606435608435611926565b348015610b0b57600080fd5b5061020e600160a060020a0360043581169060243516611990565b6102416119ad565b348015610b3a57600080fd5b50610241600160a060020a03600435811690602435906044358116906064359060843581169060a4351660c43560e43560ff61010435166101243561014435611a3d565b348015610b8a57600080fd5b506101d3600160a060020a0360043516611ad6565b348015610bab57600080fd5b506101d3600160a060020a0360043516611aeb565b348015610bcc57600080fd5b5061020e600160a060020a03600435811690602435906044358116906064359060843581169060a43581169060c4359060e435906101043516611b00565b348015610c1657600080fd5b5061020e600160a060020a0360043581169060243516611b49565b348015610c3d57600080fd5b50610241600160a060020a03600435811690602435906044358116906064359060843581169060a43581169060c4359060e4359061010435166101243560ff61014435166101643561018435611b74565b60066020526000908152604090205460ff1681565b600260209081526000928352604080842090915290825290205481565b600054600160a060020a03163314610cd457fe5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60056020526000908152604090205481565b600c60209081526000928352604080842090915290825290205481565b6000610d418e8e8e8e8d611c3c565b1515610d4f57506000610dbb565b600160a060020a038a161580610d6d575033600160a060020a038b16145b1515610d7b57506000610dbb565b610d868e8b87611ccc565b1515610d9457506000610dbb565b84610da98f8f8f8f8f8f8f8f8f8e8e8e611058565b1115610db757506000610dbb565b5060015b9d9c50505050505050505050505050565b600060206024361015610ddb57fe5b3360009081527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e36020526040902054831115610e1657600080fd5b610e2260003385611cfc565b604051909250339083850380156108fc02916000818181858888f19350505050158015610e53573d6000803e3d6000fd5b503360008181527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3602090815260408083205481519384529183019390935281830186905260608201859052608082015290517febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f9181900360a00190a1505050565b600060406044361015610ee457fe5b600160a060020a03841615801590610f145750600160a060020a03841660009081526007602052604090205460ff165b1515610f1f57600080fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018590529051600160a060020a038616916323b872dd9160648083019260209291908290030181600087803b158015610f8d57600080fd5b505af1158015610fa1573d6000803e3d6000fd5b505050506040513d6020811015610fb757600080fd5b50511515610fc457600080fd5b610fcf843385611dee565b600160a060020a0385166000818152600a60209081526040808320338085529083529281902054815194855291840192909252828201879052606083018490526080830152519193507f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f6919081900360a00190a150505050565b600154600160a060020a031681565b60008061106b8e8e8e8e8e8e8e8e611e6d565b905061107a8187878787611f84565b1515611089576000915061109a565b611097818f8f8f8f8b6120d7565b91505b509c9b505050505050505050505050565b60005b8d518110156111ff576111f78e828151811015156110c857fe5b906020019060200201518e838151811015156110e057fe5b906020019060200201518e848151811015156110f857fe5b906020019060200201518e8581518110151561111057fe5b906020019060200201518e8681518110151561112857fe5b906020019060200201518e8781518110151561114057fe5b906020019060200201518e8881518110151561115857fe5b906020019060200201518e8981518110151561117057fe5b906020019060200201518e8a81518110151561118857fe5b906020019060200201518e8b8151811015156111a057fe5b906020019060200201518e8c8151811015156111b857fe5b906020019060200201518e8d8151811015156111d057fe5b906020019060200201518e8e8151811015156111e857fe5b90602001906020020151611b74565b6001016110ae565b5050505050505050505050505050565b60008054600160a060020a0316331461122457fe5b5060005b85518110156112b9576112b1868281518110151561124257fe5b90602001906020020151868381518110151561125a57fe5b90602001906020020151868481518110151561127257fe5b90602001906020020151868581518110151561128a57fe5b9060200190602002015186868151811015156112a257fe5b906020019060200201516112c1565b600101611228565b505050505050565b600054600160a060020a031633146112d557fe5b600160a060020a03938416600081815260096020908152604080832098909716808352978152868220805460ff19169615159690961790955581815260028552858120878252855285812093909355825260038352838220948252939091522055565b60046020526000908152604090205481565b600960209081526000928352604080842090915290825290205460ff1681565b600061010061010436101561137b57fe5b6113888a8a8a8a89611c3c565b151561139357600080fd5b6113a38a8a8a8a8a8a8a8a611e6d565b336000908152600b6020908152604080832084845290915290205490925060ff16156113ce57600080fd5b336000818152600b60209081526040808320868452825291829020805460ff191660011790558151600160a060020a038e811682529181018d90528b821681840152606081018b9052898216608082015290881660a082015260c0810187905260e08101869052610100810192909252517f8cdc90739f125dfca8bf8121c15d4c1552cbc612ea09d41dd5ecf3da7e10cf7e918190036101200190a150505050505050505050565b600054600160a060020a0316331461148a57fe5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054600160a060020a031633146114ce57fe5b5060005b85518110156112b95761155b86828151811015156114ec57fe5b90602001906020020151868381518110151561150457fe5b90602001906020020151868481518110151561151c57fe5b90602001906020020151868581518110151561153457fe5b90602001906020020151868681518110151561154c57fe5b90602001906020020151611926565b6001016114d2565b600054600160a060020a031681565b600a60209081526000928352604080842090915290825290205481565b600054600160a060020a031633146115a357fe5b600160a060020a03919091166000908152600660205260409020805460ff1916911515919091179055565b6000604060443610156115dd57fe5b600160a060020a0384161580159061160d5750600160a060020a03841660009081526008602052604090205460ff165b151561161857600080fd5b600160a060020a0384166000908152600a6020908152604080832033845290915290205483111561164857600080fd5b611653843385611cfc565b604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015282860360248201529051919350600160a060020a0386169163a9059cbb916044808201926020929091908290030181600087803b1580156116c057600080fd5b505af11580156116d4573d6000803e3d6000fd5b505050506040513d60208110156116ea57600080fd5b505115156116f757600080fd5b600160a060020a0384166000818152600a60209081526040808320338085529083529281902054815194855291840192909252828201869052606083018590526080830152517febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f9181900360a00190a150505050565b600b60209081526000928352604080842090915290825290205460ff1681565b600054600160a060020a031633146117a157fe5b600160a060020a0383166000908152600a602090815260408083203384529091529020548111156117d157600080fd5b600160a060020a038084166000908152600a6020908152604080832093861683529290522054611807908263ffffffff61219b16565b600160a060020a038481166000908152600a6020908152604080832093871683529290528181209290925533825290205461184290826121bf565b600160a060020a038481166000818152600a602090815260408083203384528252808320959095559286168082529084902054845192835292820152808301849052606081019190915290517fc6b2705fef56491dc74644c481bb3ca3357d1b3a113f993b02bcad198564fde59181900360800190a1600160a060020a0383166000818152600a602090815260408083203380855290835292819020548151948552918401929092528282018490526060830152517f08d474da06d67ac0e0658410133ac9d6a35c74cfb6c9da5f68bbd68e662305349181900360800190a1505050565b600054600160a060020a0316331461193a57fe5b600160a060020a039094166000908152600760209081526040808320805496151560ff19978816179055600882528083208054951515959096169490941790945560048452828120919091556005909252902055565b600360209081526000928352604080842090915290825290205481565b60006119bb60003334611dee565b3360008181527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e36020908152604080832054815193845291830193909352348284015260608201849052608082015290519192507f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f6919081900360a00190a150565b6000610160610164361015611a4e57fe5b611a5e8d8d8d8d8d8d8d8d611e6d565b9150611a6d8233878787611f84565b1515611a7857600080fd5b336000908152600c602090815260408083208584528252918290208e9055815184815291517fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a9281900390910190a150505050505050505050505050565b60076020526000908152604090205460ff1681565b60086020526000908152604090205460ff1681565b600080611b138b8b8b8b8b8b8b8b611e6d565b600160a060020a0384166000908152600c6020908152604080832084845290915290205492509050509998505050505050505050565b600160a060020a039182166000908152600a6020908152604080832093909416825291909152205490565b60006101a4361015611b8257fe5b611b8f8e8e8e8e8d611c3c565b1515611b9a57600080fd5b600160a060020a038a161580611bb8575033600160a060020a038b16145b1515611bc357600080fd5b611bd38e8e8e8e8e8e8e8e611e6d565b9050611be28187868686611f84565b1515611bed57600080fd5b43881015611bfa57600080fd5b600160a060020a0386166000908152600c6020908152604080832084845290915290205485018d1015611c2c57600080fd5b6111ff818f8f8f8f8e8c8c6121d1565b6000611c4986858461258a565b1515611c5757506000611cc3565b8415801590611c7e5750600160a060020a03861660009081526006602052604090205460ff165b15611c8b57506000611cc3565b8215801590611cb25750600160a060020a03841660009081526006602052604090205460ff165b15611cbf57506000611cc3565b5060015b95945050505050565b600160a060020a038084166000908152600a60209081526040808320938616835292905220548111159392505050565b600160a060020a038316600090815260056020526040812054611d4090670de0b6b3a764000090611d3490859063ffffffff61260516565b9063ffffffff61262616565b600160a060020a038086166000908152600a6020908152604080832093881683529290522054909150611d79908363ffffffff6121bf16565b600160a060020a038581166000908152600a6020908152604080832088851684529091528082209390935560015490911681522054611db8908261219b565b600160a060020a039485166000908152600a60209081526040808320600154909816835296905294909420939093555090919050565b600160a060020a038316600090815260046020526040812054611e2690670de0b6b3a764000090611d3490859063ffffffff61260516565b9050611d79611e3b838363ffffffff6121bf16565b600160a060020a038087166000908152600a60209081526040808320938916835292905220549063ffffffff61219b16565b604080516c01000000000000000000000000308102602080840191909152600160a060020a03808d1683026034850152604884018c9052808b1683026068850152607c84018a90528089168302609c850152871690910260b083015260c4820185905260e48083018590528351808403909101815261010490920192839052815160009360029392909182918401908083835b60208310611f1f5780518252601f199092019160209182019101611f00565b51815160209384036101000a600019018019909216911617905260405191909301945091925050808303816000865af1158015611f60573d6000803e3d6000fd5b5050506040513d6020811015611f7557600080fd5b50519998505050505050505050565b600160a060020a0384166000908152600b6020908152604080832088845290915281205460ff16806120cd575084600160a060020a031660018760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b6020831061203c5780518252601f19909201916020918201910161201d565b51815160209384036101000a60001901801990921691161790526040805192909401829003822060008084528383018087529190915260ff8d1683860152606083018c9052608083018b9052935160a08084019750919550601f1981019492819003909101925090865af11580156120b8573d6000803e3d6000fd5b50505060206040510351600160a060020a0316145b9695505050505050565b600080808615156120f4576120ed86868a612644565b9650612109565b84151561210957612106888888612644565b94505b600160a060020a0384166000908152600c602090815260408083208c845290915290205461213e90889063ffffffff6121bf16565b600160a060020a038088166000908152600a602090815260408083209389168352929052205490925061217d908690611d34908a63ffffffff61260516565b905080821061218c578061218e565b815b9998505050505050505050565b60008282018381108015906121b05750828110155b15156121b857fe5b9392505050565b6000828211156121cb57fe5b50900390565b6000806000808a600160a060020a031687600160a060020a0316146121f6578a6121f8565b885b600160a060020a0380891660009081526002602090815260408083209385168352929052205490945061224090670de0b6b3a764000090611d3490889063ffffffff61260516565b600160a060020a0380891660009081526003602090815260408083209389168352929052205490935061228890670de0b6b3a764000090611d3490889063ffffffff61260516565b91508915156122a35761229c89898d612644565b99506122b8565b8715156122b8576122b58b8b8b612644565b97505b6122cc8a611d348a8863ffffffff61260516565b90506123116122e1868463ffffffff61219b16565b600160a060020a038d166000908152600a602090815260408083203384529091529020549063ffffffff6121bf16565b600160a060020a038c166000908152600a6020908152604080832033845290915290205561237a612348868563ffffffff6121bf16565b600160a060020a03808e166000908152600a60209081526040808320938c16835292905220549063ffffffff61219b16565b600160a060020a03808d166000908152600a60209081526040808320938b16835292905220556123e86123b3848463ffffffff61219b16565b600160a060020a03808e166000908152600a60209081526040808320600154909416835292905220549063ffffffff61219b16565b600160a060020a03808d166000908152600a60208181526040808420600154861685528252808420959095558d84168352908152838220928a16825291909152205461243a908263ffffffff6121bf16565b600160a060020a038a81166000908152600a60209081526040808320938b16835292905281812092909255338252902054612475908261219b565b600160a060020a03808b166000908152600a602090815260408083203384528252808320949094559189168152600c82528281208f825290915220546124c1908663ffffffff61219b16565b600c600088600160a060020a0316600160a060020a0316815260200190815260200160002060008e60001916600019168152602001908152602001600020819055507fefd04b53651b0e426697607534a0a6786c4b6dee29ffb2d032ec291f372ca0578c868385873360405180876000191660001916815260200186815260200185815260200184815260200183815260200182600160a060020a0316600160a060020a03168152602001965050505050505060405180910390a1505050505050505050505050565b600083600160a060020a031682600160a060020a0316146125d357600160a060020a0380841660009081526009602090815260408083209388168352929052205460ff166125fd565b600160a060020a0380851660009081526009602090815260408083209387168352929052205460ff165b949350505050565b60008282028315806121b0575082848281151561261e57fe5b04146121b857fe5b600080821161263157fe5b818381151561263c57fe5b049392505050565b60008082600160a060020a03166337cef791866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b1580156126bb57600080fd5b505af11580156126cf573d6000803e3d6000fd5b505050506040513d60208110156126e557600080fd5b50519050600081116126f657600080fd5b611cc3670de0b6b3a7640000611d34838763ffffffff612605165600a165627a7a7230582067923ad6243986a3072344afa2767e8b43b6799c98aec79cec55ece40a2e612e002900000000000000000000000004af3b747614879ec1db4e80c941dc8dc40839c4


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

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000004af3b747614879ec1db4e80c941dc8dc40839c4


   Swarm Source:
bzzr://67923ad6243986a3072344afa2767e8b43b6799c98aec79cec55ece40a2e612e
Block Age transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.