Contract 0xf20b9e713a33f61fa38792d2afaf1cd30339126a

 

TxHash Block Age From To Value [TxFee]
0xcb1b85acef4a7d411e939977761942014006276be7d8cff929529a419cf449a4687072770 days 21 hrs ago0x6d9434854bcbc16a911485ba4c9992565352eaed IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0 Ether0.00079564
0x28b0b0735884d95ceda0c0440ca7d6d52725cac970057b804c8a6d2dd92ff271687068670 days 21 hrs ago0x6d9434854bcbc16a911485ba4c9992565352eaed IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0 Ether0.002432484
0x87bdb7aa250e1afdf383efc54ce519759c6fab46f783cab14ede490140313f8a687067970 days 21 hrs ago0x6d9434854bcbc16a911485ba4c9992565352eaed IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0 Ether0.00086982228
0x2ae96de75643c6dbc849bab9e6eb31451755925f376eb8e1d47f137f275f3342687066370 days 21 hrs ago0x6d9434854bcbc16a911485ba4c9992565352eaed IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0 Ether0.00084029088
0x75743e529517426d72a7ed37b4542d4a8d91df1734e819442623be3bf4707c6c687063370 days 22 hrs ago0x6d9434854bcbc16a911485ba4c9992565352eaed IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0 Ether0.0003153678
0xff75882dd21194d30c9cfbfbd97adbaadfeac1464c98a64b4d9797692a6bbb2a686749271 days 10 hrs ago0x6d9434854bcbc16a911485ba4c9992565352eaed IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0.0001 Ether0.00142367
0x68050c25b7e8c9959e2dfb739e9312c19193b8d3b154180232ad67fcd8d8640d686723071 days 11 hrs ago0x6d9434854bcbc16a911485ba4c9992565352eaed IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0.01 Ether0.000868835
0x26d71d58f9e51dedd05df7eb404f581f9b1ca808170c5dc5a3f42f979f0112c2686721571 days 11 hrs ago0x6d9434854bcbc16a911485ba4c9992565352eaed IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0.01 Ether0.000862045
0xbe8dd1b182252b970964296c5a9604c1f0fbd186fb9d43ccfe1cf904ace54ff4686238772 days 6 hrs ago0xb6bf1b11b1d12d75ea1b9848543e22f6a974acad IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0 Ether0.000243088
0x48ab7592a594e88bbc2a7813e617f078a2c99893b2e12385dcd128f16f289661686238172 days 6 hrs ago0xb6bf1b11b1d12d75ea1b9848543e22f6a974acad IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0 Ether0.000243088
0xb2cb168f3d1371ae1410e90fb3bd130cb3be0bb497c4224adc097161d81d5c03684521975 days 2 hrs ago0xb6bf1b11b1d12d75ea1b9848543e22f6a974acad IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0 Ether0.00039618
0x721a432988eed2185428af6c715c4a986bd7e34e8788d7dd4d5253e4c480a2f3683218277 days 6 hrs ago0xb6bf1b11b1d12d75ea1b9848543e22f6a974acad IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0 Ether0.00139111
0x0bd94746d30e1e30e06e9931ea4d87b251138216c615eda17687afb718f79664683205077 days 7 hrs ago0xb6bf1b11b1d12d75ea1b9848543e22f6a974acad IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0 Ether0.00139111
0x0219829a7f4d68ec29272dd905fe3fa91444743b5ad3e6df01de11114fcd9693682714778 days 2 hrs ago0xb6bf1b11b1d12d75ea1b9848543e22f6a974acad IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0 Ether0.00119238
0xb928840e7205a8cfbeb03406c6884c24b4ce2a1698c2a6c8a70d674a4506edde682713978 days 2 hrs ago0xb6bf1b11b1d12d75ea1b9848543e22f6a974acad IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0 Ether0.00068144
0xbde91f27db29073ecee8b8740abe208117e94a1019fd3863a20a3cee8493c44d682712778 days 2 hrs ago0xb6bf1b11b1d12d75ea1b9848543e22f6a974acad IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0 Ether0.00034072
0xd3dd0681717e824f575b1c845b6f22f1ab8ac0cc1b57dc66795c5e24f5365ffe676673988 days 1 hr ago0x24ab3529abfbb299159451037b9b07b54b18404c IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a1.5 Ether0.000182778
0x78ebde0c60cf62e32ecb0afcd3c5bd4306dfe38002e812a579c8a0a6a3bbe323676419888 days 11 hrs ago0x24ab3529abfbb299159451037b9b07b54b18404c IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0.9 Ether0.000183162
0xb49c516be1e5f600e1114a29f9e3171c4462ab97aec0927aca81d93292ddf738676381488 days 13 hrs ago0x24ab3529abfbb299159451037b9b07b54b18404c IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0.3 Ether0.000183162
0x489cae734fa7856a438c433ac4a7b524992c008b41519f1f83bef0ac023ee5af676381288 days 13 hrs ago0x24ab3529abfbb299159451037b9b07b54b18404c IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0.3 Ether0.000182778
0x6591cfd5d1c26691969174d4eea19c589754e46b0c920f75e6ed52e91ceccbe66683228101 days 18 hrs ago0x24ab3529abfbb299159451037b9b07b54b18404c IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0.0001 Ether0.001412305
0x6fbf7722b8037f3351eb6a802a45777f67ccd6ca197acc99cb20497f82f3604b6672266103 days 13 hrs ago0x24ab3529abfbb299159451037b9b07b54b18404c IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0.2 Ether0.00035391
0x1d07e6d41f80e9b1b42394cbbe647435b70e3322a5d7e8f640a84de8fd7bd6736661533105 days 7 hrs ago0x24ab3529abfbb299159451037b9b07b54b18404c IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0.0001 Ether0.00299805
0xd16a96333a9a4126b12ce836c24604c2645b9c6830ac8642365851ff400a28816661443105 days 7 hrs ago0x24ab3529abfbb299159451037b9b07b54b18404c IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0.0011 Ether0.00035263
0x09c0a8aedc240851c9d08814456f1977708d8137010c00e93a08987676e77f296661091105 days 9 hrs ago0x24ab3529abfbb299159451037b9b07b54b18404c IN  0xf20b9e713a33f61fa38792d2afaf1cd30339126a0 Ether0.009918048
[ Download CSV Export 

Latest 25 Internal Transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x3b9dcbc4f38d3ca7f2cc2746a3183c59613378429a789306ebb6b14a037fbff7718446514 days 6 hrs ago0xf20b9e713a33f61fa38792d2afaf1cd30339126a0xc0829421c1d260bd3cb3e0f06cfe2d52db2ce3150.10234567901234568 Ether
0x3b9dcbc4f38d3ca7f2cc2746a3183c59613378429a789306ebb6b14a037fbff7718446514 days 6 hrs ago0xd52bc4fe5da20ba35f25b38581c805b165211f990xf20b9e713a33f61fa38792d2afaf1cd30339126a0.10234567901234568 Ether
0x525b13776a6c6d9b3fcb4caf76a4ac5c89b6bc8ffd88564a9dd9b87f76b1896d718444414 days 6 hrs ago0xf20b9e713a33f61fa38792d2afaf1cd30339126a0xc0829421c1d260bd3cb3e0f06cfe2d52db2ce3150.083333333333333333 Ether
0x525b13776a6c6d9b3fcb4caf76a4ac5c89b6bc8ffd88564a9dd9b87f76b1896d718444414 days 6 hrs ago0xd52bc4fe5da20ba35f25b38581c805b165211f990xf20b9e713a33f61fa38792d2afaf1cd30339126a0.083333333333333333 Ether
0x3b5494312e20c5c872266d8a560a763329cb2ee494f9f55437359be45fc89260718443414 days 6 hrs ago0xf20b9e713a33f61fa38792d2afaf1cd30339126a0xc0829421c1d260bd3cb3e0f06cfe2d52db2ce3150.01 Ether
0x3b5494312e20c5c872266d8a560a763329cb2ee494f9f55437359be45fc89260718443414 days 6 hrs ago0xd52bc4fe5da20ba35f25b38581c805b165211f990xf20b9e713a33f61fa38792d2afaf1cd30339126a0.01 Ether
0x2bf55167387b95d204c906d61ee341c3531979707ed3b7a480f98bc2133eff3e718214514 days 18 hrs ago0xf20b9e713a33f61fa38792d2afaf1cd30339126a0xc0829421c1d260bd3cb3e0f06cfe2d52db2ce3150.343470507544581618 Ether
0x2bf55167387b95d204c906d61ee341c3531979707ed3b7a480f98bc2133eff3e718214514 days 18 hrs ago0xd52bc4fe5da20ba35f25b38581c805b165211f990xf20b9e713a33f61fa38792d2afaf1cd30339126a0.343470507544581618 Ether
0x09ec25edea8b67c101453a70d18134ba90ea247b8f2f1e7d2d35c63fb36b8287718091015 days 9 mins ago0xf20b9e713a33f61fa38792d2afaf1cd30339126a0xc0829421c1d260bd3cb3e0f06cfe2d52db2ce3150.463580246913580247 Ether
0x09ec25edea8b67c101453a70d18134ba90ea247b8f2f1e7d2d35c63fb36b8287718091015 days 9 mins ago0xd52bc4fe5da20ba35f25b38581c805b165211f990xf20b9e713a33f61fa38792d2afaf1cd30339126a0.463580246913580247 Ether
0x0e9adbaba84bd67d1464c8140c7a16b8c0bfbac888421f804fb59f1c7025499b717695715 days 19 hrs ago0xf20b9e713a33f61fa38792d2afaf1cd30339126a0xc0829421c1d260bd3cb3e0f06cfe2d52db2ce3155 Ether
0x0e9adbaba84bd67d1464c8140c7a16b8c0bfbac888421f804fb59f1c7025499b717695715 days 19 hrs ago0xc1055167b42a5d01b4384afcc9d6682d61a67f2a0xf20b9e713a33f61fa38792d2afaf1cd30339126a5 Ether
0x7e4115a4d8f3cd3829f89ba7aab496855bafa7e6b58d04ffff1d2a44a1df17d5717483016 days 5 hrs ago0xf20b9e713a33f61fa38792d2afaf1cd30339126a0xc0829421c1d260bd3cb3e0f06cfe2d52db2ce3155 Ether
0x7e4115a4d8f3cd3829f89ba7aab496855bafa7e6b58d04ffff1d2a44a1df17d5717483016 days 5 hrs ago0xc1055167b42a5d01b4384afcc9d6682d61a67f2a0xf20b9e713a33f61fa38792d2afaf1cd30339126a5 Ether
0xb3571d8b2728d5a04b6993671ec63e1f406bc0dd9bad916efd70bd62859c0ddc717443916 days 7 hrs ago0xf20b9e713a33f61fa38792d2afaf1cd30339126a0xc0829421c1d260bd3cb3e0f06cfe2d52db2ce3150.9 Ether
0xb3571d8b2728d5a04b6993671ec63e1f406bc0dd9bad916efd70bd62859c0ddc717443916 days 7 hrs ago0xc1055167b42a5d01b4384afcc9d6682d61a67f2a0xf20b9e713a33f61fa38792d2afaf1cd30339126a0.9 Ether
0x2bf78de3063271684c9637661cc8658017b6e2ad36d87123d572a86b045d8970717427316 days 8 hrs ago0xf20b9e713a33f61fa38792d2afaf1cd30339126a0xc0829421c1d260bd3cb3e0f06cfe2d52db2ce3151.100000000000000128 Ether
0x2bf78de3063271684c9637661cc8658017b6e2ad36d87123d572a86b045d8970717427316 days 8 hrs ago0xc1055167b42a5d01b4384afcc9d6682d61a67f2a0xf20b9e713a33f61fa38792d2afaf1cd30339126a1.100000000000000128 Ether
0x118039f1c4a27c7eb9f130c1bdecb641a056f7651c13aeb8dee6ce3d80b2ee38717064917 days 2 hrs ago0xf20b9e713a33f61fa38792d2afaf1cd30339126a0xc0829421c1d260bd3cb3e0f06cfe2d52db2ce3152.8 Ether
0x118039f1c4a27c7eb9f130c1bdecb641a056f7651c13aeb8dee6ce3d80b2ee38717064917 days 2 hrs ago0xc1055167b42a5d01b4384afcc9d6682d61a67f2a0xf20b9e713a33f61fa38792d2afaf1cd30339126a2.8 Ether
0xd7509314e472160462364d47dcedcbe610639fe1c94220df2a3aa6247b1dc5c8716941717 days 8 hrs ago0xf20b9e713a33f61fa38792d2afaf1cd30339126a0xc0829421c1d260bd3cb3e0f06cfe2d52db2ce3150.8 Ether
0xd7509314e472160462364d47dcedcbe610639fe1c94220df2a3aa6247b1dc5c8716941717 days 8 hrs ago0xc1055167b42a5d01b4384afcc9d6682d61a67f2a0xf20b9e713a33f61fa38792d2afaf1cd30339126a0.8 Ether
0xe07581559e68f4075d2400731882775063eb7cd7255f71705155333914bc4510716941117 days 8 hrs ago0xf20b9e713a33f61fa38792d2afaf1cd30339126a0xc0829421c1d260bd3cb3e0f06cfe2d52db2ce3150.8 Ether
0xe07581559e68f4075d2400731882775063eb7cd7255f71705155333914bc4510716941117 days 8 hrs ago0xc1055167b42a5d01b4384afcc9d6682d61a67f2a0xf20b9e713a33f61fa38792d2afaf1cd30339126a0.8 Ether
0x43a06232bba0a0173892e8d8a0c4e662f14ff03473c50b4bcddc558a2175d408716935117 days 8 hrs ago0xf20b9e713a33f61fa38792d2afaf1cd30339126a0xc0829421c1d260bd3cb3e0f06cfe2d52db2ce3150.9 Ether
[ Download CSV Export 
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: BancorNetwork
Compiler Version: v0.4.21+commit.dfe3193c
Optimization Enabled: Yes
Runs (Optimizer):  500


Contract Source Code
pragma solidity ^0.4.21;

/*
    Owned contract interface
*/
contract IOwned {
    // this function isn't abstract since the compiler emits automatically generated getter functions as external
    function owner() public view returns (address) {}

    function transferOwnership(address _newOwner) public;
    function acceptOwnership() public;
}

/*
    ERC20 Standard Token interface
*/
contract IERC20Token {
    // these functions aren't abstract since the compiler emits automatically generated getter functions as external
    function name() public view returns (string) {}
    function symbol() public view returns (string) {}
    function decimals() public view returns (uint8) {}
    function totalSupply() public view returns (uint256) {}
    function balanceOf(address _owner) public view returns (uint256) { _owner; }
    function allowance(address _owner, address _spender) public view returns (uint256) { _owner; _spender; }

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

/*
    Contract Registry interface
*/
contract IContractRegistry {
    function getAddress(bytes32 _contractName) public view returns (address);
}

/*
    Contract Features interface
*/
contract IContractFeatures {
    function isSupported(address _contract, uint256 _features) public view returns (bool);
    function enableFeatures(uint256 _features, bool _enable) public;
}

/*
    Whitelist interface
*/
contract IWhitelist {
    function isWhitelisted(address _address) public view returns (bool);
}

/*
    Token Holder interface
*/
contract ITokenHolder is IOwned {
    function withdrawTokens(IERC20Token _token, address _to, uint256 _amount) public;
}

/*
    Ether Token interface
*/
contract IEtherToken is ITokenHolder, IERC20Token {
    function deposit() public payable;
    function withdraw(uint256 _amount) public;
    function withdrawTo(address _to, uint256 _amount) public;
}

/*
    Smart Token interface
*/
contract ISmartToken is IOwned, IERC20Token {
    function disableTransfers(bool _disable) public;
    function issue(address _to, uint256 _amount) public;
    function destroy(address _from, uint256 _amount) public;
}

/*
    Bancor Gas Price Limit interface
*/
contract IBancorGasPriceLimit {
    function gasPrice() public view returns (uint256) {}
    function validateGasPrice(uint256) public view;
}

/*
    Bancor Converter interface
*/
contract IBancorConverter {
    function getReturn(IERC20Token _fromToken, IERC20Token _toToken, uint256 _amount) public view returns (uint256);
    function convert(IERC20Token _fromToken, IERC20Token _toToken, uint256 _amount, uint256 _minReturn) public returns (uint256);
    function conversionWhitelist() public view returns (IWhitelist) {}
    // deprecated, backward compatibility
    function change(IERC20Token _fromToken, IERC20Token _toToken, uint256 _amount, uint256 _minReturn) public returns (uint256);
}

/*
    Bancor Network interface
*/
contract IBancorNetwork {
    function convert(IERC20Token[] _path, uint256 _amount, uint256 _minReturn) public payable returns (uint256);
    function convertFor(IERC20Token[] _path, uint256 _amount, uint256 _minReturn, address _for) public payable returns (uint256);
    function convertForPrioritized2(
        IERC20Token[] _path,
        uint256 _amount,
        uint256 _minReturn,
        address _for,
        uint256 _block,
        uint8 _v,
        bytes32 _r,
        bytes32 _s)
        public payable returns (uint256);

    // deprecated, backward compatibility
    function convertForPrioritized(
        IERC20Token[] _path,
        uint256 _amount,
        uint256 _minReturn,
        address _for,
        uint256 _block,
        uint256 _nonce,
        uint8 _v,
        bytes32 _r,
        bytes32 _s)
        public payable returns (uint256);
}

/*
    Utilities & Common Modifiers
*/
contract Utils {
    /**
        constructor
    */
    function Utils() public {
    }

    // verifies that an amount is greater than zero
    modifier greaterThanZero(uint256 _amount) {
        require(_amount > 0);
        _;
    }

    // validates an address - currently only checks that it isn't null
    modifier validAddress(address _address) {
        require(_address != address(0));
        _;
    }

    // verifies that the address is different than this contract address
    modifier notThis(address _address) {
        require(_address != address(this));
        _;
    }

    // Overflow protected math functions

    /**
        @dev returns the sum of _x and _y, asserts if the calculation overflows

        @param _x   value 1
        @param _y   value 2

        @return sum
    */
    function safeAdd(uint256 _x, uint256 _y) internal pure returns (uint256) {
        uint256 z = _x + _y;
        assert(z >= _x);
        return z;
    }

    /**
        @dev returns the difference of _x minus _y, asserts if the subtraction results in a negative number

        @param _x   minuend
        @param _y   subtrahend

        @return difference
    */
    function safeSub(uint256 _x, uint256 _y) internal pure returns (uint256) {
        assert(_x >= _y);
        return _x - _y;
    }

    /**
        @dev returns the product of multiplying _x by _y, asserts if the calculation overflows

        @param _x   factor 1
        @param _y   factor 2

        @return product
    */
    function safeMul(uint256 _x, uint256 _y) internal pure returns (uint256) {
        uint256 z = _x * _y;
        assert(_x == 0 || z / _x == _y);
        return z;
    }
}

/*
    Provides support and utilities for contract ownership
*/
contract Owned is IOwned {
    address public owner;
    address public newOwner;

    event OwnerUpdate(address indexed _prevOwner, address indexed _newOwner);

    /**
        @dev constructor
    */
    function Owned() public {
        owner = msg.sender;
    }

    // allows execution by the owner only
    modifier ownerOnly {
        assert(msg.sender == owner);
        _;
    }

    /**
        @dev allows transferring the contract ownership
        the new owner still needs to accept the transfer
        can only be called by the contract owner

        @param _newOwner    new contract owner
    */
    function transferOwnership(address _newOwner) public ownerOnly {
        require(_newOwner != owner);
        newOwner = _newOwner;
    }

    /**
        @dev used by a new owner to accept an ownership transfer
    */
    function acceptOwnership() public {
        require(msg.sender == newOwner);
        emit OwnerUpdate(owner, newOwner);
        owner = newOwner;
        newOwner = address(0);
    }
}

/**
    Id definitions for bancor contracts

    Can be used in conjunction with the contract registry to get contract addresses
*/
contract ContractIds {
    bytes32 public constant BANCOR_NETWORK = "BancorNetwork";
    bytes32 public constant BANCOR_FORMULA = "BancorFormula";
    bytes32 public constant CONTRACT_FEATURES = "ContractFeatures";
}

/**
    Id definitions for bancor contract features

    Can be used to query the ContractFeatures contract to check whether a certain feature is supported by a contract
*/
contract FeatureIds {
    // converter features
    uint256 public constant CONVERTER_CONVERSION_WHITELIST = 1 << 0;
}

/*
    We consider every contract to be a 'token holder' since it's currently not possible
    for a contract to deny receiving tokens.

    The TokenHolder's contract sole purpose is to provide a safety mechanism that allows
    the owner to send tokens that were sent to the contract by mistake back to their sender.
*/
contract TokenHolder is ITokenHolder, Owned, Utils {
    /**
        @dev constructor
    */
    function TokenHolder() public {
    }

    /**
        @dev withdraws tokens held by the contract and sends them to an account
        can only be called by the owner

        @param _token   ERC20 token contract address
        @param _to      account to receive the new amount
        @param _amount  amount to withdraw
    */
    function withdrawTokens(IERC20Token _token, address _to, uint256 _amount)
        public
        ownerOnly
        validAddress(_token)
        validAddress(_to)
        notThis(_to)
    {
        assert(_token.transfer(_to, _amount));
    }
}

/*
    The BancorNetwork contract is the main entry point for bancor token conversions.
    It also allows converting between any token in the bancor network to any other token
    in a single transaction by providing a conversion path.

    A note on conversion path -
    Conversion path is a data structure that's used when converting a token to another token in the bancor network
    when the conversion cannot necessarily be done by single converter and might require multiple 'hops'.
    The path defines which converters should be used and what kind of conversion should be done in each step.

    The path format doesn't include complex structure and instead, it is represented by a single array
    in which each 'hop' is represented by a 2-tuple - smart token & to token.
    In addition, the first element is always the source token.
    The smart token is only used as a pointer to a converter (since converter addresses are more likely to change).

    Format:
    [source token, smart token, to token, smart token, to token...]
*/
contract BancorNetwork is IBancorNetwork, TokenHolder, ContractIds, FeatureIds {
    address public signerAddress = 0x0;         // verified address that allows conversions with higher gas price
    IContractRegistry public registry;          // contract registry contract address
    IBancorGasPriceLimit public gasPriceLimit;  // bancor universal gas price limit contract

    mapping (address => bool) public etherTokens;       // list of all supported ether tokens
    mapping (bytes32 => bool) public conversionHashes;  // list of conversion hashes, to prevent re-use of the same hash

    /**
        @dev constructor

        @param _registry    address of a contract registry contract
    */
    function BancorNetwork(IContractRegistry _registry) public validAddress(_registry) {
        registry = _registry;
    }

    // validates a conversion path - verifies that the number of elements is odd and that maximum number of 'hops' is 10
    modifier validConversionPath(IERC20Token[] _path) {
        require(_path.length > 2 && _path.length <= (1 + 2 * 10) && _path.length % 2 == 1);
        _;
    }

    /*
        @dev allows the owner to update the contract registry contract address

        @param _registry   address of a contract registry contract
    */
    function setContractRegistry(IContractRegistry _registry)
        public
        ownerOnly
        validAddress(_registry)
        notThis(_registry)
    {
        registry = _registry;
    }

    /*
        @dev allows the owner to update the gas price limit contract address

        @param _gasPriceLimit   address of a bancor gas price limit contract
    */
    function setGasPriceLimit(IBancorGasPriceLimit _gasPriceLimit)
        public
        ownerOnly
        validAddress(_gasPriceLimit)
        notThis(_gasPriceLimit)
    {
        gasPriceLimit = _gasPriceLimit;
    }

    /*
        @dev allows the owner to update the signer address

        @param _signerAddress    new signer address
    */
    function setSignerAddress(address _signerAddress)
        public
        ownerOnly
        validAddress(_signerAddress)
        notThis(_signerAddress)
    {
        signerAddress = _signerAddress;
    }

    /**
        @dev allows the owner to register/unregister ether tokens

        @param _token       ether token contract address
        @param _register    true to register, false to unregister
    */
    function registerEtherToken(IEtherToken _token, bool _register)
        public
        ownerOnly
        validAddress(_token)
        notThis(_token)
    {
        etherTokens[_token] = _register;
    }

    /**
        @dev verifies that the signer address is trusted by recovering 
        the address associated with the public key from elliptic 
        curve signature, returns zero on error.
        notice that the signature is valid only for one conversion
        and expires after the give block.

        @return true if the signer is verified
    */
    function verifyTrustedSender(IERC20Token[] _path, uint256 _amount, uint256 _block, address _addr, uint8 _v, bytes32 _r, bytes32 _s) private returns(bool) {
        bytes32 hash = keccak256(_block, tx.gasprice, _addr, msg.sender, _amount, _path);

        // checking that it is the first conversion with the given signature
        // and that the current block number doesn't exceeded the maximum block
        // number that's allowed with the current signature
        require(!conversionHashes[hash] && block.number <= _block);

        // recovering the signing address and comparing it to the trusted signer
        // address that was set in the contract
        bytes32 prefixedHash = keccak256("\x19Ethereum Signed Message:\n32", hash);
        bool verified = ecrecover(prefixedHash, _v, _r, _s) == signerAddress;

        // if the signer is the trusted signer - mark the hash so that it can't
        // be used multiple times
        if (verified)
            conversionHashes[hash] = true;
        return verified;
    }

    /**
        @dev converts the token to any other token in the bancor network by following
        a predefined conversion path and transfers the result tokens to a target account
        note that the converter should already own the source tokens

        @param _path        conversion path, see conversion path format above
        @param _amount      amount to convert from (in the initial source token)
        @param _minReturn   if the conversion results in an amount smaller than the minimum return - it is cancelled, must be nonzero
        @param _for         account that will receive the conversion result

        @return tokens issued in return
    */
    function convertFor(IERC20Token[] _path, uint256 _amount, uint256 _minReturn, address _for) public payable returns (uint256) {
        return convertForPrioritized2(_path, _amount, _minReturn, _for, 0x0, 0x0, 0x0, 0x0);
    }

    /**
        @dev converts the token to any other token in the bancor network
        by following a predefined conversion path and transfers the result
        tokens to a target account.
        this version of the function also allows the verified signer
        to bypass the universal gas price limit.
        note that the converter should already own the source tokens

        @param _path        conversion path, see conversion path format above
        @param _amount      amount to convert from (in the initial source token)
        @param _minReturn   if the conversion results in an amount smaller than the minimum return - it is cancelled, must be nonzero
        @param _for         account that will receive the conversion result

        @return tokens issued in return
    */
    function convertForPrioritized2(IERC20Token[] _path, uint256 _amount, uint256 _minReturn, address _for, uint256 _block, uint8 _v, bytes32 _r, bytes32 _s)
        public
        payable
        validConversionPath(_path)
        returns (uint256)
    {
        // if ETH is provided, ensure that the amount is identical to _amount and verify that the source token is an ether token
        IERC20Token fromToken = _path[0];
        require(msg.value == 0 || (_amount == msg.value && etherTokens[fromToken]));

        // if ETH was sent with the call, the source is an ether token - deposit the ETH in it
        // otherwise, we assume we already have the tokens
        if (msg.value > 0)
            IEtherToken(fromToken).deposit.value(msg.value)();

        return convertForInternal(_path, _amount, _minReturn, _for, _block, _v, _r, _s);
    }

    /**
        @dev converts token to any other token in the bancor network
        by following the predefined conversion paths and transfers the result
        tokens to a targeted account.
        this version of the function also allows multiple conversions
        in a single atomic transaction.
        note that the converter should already own the source tokens

        @param _paths           merged conversion paths, i.e. [path1, path2, ...]. see conversion path format above
        @param _pathStartIndex  each item in the array is the start index of the nth path in _paths
        @param _amounts         amount to convert from (in the initial source token) for each path
        @param _minReturns      minimum return for each path. if the conversion results in an amount 
                                smaller than the minimum return - it is cancelled, must be nonzero
        @param _for             account that will receive the conversions result

        @return amount of conversion result for each path
    */
    function convertForMultiple(IERC20Token[] _paths, uint256[] _pathStartIndex, uint256[] _amounts, uint256[] _minReturns, address _for)
        public
        payable
        returns (uint256[])
    {
        // if ETH is provided, ensure that the total amount was converted into other tokens
        uint256 convertedValue = 0;
        uint256 pathEndIndex;
        
        // iterate over the conversion paths
        for (uint256 i = 0; i < _pathStartIndex.length; i += 1) {
            pathEndIndex = i == (_pathStartIndex.length - 1) ? _paths.length : _pathStartIndex[i + 1];

            // copy a single path from _paths into an array
            IERC20Token[] memory path = new IERC20Token[](pathEndIndex - _pathStartIndex[i]);
            for (uint256 j = _pathStartIndex[i]; j < pathEndIndex; j += 1) {
                path[j - _pathStartIndex[i]] = _paths[j];
            }

            // if ETH is provided, ensure that the amount is lower than the path amount and
            // verify that the source token is an ether token. otherwise ensure that 
            // the source is not an ether token
            IERC20Token fromToken = path[0];
            require(msg.value == 0 || (_amounts[i] <= msg.value && etherTokens[fromToken]) || !etherTokens[fromToken]);

            // if ETH was sent with the call, the source is an ether token - deposit the ETH path amount in it.
            // otherwise, we assume we already have the tokens
            if (msg.value > 0 && etherTokens[fromToken]) {
                IEtherToken(fromToken).deposit.value(_amounts[i])();
                convertedValue += _amounts[i];
            }
            _amounts[i] = convertForInternal(path, _amounts[i], _minReturns[i], _for, 0x0, 0x0, 0x0, 0x0);
        }

        // if ETH was provided, ensure that the full amount was converted
        require(convertedValue == msg.value);

        return _amounts;
    }

    /**
        @dev converts token to any other token in the bancor network
        by following a predefined conversion paths and transfers the result
        tokens to a target account.

        @param _path        conversion path, see conversion path format above
        @param _amount      amount to convert from (in the initial source token)
        @param _minReturn   if the conversion results in an amount smaller than the minimum return - it is cancelled, must be nonzero
        @param _for         account that will receive the conversion result
        @param _block       if the current block exceeded the given parameter - it is cancelled
        @param _v           (signature[128:130]) associated with the signer address and helps to validate if the signature is legit
        @param _r           (signature[0:64]) associated with the signer address and helps to validate if the signature is legit
        @param _s           (signature[64:128]) associated with the signer address and helps to validate if the signature is legit

        @return tokens issued in return
    */
    function convertForInternal(
        IERC20Token[] _path, 
        uint256 _amount, 
        uint256 _minReturn, 
        address _for, 
        uint256 _block, 
        uint8 _v, 
        bytes32 _r, 
        bytes32 _s
    )
        private
        validConversionPath(_path)
        returns (uint256)
    {
        if (_v == 0x0 && _r == 0x0 && _s == 0x0)
            gasPriceLimit.validateGasPrice(tx.gasprice);
        else
            require(verifyTrustedSender(_path, _amount, _block, _for, _v, _r, _s));

        // if ETH is provided, ensure that the amount is identical to _amount and verify that the source token is an ether token
        IERC20Token fromToken = _path[0];

        IERC20Token toToken;
        
        (toToken, _amount) = convertByPath(_path, _amount, _minReturn, fromToken, _for);

        // finished the conversion, transfer the funds to the target account
        // if the target token is an ether token, withdraw the tokens and send them as ETH
        // otherwise, transfer the tokens as is
        if (etherTokens[toToken])
            IEtherToken(toToken).withdrawTo(_for, _amount);
        else
            assert(toToken.transfer(_for, _amount));

        return _amount;
    }

    /**
        @dev executes the actual conversion by following the conversion path

        @param _path        conversion path, see conversion path format above
        @param _amount      amount to convert from (in the initial source token)
        @param _minReturn   if the conversion results in an amount smaller than the minimum return - it is cancelled, must be nonzero
        @param _fromToken   ERC20 token to convert from (the first element in the path)
        @param _for         account that will receive the conversion result

        @return ERC20 token to convert to (the last element in the path) & tokens issued in return
    */
    function convertByPath(
        IERC20Token[] _path,
        uint256 _amount,
        uint256 _minReturn,
        IERC20Token _fromToken,
        address _for
    ) private returns (IERC20Token, uint256) {
        ISmartToken smartToken;
        IERC20Token toToken;
        IBancorConverter converter;

        // get the contract features address from the registry
        IContractFeatures features = IContractFeatures(registry.getAddress(ContractIds.CONTRACT_FEATURES));

        // iterate over the conversion path
        uint256 pathLength = _path.length;
        for (uint256 i = 1; i < pathLength; i += 2) {
            smartToken = ISmartToken(_path[i]);
            toToken = _path[i + 1];
            converter = IBancorConverter(smartToken.owner());
            checkWhitelist(converter, _for, features);

            // if the smart token isn't the source (from token), the converter doesn't have control over it and thus we need to approve the request
            if (smartToken != _fromToken)
                ensureAllowance(_fromToken, converter, _amount);

            // make the conversion - if it's the last one, also provide the minimum return value
            _amount = converter.change(_fromToken, toToken, _amount, i == pathLength - 2 ? _minReturn : 1);
            _fromToken = toToken;
        }
        return (toToken, _amount);
    }

    /**
        @dev checks whether the given converter supports a whitelist and if so, ensures that
        the account that should receive the conversion result is actually whitelisted

        @param _converter   converter to check for whitelist
        @param _for         account that will receive the conversion result
        @param _features    contract features contract address
    */
    function checkWhitelist(IBancorConverter _converter, address _for, IContractFeatures _features) private view {
        IWhitelist whitelist;

        // check if the converter supports the conversion whitelist feature
        if (!_features.isSupported(_converter, FeatureIds.CONVERTER_CONVERSION_WHITELIST))
            return;

        // get the whitelist contract from the converter
        whitelist = _converter.conversionWhitelist();
        if (whitelist == address(0))
            return;

        // check if the account that should receive the conversion result is actually whitelisted
        require(whitelist.isWhitelisted(_for));
    }

    /**
        @dev claims the caller's tokens, converts them to any other token in the bancor network
        by following a predefined conversion path and transfers the result tokens to a target account
        note that allowance must be set beforehand

        @param _path        conversion path, see conversion path format above
        @param _amount      amount to convert from (in the initial source token)
        @param _minReturn   if the conversion results in an amount smaller than the minimum return - it is cancelled, must be nonzero
        @param _for         account that will receive the conversion result

        @return tokens issued in return
    */
    function claimAndConvertFor(IERC20Token[] _path, uint256 _amount, uint256 _minReturn, address _for) public returns (uint256) {
        // we need to transfer the tokens from the caller to the converter before we follow
        // the conversion path, to allow it to execute the conversion on behalf of the caller
        // note: we assume we already have allowance
        IERC20Token fromToken = _path[0];
        assert(fromToken.transferFrom(msg.sender, this, _amount));
        return convertFor(_path, _amount, _minReturn, _for);
    }

    /**
        @dev converts the token to any other token in the bancor network by following
        a predefined conversion path and transfers the result tokens back to the sender
        note that the converter should already own the source tokens

        @param _path        conversion path, see conversion path format above
        @param _amount      amount to convert from (in the initial source token)
        @param _minReturn   if the conversion results in an amount smaller than the minimum return - it is cancelled, must be nonzero

        @return tokens issued in return
    */
    function convert(IERC20Token[] _path, uint256 _amount, uint256 _minReturn) public payable returns (uint256) {
        return convertFor(_path, _amount, _minReturn, msg.sender);
    }

    /**
        @dev claims the caller's tokens, converts them to any other token in the bancor network
        by following a predefined conversion path and transfers the result tokens back to the sender
        note that allowance must be set beforehand

        @param _path        conversion path, see conversion path format above
        @param _amount      amount to convert from (in the initial source token)
        @param _minReturn   if the conversion results in an amount smaller than the minimum return - it is cancelled, must be nonzero

        @return tokens issued in return
    */
    function claimAndConvert(IERC20Token[] _path, uint256 _amount, uint256 _minReturn) public returns (uint256) {
        return claimAndConvertFor(_path, _amount, _minReturn, msg.sender);
    }

    /**
        @dev utility, checks whether allowance for the given spender exists and approves one if it doesn't

        @param _token   token to check the allowance in
        @param _spender approved address
        @param _value   allowance amount
    */
    function ensureAllowance(IERC20Token _token, address _spender, uint256 _value) private {
        // check if allowance for the given amount already exists
        if (_token.allowance(this, _spender) >= _value)
            return;

        // if the allowance is nonzero, must reset it to 0 first
        if (_token.allowance(this, _spender) != 0)
            assert(_token.approve(_spender, 0));

        // approve the new allowance
        assert(_token.approve(_spender, _value));
    }

    // deprecated, backward compatibility
    function convertForPrioritized(
        IERC20Token[] _path,
        uint256 _amount,
        uint256 _minReturn,
        address _for,
        uint256 _block,
        uint256 _nonce,
        uint8 _v,
        bytes32 _r,
        bytes32 _s)
        public payable returns (uint256)
    {
        convertForPrioritized2(_path, _amount, _minReturn, _for, _block, _v, _r, _s);
    }
}

Contract ABI
[{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_register","type":"bool"}],"name":"registerEtherToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signerAddress","type":"address"}],"name":"setSignerAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_path","type":"address[]"},{"name":"_amount","type":"uint256"},{"name":"_minReturn","type":"uint256"},{"name":"_for","type":"address"},{"name":"_block","type":"uint256"},{"name":"_nonce","type":"uint256"},{"name":"_v","type":"uint8"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"}],"name":"convertForPrioritized","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"signerAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_path","type":"address[]"},{"name":"_amount","type":"uint256"},{"name":"_minReturn","type":"uint256"},{"name":"_for","type":"address"},{"name":"_block","type":"uint256"},{"name":"_v","type":"uint8"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"}],"name":"convertForPrioritized2","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"BANCOR_FORMULA","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"registry","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"etherTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CONTRACT_FEATURES","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"conversionHashes","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BANCOR_NETWORK","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CONVERTER_CONVERSION_WHITELIST","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gasPriceLimit","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_path","type":"address[]"},{"name":"_amount","type":"uint256"},{"name":"_minReturn","type":"uint256"},{"name":"_for","type":"address"}],"name":"claimAndConvertFor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_paths","type":"address[]"},{"name":"_pathStartIndex","type":"uint256[]"},{"name":"_amounts","type":"uint256[]"},{"name":"_minReturns","type":"uint256[]"},{"name":"_for","type":"address"}],"name":"convertForMultiple","outputs":[{"name":"","type":"uint256[]"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_path","type":"address[]"},{"name":"_amount","type":"uint256"},{"name":"_minReturn","type":"uint256"}],"name":"claimAndConvert","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_path","type":"address[]"},{"name":"_amount","type":"uint256"},{"name":"_minReturn","type":"uint256"},{"name":"_for","type":"address"}],"name":"convertFor","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_gasPriceLimit","type":"address"}],"name":"setGasPriceLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_path","type":"address[]"},{"name":"_amount","type":"uint256"},{"name":"_minReturn","type":"uint256"}],"name":"convert","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_registry","type":"address"}],"name":"setContractRegistry","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_registry","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_prevOwner","type":"address"},{"indexed":true,"name":"_newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"}]

Contract Creation Code
606060405260028054600160a060020a0319169055341561001f57600080fd5b604051602080611a1f8339810160405280805160008054600160a060020a03191633600160a060020a03908116919091179091559092508291508116151561006657600080fd5b5060038054600160a060020a031916600160a060020a0392909216919091179055611989806100966000396000f30060606040526004361061012f5763ffffffff60e060020a60003504166302ef521e8114610134578063046dc1661461015a5780631134269a146101795780635b7633d0146102045780635e35359e146102335780636b08f2ef1461025b5780636d7bd3fc146102ce57806379ba5097146102e15780637b103999146102f45780638077ccf71461030757806383315b6e1461033a57806389e63a601461034d5780638da5cb5b146103635780639232494e1461037657806392d1abb714610389578063961a929c1461039c578063b1e9932b146103af578063b5cadc9114610414578063c7ba24bc14610576578063c98fefed146105cc578063d4ee1d9014610626578063e33051dd14610639578063f2fde38b14610658578063f3898a9714610677578063fcd13d65146106c2575b600080fd5b341561013f57600080fd5b610158600160a060020a036004351660243515156106e1565b005b341561016557600080fd5b610158600160a060020a036004351661075e565b6101f260046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496505084359460208101359450600160a060020a036040820135169350606081013592506080810135915060ff60a0820135169060c08101359060e001356107df565b60405190815260200160405180910390f35b341561020f57600080fd5b6102176107ff565b604051600160a060020a03909116815260200160405180910390f35b341561023e57600080fd5b610158600160a060020a036004358116906024351660443561080e565b6101f260046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496505084359460208101359450600160a060020a0360408201351693506060810135925060ff608082013516915060a08101359060c001356108ef565b34156102d957600080fd5b6101f26109f4565b34156102ec57600080fd5b610158610a18565b34156102ff57600080fd5b610217610aa6565b341561031257600080fd5b610326600160a060020a0360043516610ab5565b604051901515815260200160405180910390f35b341561034557600080fd5b6101f2610aca565b341561035857600080fd5b610326600435610aee565b341561036e57600080fd5b610217610b03565b341561038157600080fd5b6101f2610b12565b341561039457600080fd5b6101f2610b36565b34156103a757600080fd5b610217610b3b565b34156103ba57600080fd5b6101f26004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650508435946020810135945060400135600160a060020a03169250610b4a915050565b610523600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284375094965050509235600160a060020a03169250610bfc915050565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561056257808201518382015260200161054a565b505050509050019250505060405180910390f35b341561058157600080fd5b6101f2600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965050843594602001359350610eba92505050565b6101f26004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650508435946020810135945060400135600160a060020a03169250610ed0915050565b341561063157600080fd5b610217610eeb565b341561064457600080fd5b610158600160a060020a0360043516610efa565b341561066357600080fd5b610158600160a060020a0360043516610f7b565b6101f2600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965050843594602001359350610fdd92505050565b34156106cd57600080fd5b610158600160a060020a0360043516610feb565b60005433600160a060020a039081169116146106f957fe5b81600160a060020a038116151561070f57600080fd5b8230600160a060020a031681600160a060020a03161415151561073157600080fd5b5050600160a060020a03919091166000908152600560205260409020805460ff1916911515919091179055565b60005433600160a060020a0390811691161461077657fe5b80600160a060020a038116151561078c57600080fd5b8130600160a060020a031681600160a060020a0316141515156107ae57600080fd5b50506002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60006107f18a8a8a8a8a8989896108ef565b509998505050505050505050565b600254600160a060020a031681565b60005433600160a060020a0390811691161461082657fe5b82600160a060020a038116151561083c57600080fd5b82600160a060020a038116151561085257600080fd5b8330600160a060020a031681600160a060020a03161415151561087457600080fd5b85600160a060020a031663a9059cbb868660405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156108c857600080fd5b5af115156108d557600080fd5b5050506040518051905015156108e757fe5b505050505050565b600080896002815111801561090657506015815111155b801561091f57506002815181151561091a57fe5b066001145b151561092a57600080fd5b8a60008151811061093757fe5b9060200190602002015191503415806109725750348a1480156109725750600160a060020a03821660009081526005602052604090205460ff165b151561097d57600080fd5b60003411156109d55781600160a060020a031663d0e30db0346040518263ffffffff1660e060020a0281526004016000604051808303818588803b15156109c357600080fd5b5af115156109d057600080fd5b505050505b6109e58b8b8b8b8b8b8b8b61106c565b9b9a5050505050505050505050565b7f42616e636f72466f726d756c610000000000000000000000000000000000000081565b60015433600160a060020a03908116911614610a3357600080fd5b600154600054600160a060020a0391821691167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b600354600160a060020a031681565b60056020526000908152604090205460ff1681565b7f436f6e747261637446656174757265730000000000000000000000000000000081565b60066020526000908152604090205460ff1681565b600054600160a060020a031681565b7f42616e636f724e6574776f726b0000000000000000000000000000000000000081565b600181565b600454600160a060020a031681565b60008085600081518110610b5a57fe5b90602001906020020151905080600160a060020a03166323b872dd33308860405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610bc757600080fd5b5af11515610bd457600080fd5b505050604051805190501515610be657fe5b610bf286868686610ed0565b9695505050505050565b610c0461194b565b6000806000610c1161194b565b60008060009550600093505b8a51841015610e9e5760018b51038414610c4f578a8460010181518110610c4057fe5b90602001906020020151610c52565b8b515b94508a8481518110610c6057fe5b906020019060200201518503604051805910610c795750595b908082528060200260200182016040525092508a8481518110610c9857fe5b9060200190602002015191505b84821015610d09578b8281518110610cb957fe5b90602001906020020151838c8681518110610cd057fe5b90602001906020020151840381518110610ce657fe5b600160a060020a0390921660209283029091019091015260019190910190610ca5565b82600081518110610d1657fe5b906020019060200201519050341580610d675750348a8581518110610d3757fe5b9060200190602002015111158015610d675750600160a060020a03811660009081526005602052604090205460ff165b80610d8b5750600160a060020a03811660009081526005602052604090205460ff16155b1515610d9657600080fd5b600034118015610dbe5750600160a060020a03811660009081526005602052604090205460ff165b15610e415780600160a060020a031663d0e30db08b8681518110610dde57fe5b906020019060200201516040518263ffffffff1660e060020a0281526004016000604051808303818588803b1515610e1557600080fd5b5af11515610e2257600080fd5b50505050898481518110610e3257fe5b90602001906020020151860195505b610e7c838b8681518110610e5157fe5b906020019060200201518b8781518110610e6757fe5b906020019060200201518b600080808061106c565b8a8581518110610e8857fe5b6020908102909101015260019390930192610c1d565b348614610eaa57600080fd5b50979a9950505050505050505050565b6000610ec884848433610b4a565b949350505050565b6000610ee285858585858080806108ef565b95945050505050565b600154600160a060020a031681565b60005433600160a060020a03908116911614610f1257fe5b80600160a060020a0381161515610f2857600080fd5b8130600160a060020a031681600160a060020a031614151515610f4a57600080fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005433600160a060020a03908116911614610f9357fe5b600054600160a060020a0382811691161415610fae57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000610ec884848433610ed0565b60005433600160a060020a0390811691161461100357fe5b80600160a060020a038116151561101957600080fd5b8130600160a060020a031681600160a060020a03161415151561103b57600080fd5b50506003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008060008a6002815111801561108557506015815111155b801561109e57506002815181151561109957fe5b066001145b15156110a957600080fd5b60ff87161580156110b8575085155b80156110c2575084155b1561112457600454600160a060020a0316636b4dff1f3a60405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b151561110f57600080fd5b5af1151561111c57600080fd5b50505061113e565b6111338c8c8a8c8b8b8b611277565b151561113e57600080fd5b8b60008151811061114b57fe5b9060200190602002015192506111648c8c8c868d611416565b600160a060020a038216600090815260056020526040902054909c5090925060ff16156111f45781600160a060020a031663205c28788a8d60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156111df57600080fd5b5af115156111ec57600080fd5b505050611267565b81600160a060020a031663a9059cbb8a8d60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561124857600080fd5b5af1151561125557600080fd5b50505060405180519050151561126757fe5b50989a9950505050505050505050565b600080600080883a89338d8f604051868152602081018690526c01000000000000000000000000600160a060020a038087168202604084015285160260548201526068810183905260888101828051906020019060200280838360005b838110156112ec5780820151838201526020016112d4565b50505050905001965050505050505060405190819003902060008181526006602052604090205490935060ff161580156113265750884311155b151561133157600080fd5b826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c01604051908190039020600254909250600160a060020a03166001838989896040516000815260200160405260405193845260ff9092166020808501919091526040808501929092526060840192909252608090920191516020810390808403906000865af115156113d357600080fd5b505060206040510351600160a060020a03161490508015611408576000838152600660205260409020805460ff191660011790555b9a9950505050505050505050565b6003546000908190819081908190819081908190600160a060020a03166321f8a7217f436f6e747261637446656174757265730000000000000000000000000000000060405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561148f57600080fd5b5af1151561149c57600080fd5b5050506040518051905092508c519150600190505b81811015611609578c81815181106114c557fe5b9060200190602002015195508c81600101815181106114e057fe5b90602001906020020151945085600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561152957600080fd5b5af1151561153657600080fd5b50505060405180519050935061154d848a8561161a565b600160a060020a03868116908b161461156b5761156b8a858e611773565b83600160a060020a0316635e5144eb8b878f60028703861461158e576001611590565b8f5b60405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201526064810191909152608401602060405180830381600087803b15156115e457600080fd5b5af115156115f157600080fd5b50505060405180519c509499508994506002016114b1565b50929b999a50505050505050505050565b600081600160a060020a031663a5fbf28785600160405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561167157600080fd5b5af1151561167e57600080fd5b5050506040518051905015156116935761176d565b83600160a060020a031663c45d3d926040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156116d057600080fd5b5af115156116dd57600080fd5b5050506040518051915050600160a060020a03811615156116fd5761176d565b80600160a060020a0316633af32abf8460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561174b57600080fd5b5af1151561175857600080fd5b50505060405180519050151561176d57600080fd5b50505050565b8083600160a060020a031663dd62ed3e308560405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b15156117ca57600080fd5b5af115156117d757600080fd5b505050604051805190501015156117ed57611946565b82600160a060020a031663dd62ed3e308460405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561184357600080fd5b5af1151561185057600080fd5b50505060405180511590506118d35782600160a060020a031663095ea7b383600060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156118b457600080fd5b5af115156118c157600080fd5b5050506040518051905015156118d357fe5b82600160a060020a031663095ea7b3838360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561192757600080fd5b5af1151561193457600080fd5b50505060405180519050151561194657fe5b505050565b602060405190810160405260008152905600a165627a7a723058204f6b20481b8c9fb5a62ae9101cf319282a872cf90025919c686bed4661f05cbe0029000000000000000000000000d1997064f0fef8748c1de9b5ba53468c548738b3


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

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d1997064f0fef8748c1de9b5ba53468c548738b3


   Swarm Source:
bzzr://4f6b20481b8c9fb5a62ae9101cf319282a872cf90025919c686bed4661f05cbe
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.