Contract 0x818e6fecd516ecc3849daf6845e3ec868087b755

 

TxHash Block Age From To Value [TxFee]
0x75d828fbde587891e71c42c2b8f4fe8606b32ee04455f6d2ea89f06075239dce(pending)15 hrs 27 mins ago0x45af0f026c6992b060c4574d9a0058a75a8d6a47 IN 0x818e6fecd516ecc3849daf6845e3ec868087b7550.1 Ether(Pending)
0x59955a3ead4314b4caf31e6a446661fdb5de0f41a733ff29eb954b9dfd24e748(pending)15 hrs 46 mins ago0x45af0f026c6992b060c4574d9a0058a75a8d6a47 IN 0x818e6fecd516ecc3849daf6845e3ec868087b7550.1 Ether(Pending)
0x72dada112a29bc95fa996c962bd979bee8b1fd684d5cd28390d616be51f69e87(pending)3 days 16 hrs ago0xdff5c77e532db93b3418d0349dbe3d4c5fcf438e IN 0x818e6fecd516ecc3849daf6845e3ec868087b7550 Ether(Pending)
0xa4bb9dc95064b5b7670322ca4f86cc2b740372f17c4af721ea59f70db1269a00(pending)3 days 17 hrs ago0xdff5c77e532db93b3418d0349dbe3d4c5fcf438e IN 0x818e6fecd516ecc3849daf6845e3ec868087b7550 Ether(Pending)
0xc70997565df5f01c7128e8e0f6a641ba3aa808b55d82cfd96b894b12fa6cad01(pending)6 days 22 hrs ago0x42ab6506708c037d9334a3b6e0e3cec921a7ddc3 IN 0x818e6fecd516ecc3849daf6845e3ec868087b7550.001 Ether(Pending)
0x0bad300080f2aa650a311cf3b2231358bf43b402e97f8a834a764c39fd4314c4(pending)6 days 22 hrs ago0xe3c814e2fa8ccb4855cf8d134cfc2b325ab42500 IN 0x818e6fecd516ecc3849daf6845e3ec868087b7550.01 Ether(Pending)
0x8bfdc7618cc2e83de007bdb9f696eb6ab529c4d482da1b150240278b04d2e22b725099852 secs ago0x090650c4af0067e7f4894a65f6f4285b10852044 IN  KyberNetworkProxy0.669876 Ether0.001391256
0xb250db8dac7438ff88c3a2ebf7c32a6e4b4075e9a2bff0abe72c0510bc6d1ca3725096810 mins ago0x6597656a3987587fa2804dd9ee4bfb57c5e17128 IN  KyberNetworkProxy0 Ether0.0013784771
0x1850b8a3925a6f14b5d9cba44bec2558e010cca4c0a47df87f49151232917b28725095114 mins ago0x057dc43af6187a931e78a56b3293912a5b42e5ec IN  KyberNetworkProxy0.814777 Ether0.0016195458
0x20313be2f24ded18521f0f80ded976b84b8ff919e3caecf4f3aec7fa69a82aac725094416 mins ago0x505e20c0fb8252ca7ac21d54d5432eccd4f2d076 IN  KyberNetworkProxy0.017437 Ether0.00130563
0x3441e02a938a2f87dce28ff98e32e0971eb3427da086fecfee3a2613b7115a64725094217 mins ago0x4efa4eebd9aac2bb38b7014551fe885baaf2edc3 IN  KyberNetworkProxy0 Ether0.00239344
0xfad2cd554b4817a7f7e3720a05f7cfa455ffab5260b3d63ca5e8a5d9421d17a2725093621 mins ago0xf0c1609129da49fd3297e4881619b8d231e3f87c IN  KyberNetworkProxy0.017453 Ether0.00139563
0xa004abb42ca4b26bffa349d85e8b26ca04b644c71cbe81ecd9094bcd7719fdb8725093621 mins ago0x4efa4eebd9aac2bb38b7014551fe885baaf2edc3 IN  KyberNetworkProxy0.6 Ether0.00159747
0xe41092a579701f75c3ca0f8c31200e9bd9844483862f9207e1f2d4c93ab85c37725092526 mins ago0x4efa4eebd9aac2bb38b7014551fe885baaf2edc3 IN  KyberNetworkProxy2 Ether0.000882726
0x2775a18b51ad09994834b18f75702c0b215cb21bd1486806f3e4fa648c81f28b725089835 mins ago0x666d06dbe6c06eed79a1c8684f7741bfebaa3e2f IN  KyberNetworkProxy2.095 Ether0.001343766
0xaf907f0e7df027459362166de2ce52d57d82cebfe6bbc1ca59633151b4e460e2725089835 mins ago0x47ca4d64d59435f4077f1890cdfbad9ba88fc18f IN  KyberNetworkProxy0 Ether0.00277659
0xee3455c31a17dd8d8e54a3e0805701e15de3f095fb6bd5d0e14bb452ed7c83c0725089137 mins ago0x6a31e2fbac2743c86644d6b9e8f755264f07bc0f IN  KyberNetworkProxy0 Ether0.001156764
0xa57985c52f6ef54142c210a8b5f113893c64f378c6332e32462803325b8f8df5725087740 mins ago0x00ec3a1cddf26f1758c2a8fa908b84f93b9fff87 IN  KyberNetworkProxy0 Ether0.001418088
0xe15411244793a6fc23d51d0c098be3775542a65ebef67c3c3cfc2e1a74613181725087342 mins ago0xb402c375d2e46f50379870fc6655eedc8868f082 IN  KyberNetworkProxy0.006881 Ether0.001686708
0x22b81573f8a96b182b62749140bd08991caa17577ba1f7e2c54957587a6d3f8f725086445 mins ago0xe39b9e8e2b252d4c936ef16812096e3206900138 IN  KyberNetworkProxy0.0692361 Ether0.001443504
0x509fc875a847da3038753a229b9a755ae6e3e36a6c53e420eee44c685d97f6a4725083855 mins ago0x43e79a25a349dfaad9697450ff2f5d43addebf4a IN  KyberNetworkProxy0 Ether0.001524144
0x8a712ccb8e0fd42165a01de6f4dae3389dfb34cee7c74784109df4c5e381ddb4725082458 mins ago0x91d6e260a5965a3c33d5bc4bf4adcf96c449ed2e IN  KyberNetworkProxy0 Ether0.005403296
0xa7c1c3734629fc5676ec652b5959457ebeeda95716689d1a6718904af2792b9b72508121 hr 1 min ago0xd3512dce24f7c5a0cc54552ff9ab5d03b24fb2d1 IN  KyberNetworkProxy0 Ether0.00066258
0xb9bf7725cf22d397c188f3acc4662608fb48ae398d49edb73b04f0c4ab32554572508111 hr 1 min ago0x47ca4d64d59435f4077f1890cdfbad9ba88fc18f IN  KyberNetworkProxy0 Ether0.002182944
0xf5a815ecc825e6eae498fff82226c59a0c53854db4d13bc31f390bb32ad2b44772508101 hr 1 min ago0xe06acc588e9af88c93758dc418edcaf1a90b8509 IN  KyberNetworkProxy0 Ether0.001244724
[ 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
0x8bfdc7618cc2e83de007bdb9f696eb6ab529c4d482da1b150240278b04d2e22b725099852 secs ago0x818e6fecd516ecc3849daf6845e3ec868087b7550x9ae49c0d7f8f9ef4b864e004fe86ac8294e209500.669876 Ether
0x1850b8a3925a6f14b5d9cba44bec2558e010cca4c0a47df87f49151232917b28725095114 mins ago0x818e6fecd516ecc3849daf6845e3ec868087b7550x9ae49c0d7f8f9ef4b864e004fe86ac8294e209500.814777 Ether
0x20313be2f24ded18521f0f80ded976b84b8ff919e3caecf4f3aec7fa69a82aac725094416 mins ago0x818e6fecd516ecc3849daf6845e3ec868087b7550x9ae49c0d7f8f9ef4b864e004fe86ac8294e209500.017437 Ether
0xfad2cd554b4817a7f7e3720a05f7cfa455ffab5260b3d63ca5e8a5d9421d17a2725093621 mins ago0x818e6fecd516ecc3849daf6845e3ec868087b7550x9ae49c0d7f8f9ef4b864e004fe86ac8294e209500.017453 Ether
0xa004abb42ca4b26bffa349d85e8b26ca04b644c71cbe81ecd9094bcd7719fdb8725093621 mins ago0x818e6fecd516ecc3849daf6845e3ec868087b7550x9ae49c0d7f8f9ef4b864e004fe86ac8294e209500.6 Ether
0xe41092a579701f75c3ca0f8c31200e9bd9844483862f9207e1f2d4c93ab85c37725092526 mins ago0x818e6fecd516ecc3849daf6845e3ec868087b7550x9ae49c0d7f8f9ef4b864e004fe86ac8294e209502 Ether
0x2775a18b51ad09994834b18f75702c0b215cb21bd1486806f3e4fa648c81f28b725089835 mins ago0x818e6fecd516ecc3849daf6845e3ec868087b7550x9ae49c0d7f8f9ef4b864e004fe86ac8294e209502.095 Ether
0xe15411244793a6fc23d51d0c098be3775542a65ebef67c3c3cfc2e1a74613181725087342 mins ago0x818e6fecd516ecc3849daf6845e3ec868087b7550x9ae49c0d7f8f9ef4b864e004fe86ac8294e209500.006881 Ether
0x22b81573f8a96b182b62749140bd08991caa17577ba1f7e2c54957587a6d3f8f725086445 mins ago0x818e6fecd516ecc3849daf6845e3ec868087b7550x9ae49c0d7f8f9ef4b864e004fe86ac8294e209500.0692361 Ether
0x12c9f42c12680e0409fc5d5abfa72bacfd8fd8efabc250b6664221c3ef76f92f725084253 mins ago0x818e6fecd516ecc3849daf6845e3ec868087b7550x9ae49c0d7f8f9ef4b864e004fe86ac8294e209501.341684278843393304 Ether
0x12c9f42c12680e0409fc5d5abfa72bacfd8fd8efabc250b6664221c3ef76f92f725084253 mins ago0x82da82dbe384736e4dd95615d8036cc472773f5a0x818e6fecd516ecc3849daf6845e3ec868087b7551.341684278843393304 Ether
0xbd95fbcba07ef15e468d7ad3ea964103736652a587a24354006e40087fc1809d725082557 mins ago0x818e6fecd516ecc3849daf6845e3ec868087b7550x9ae49c0d7f8f9ef4b864e004fe86ac8294e209501.093433028299663325 Ether
0xbd95fbcba07ef15e468d7ad3ea964103736652a587a24354006e40087fc1809d725082557 mins ago0xbba9d567cda89d35e4e69d7ce9ea0ebacf2c1b290x818e6fecd516ecc3849daf6845e3ec868087b7551.093433028299663325 Ether
0x2d918226d969a6860db0d0fe6eea543af2c5aa4a6d43ea3c8ff237653ba56ae172508091 hr 2 mins ago0x818e6fecd516ecc3849daf6845e3ec868087b7550x9ae49c0d7f8f9ef4b864e004fe86ac8294e209500.776242330155040883 Ether
0x2d918226d969a6860db0d0fe6eea543af2c5aa4a6d43ea3c8ff237653ba56ae172508091 hr 2 mins ago0x82da82dbe384736e4dd95615d8036cc472773f5a0x818e6fecd516ecc3849daf6845e3ec868087b7550.776242330155040883 Ether
0x781cd665b9c2d3571e959925e4233eaf6faa163b02b5edb7302a084f1167151972507701 hr 16 mins ago0x818e6fecd516ecc3849daf6845e3ec868087b7550x9ae49c0d7f8f9ef4b864e004fe86ac8294e209500.791933103861173917 Ether
0x781cd665b9c2d3571e959925e4233eaf6faa163b02b5edb7302a084f1167151972507701 hr 16 mins ago0xbba9d567cda89d35e4e69d7ce9ea0ebacf2c1b290x818e6fecd516ecc3849daf6845e3ec868087b7550.791933103861173917 Ether
0x0daa954d21a7a6c4f58db61e8cc833fd64f0fba3eca2338a068868945ba907af72507661 hr 17 mins ago0x818e6fecd516ecc3849daf6845e3ec868087b7550x9ae49c0d7f8f9ef4b864e004fe86ac8294e209500.964677189156140767 Ether
0x0daa954d21a7a6c4f58db61e8cc833fd64f0fba3eca2338a068868945ba907af72507661 hr 17 mins ago0xbba9d567cda89d35e4e69d7ce9ea0ebacf2c1b290x818e6fecd516ecc3849daf6845e3ec868087b7550.964677189156140767 Ether
0x1e49e2910a92d185c0215e42f8c46994147f0893db919c85cb849929993c1b3672507641 hr 18 mins ago0x818e6fecd516ecc3849daf6845e3ec868087b7550x9ae49c0d7f8f9ef4b864e004fe86ac8294e209503.4996355600482304 Ether
0x1e49e2910a92d185c0215e42f8c46994147f0893db919c85cb849929993c1b3672507641 hr 18 mins ago0x4d3e899f5a0b433811284bc81ef105dc51d54bf30x818e6fecd516ecc3849daf6845e3ec868087b7553.4996355600482304 Ether
0xa6a2b5a603f9588d0da23470111ac5845e6bc0d86b9365e6eddeadfa0ba3b72072507611 hr 19 mins ago0x818e6fecd516ecc3849daf6845e3ec868087b7550x9ae49c0d7f8f9ef4b864e004fe86ac8294e209500.964677189156140767 Ether
0xa6a2b5a603f9588d0da23470111ac5845e6bc0d86b9365e6eddeadfa0ba3b72072507611 hr 19 mins ago0xbba9d567cda89d35e4e69d7ce9ea0ebacf2c1b290x818e6fecd516ecc3849daf6845e3ec868087b7550.964677189156140767 Ether
0xe5c7ed8593c49550083a80a0cb7a61737803ab94ded75f47b76a2672cc5077da72507581 hr 20 mins ago0x818e6fecd516ecc3849daf6845e3ec868087b7550x9ae49c0d7f8f9ef4b864e004fe86ac8294e209505.9993752457969664 Ether
0xe5c7ed8593c49550083a80a0cb7a61737803ab94ded75f47b76a2672cc5077da72507581 hr 20 mins ago0x4d3e899f5a0b433811284bc81ef105dc51d54bf30x818e6fecd516ecc3849daf6845e3ec868087b7555.9993752457969664 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 (Similar Match)
Note: This contract matches the deployed ByteCode of the Verified Source Code for Contract 0xC14f34233071543E979F6A79AA272b0AB1B4947D
Contract Name: KyberNetworkProxy
Compiler Version: v0.4.18+commit.9cf6e910
Optimization Enabled: Yes
Runs (Optimizer):  200


Contract Source Code
pragma solidity 0.4.18;

// File: contracts/ERC20Interface.sol

// https://github.com/ethereum/EIPs/issues/20
interface ERC20 {
    function totalSupply() public view returns (uint supply);
    function balanceOf(address _owner) public view returns (uint balance);
    function transfer(address _to, uint _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint _value) public returns (bool success);
    function approve(address _spender, uint _value) public returns (bool success);
    function allowance(address _owner, address _spender) public view returns (uint remaining);
    function decimals() public view returns(uint digits);
    event Approval(address indexed _owner, address indexed _spender, uint _value);
}

// File: contracts/KyberNetworkInterface.sol

/// @title Kyber Network interface
interface KyberNetworkInterface {
    function maxGasPrice() public view returns(uint);
    function getUserCapInWei(address user) public view returns(uint);
    function getUserCapInTokenWei(address user, ERC20 token) public view returns(uint);
    function enabled() public view returns(bool);
    function info(bytes32 id) public view returns(uint);

    function getExpectedRate(ERC20 src, ERC20 dest, uint srcQty) public view
        returns (uint expectedRate, uint slippageRate);

    function tradeWithHint(address trader, ERC20 src, uint srcAmount, ERC20 dest, address destAddress,
        uint maxDestAmount, uint minConversionRate, address walletId, bytes hint) public payable returns(uint);
}

// File: contracts/KyberNetworkProxyInterface.sol

/// @title Kyber Network interface
interface KyberNetworkProxyInterface {
    function maxGasPrice() public view returns(uint);
    function getUserCapInWei(address user) public view returns(uint);
    function getUserCapInTokenWei(address user, ERC20 token) public view returns(uint);
    function enabled() public view returns(bool);
    function info(bytes32 id) public view returns(uint);

    function getExpectedRate(ERC20 src, ERC20 dest, uint srcQty) public view
        returns (uint expectedRate, uint slippageRate);

    function tradeWithHint(ERC20 src, uint srcAmount, ERC20 dest, address destAddress, uint maxDestAmount,
        uint minConversionRate, address walletId, bytes hint) public payable returns(uint);
}

// File: contracts/SimpleNetworkInterface.sol

/// @title simple interface for Kyber Network 
interface SimpleNetworkInterface {
    function swapTokenToToken(ERC20 src, uint srcAmount, ERC20 dest, uint minConversionRate) public returns(uint);
    function swapEtherToToken(ERC20 token, uint minConversionRate) public payable returns(uint);
    function swapTokenToEther(ERC20 token, uint srcAmount, uint minConversionRate) public returns(uint);
}

// File: contracts/Utils.sol

/// @title Kyber constants contract
contract Utils {

    ERC20 constant internal ETH_TOKEN_ADDRESS = ERC20(0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee);
    uint  constant internal PRECISION = (10**18);
    uint  constant internal MAX_QTY   = (10**28); // 10B tokens
    uint  constant internal MAX_RATE  = (PRECISION * 10**6); // up to 1M tokens per ETH
    uint  constant internal MAX_DECIMALS = 18;
    uint  constant internal ETH_DECIMALS = 18;
    mapping(address=>uint) internal decimals;

    function setDecimals(ERC20 token) internal {
        if (token == ETH_TOKEN_ADDRESS) decimals[token] = ETH_DECIMALS;
        else decimals[token] = token.decimals();
    }

    function getDecimals(ERC20 token) internal view returns(uint) {
        if (token == ETH_TOKEN_ADDRESS) return ETH_DECIMALS; // save storage access
        uint tokenDecimals = decimals[token];
        // technically, there might be token with decimals 0
        // moreover, very possible that old tokens have decimals 0
        // these tokens will just have higher gas fees.
        if(tokenDecimals == 0) return token.decimals();

        return tokenDecimals;
    }

    function calcDstQty(uint srcQty, uint srcDecimals, uint dstDecimals, uint rate) internal pure returns(uint) {
        require(srcQty <= MAX_QTY);
        require(rate <= MAX_RATE);

        if (dstDecimals >= srcDecimals) {
            require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
            return (srcQty * rate * (10**(dstDecimals - srcDecimals))) / PRECISION;
        } else {
            require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
            return (srcQty * rate) / (PRECISION * (10**(srcDecimals - dstDecimals)));
        }
    }

    function calcSrcQty(uint dstQty, uint srcDecimals, uint dstDecimals, uint rate) internal pure returns(uint) {
        require(dstQty <= MAX_QTY);
        require(rate <= MAX_RATE);
        
        //source quantity is rounded up. to avoid dest quantity being too low.
        uint numerator;
        uint denominator;
        if (srcDecimals >= dstDecimals) {
            require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
            numerator = (PRECISION * dstQty * (10**(srcDecimals - dstDecimals)));
            denominator = rate;
        } else {
            require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
            numerator = (PRECISION * dstQty);
            denominator = (rate * (10**(dstDecimals - srcDecimals)));
        }
        return (numerator + denominator - 1) / denominator; //avoid rounding down errors
    }
}

// File: contracts/Utils2.sol

contract Utils2 is Utils {

    /// @dev get the balance of a user.
    /// @param token The token type
    /// @return The balance
    function getBalance(ERC20 token, address user) public view returns(uint) {
        if (token == ETH_TOKEN_ADDRESS)
            return user.balance;
        else
            return token.balanceOf(user);
    }

    function getDecimalsSafe(ERC20 token) internal returns(uint) {

        if (decimals[token] == 0) {
            setDecimals(token);
        }

        return decimals[token];
    }

    function calcDestAmount(ERC20 src, ERC20 dest, uint srcAmount, uint rate) internal view returns(uint) {
        return calcDstQty(srcAmount, getDecimals(src), getDecimals(dest), rate);
    }

    function calcSrcAmount(ERC20 src, ERC20 dest, uint destAmount, uint rate) internal view returns(uint) {
        return calcSrcQty(destAmount, getDecimals(src), getDecimals(dest), rate);
    }

    function calcRateFromQty(uint srcAmount, uint destAmount, uint srcDecimals, uint dstDecimals)
        internal pure returns(uint)
    {
        require(srcAmount <= MAX_QTY);
        require(destAmount <= MAX_QTY);

        if (dstDecimals >= srcDecimals) {
            require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
            return (destAmount * PRECISION / ((10 ** (dstDecimals - srcDecimals)) * srcAmount));
        } else {
            require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
            return (destAmount * PRECISION * (10 ** (srcDecimals - dstDecimals)) / srcAmount);
        }
    }
}

// File: contracts/PermissionGroups.sol

contract PermissionGroups {

    address public admin;
    address public pendingAdmin;
    mapping(address=>bool) internal operators;
    mapping(address=>bool) internal alerters;
    address[] internal operatorsGroup;
    address[] internal alertersGroup;
    uint constant internal MAX_GROUP_SIZE = 50;

    function PermissionGroups() public {
        admin = msg.sender;
    }

    modifier onlyAdmin() {
        require(msg.sender == admin);
        _;
    }

    modifier onlyOperator() {
        require(operators[msg.sender]);
        _;
    }

    modifier onlyAlerter() {
        require(alerters[msg.sender]);
        _;
    }

    function getOperators () external view returns(address[]) {
        return operatorsGroup;
    }

    function getAlerters () external view returns(address[]) {
        return alertersGroup;
    }

    event TransferAdminPending(address pendingAdmin);

    /**
     * @dev Allows the current admin to set the pendingAdmin address.
     * @param newAdmin The address to transfer ownership to.
     */
    function transferAdmin(address newAdmin) public onlyAdmin {
        require(newAdmin != address(0));
        TransferAdminPending(pendingAdmin);
        pendingAdmin = newAdmin;
    }

    /**
     * @dev Allows the current admin to set the admin in one tx. Useful initial deployment.
     * @param newAdmin The address to transfer ownership to.
     */
    function transferAdminQuickly(address newAdmin) public onlyAdmin {
        require(newAdmin != address(0));
        TransferAdminPending(newAdmin);
        AdminClaimed(newAdmin, admin);
        admin = newAdmin;
    }

    event AdminClaimed( address newAdmin, address previousAdmin);

    /**
     * @dev Allows the pendingAdmin address to finalize the change admin process.
     */
    function claimAdmin() public {
        require(pendingAdmin == msg.sender);
        AdminClaimed(pendingAdmin, admin);
        admin = pendingAdmin;
        pendingAdmin = address(0);
    }

    event AlerterAdded (address newAlerter, bool isAdd);

    function addAlerter(address newAlerter) public onlyAdmin {
        require(!alerters[newAlerter]); // prevent duplicates.
        require(alertersGroup.length < MAX_GROUP_SIZE);

        AlerterAdded(newAlerter, true);
        alerters[newAlerter] = true;
        alertersGroup.push(newAlerter);
    }

    function removeAlerter (address alerter) public onlyAdmin {
        require(alerters[alerter]);
        alerters[alerter] = false;

        for (uint i = 0; i < alertersGroup.length; ++i) {
            if (alertersGroup[i] == alerter) {
                alertersGroup[i] = alertersGroup[alertersGroup.length - 1];
                alertersGroup.length--;
                AlerterAdded(alerter, false);
                break;
            }
        }
    }

    event OperatorAdded(address newOperator, bool isAdd);

    function addOperator(address newOperator) public onlyAdmin {
        require(!operators[newOperator]); // prevent duplicates.
        require(operatorsGroup.length < MAX_GROUP_SIZE);

        OperatorAdded(newOperator, true);
        operators[newOperator] = true;
        operatorsGroup.push(newOperator);
    }

    function removeOperator (address operator) public onlyAdmin {
        require(operators[operator]);
        operators[operator] = false;

        for (uint i = 0; i < operatorsGroup.length; ++i) {
            if (operatorsGroup[i] == operator) {
                operatorsGroup[i] = operatorsGroup[operatorsGroup.length - 1];
                operatorsGroup.length -= 1;
                OperatorAdded(operator, false);
                break;
            }
        }
    }
}

// File: contracts/Withdrawable.sol

/**
 * @title Contracts that should be able to recover tokens or ethers
 * @author Ilan Doron
 * @dev This allows to recover any tokens or Ethers received in a contract.
 * This will prevent any accidental loss of tokens.
 */
contract Withdrawable is PermissionGroups {

    event TokenWithdraw(ERC20 token, uint amount, address sendTo);

    /**
     * @dev Withdraw all ERC20 compatible tokens
     * @param token ERC20 The address of the token contract
     */
    function withdrawToken(ERC20 token, uint amount, address sendTo) external onlyAdmin {
        require(token.transfer(sendTo, amount));
        TokenWithdraw(token, amount, sendTo);
    }

    event EtherWithdraw(uint amount, address sendTo);

    /**
     * @dev Withdraw Ethers
     */
    function withdrawEther(uint amount, address sendTo) external onlyAdmin {
        sendTo.transfer(amount);
        EtherWithdraw(amount, sendTo);
    }
}

// File: contracts/KyberNetworkProxy.sol

////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @title Kyber Network proxy for main contract
contract KyberNetworkProxy is KyberNetworkProxyInterface, SimpleNetworkInterface, Withdrawable, Utils2 {

    KyberNetworkInterface public kyberNetworkContract;

    function KyberNetworkProxy(address _admin) public {
        require(_admin != address(0));
        admin = _admin;
    }

    /// @notice use token address ETH_TOKEN_ADDRESS for ether
    /// @dev makes a trade between src and dest token and send dest token to destAddress
    /// @param src Src token
    /// @param srcAmount amount of src tokens
    /// @param dest   Destination token
    /// @param destAddress Address to send tokens to
    /// @param maxDestAmount A limit on the amount of dest tokens
    /// @param minConversionRate The minimal conversion rate. If actual rate is lower, trade is canceled.
    /// @param walletId is the wallet ID to send part of the fees
    /// @return amount of actual dest tokens
    function trade(
        ERC20 src,
        uint srcAmount,
        ERC20 dest,
        address destAddress,
        uint maxDestAmount,
        uint minConversionRate,
        address walletId
    )
        public
        payable
        returns(uint)
    {
        bytes memory hint;

        return tradeWithHint(
            src,
            srcAmount,
            dest,
            destAddress,
            maxDestAmount,
            minConversionRate,
            walletId,
            hint
        );
    }

    /// @dev makes a trade between src and dest token and send dest tokens to msg sender
    /// @param src Src token
    /// @param srcAmount amount of src tokens
    /// @param dest Destination token
    /// @param minConversionRate The minimal conversion rate. If actual rate is lower, trade is canceled.
    /// @return amount of actual dest tokens
    function swapTokenToToken(
        ERC20 src,
        uint srcAmount,
        ERC20 dest,
        uint minConversionRate
    )
        public
        returns(uint)
    {
        bytes memory hint;

        return tradeWithHint(
            src,
            srcAmount,
            dest,
            msg.sender,
            MAX_QTY,
            minConversionRate,
            0,
            hint
        );
    }

    /// @dev makes a trade from Ether to token. Sends token to msg sender
    /// @param token Destination token
    /// @param minConversionRate The minimal conversion rate. If actual rate is lower, trade is canceled.
    /// @return amount of actual dest tokens
    function swapEtherToToken(ERC20 token, uint minConversionRate) public payable returns(uint) {
        bytes memory hint;

        return tradeWithHint(
            ETH_TOKEN_ADDRESS,
            msg.value,
            token,
            msg.sender,
            MAX_QTY,
            minConversionRate,
            0,
            hint
        );
    }

    /// @dev makes a trade from token to Ether, sends Ether to msg sender
    /// @param token Src token
    /// @param srcAmount amount of src tokens
    /// @param minConversionRate The minimal conversion rate. If actual rate is lower, trade is canceled.
    /// @return amount of actual dest tokens
    function swapTokenToEther(ERC20 token, uint srcAmount, uint minConversionRate) public returns(uint) {
        bytes memory hint;

        return tradeWithHint(
            token,
            srcAmount,
            ETH_TOKEN_ADDRESS,
            msg.sender,
            MAX_QTY,
            minConversionRate,
            0,
            hint
        );
    }

    struct UserBalance {
        uint srcBalance;
        uint destBalance;
    }

    event ExecuteTrade(address indexed trader, ERC20 src, ERC20 dest, uint actualSrcAmount, uint actualDestAmount);

    /// @notice use token address ETH_TOKEN_ADDRESS for ether
    /// @dev makes a trade between src and dest token and send dest token to destAddress
    /// @param src Src token
    /// @param srcAmount amount of src tokens
    /// @param dest Destination token
    /// @param destAddress Address to send tokens to
    /// @param maxDestAmount A limit on the amount of dest tokens
    /// @param minConversionRate The minimal conversion rate. If actual rate is lower, trade is canceled.
    /// @param walletId is the wallet ID to send part of the fees
    /// @param hint will give hints for the trade.
    /// @return amount of actual dest tokens
    function tradeWithHint(
        ERC20 src,
        uint srcAmount,
        ERC20 dest,
        address destAddress,
        uint maxDestAmount,
        uint minConversionRate,
        address walletId,
        bytes hint
    )
        public
        payable
        returns(uint)
    {
        require(src == ETH_TOKEN_ADDRESS || msg.value == 0);
        
        UserBalance memory userBalanceBefore;

        userBalanceBefore.srcBalance = getBalance(src, msg.sender);
        userBalanceBefore.destBalance = getBalance(dest, destAddress);

        if (src == ETH_TOKEN_ADDRESS) {
            userBalanceBefore.srcBalance += msg.value;
        } else {
            require(src.transferFrom(msg.sender, kyberNetworkContract, srcAmount));
        }

        uint reportedDestAmount = kyberNetworkContract.tradeWithHint.value(msg.value)(
            msg.sender,
            src,
            srcAmount,
            dest,
            destAddress,
            maxDestAmount,
            minConversionRate,
            walletId,
            hint
        );

        TradeOutcome memory tradeOutcome = calculateTradeOutcome(
            userBalanceBefore.srcBalance,
            userBalanceBefore.destBalance,
            src,
            dest,
            destAddress
        );

        require(reportedDestAmount == tradeOutcome.userDeltaDestAmount);
        require(tradeOutcome.userDeltaDestAmount <= maxDestAmount);
        require(tradeOutcome.actualRate >= minConversionRate);

        ExecuteTrade(msg.sender, src, dest, tradeOutcome.userDeltaSrcAmount, tradeOutcome.userDeltaDestAmount);
        return tradeOutcome.userDeltaDestAmount;
    }

    event KyberNetworkSet(address newNetworkContract, address oldNetworkContract);

    function setKyberNetworkContract(KyberNetworkInterface _kyberNetworkContract) public onlyAdmin {

        require(_kyberNetworkContract != address(0));

        KyberNetworkSet(_kyberNetworkContract, kyberNetworkContract);

        kyberNetworkContract = _kyberNetworkContract;
    }

    function getExpectedRate(ERC20 src, ERC20 dest, uint srcQty)
        public view
        returns(uint expectedRate, uint slippageRate)
    {
        return kyberNetworkContract.getExpectedRate(src, dest, srcQty);
    }

    function getUserCapInWei(address user) public view returns(uint) {
        return kyberNetworkContract.getUserCapInWei(user);
    }

    function getUserCapInTokenWei(address user, ERC20 token) public view returns(uint) {
        return kyberNetworkContract.getUserCapInTokenWei(user, token);
    }

    function maxGasPrice() public view returns(uint) {
        return kyberNetworkContract.maxGasPrice();
    }

    function enabled() public view returns(bool) {
        return kyberNetworkContract.enabled();
    }

    function info(bytes32 field) public view returns(uint) {
        return kyberNetworkContract.info(field);
    }

    struct TradeOutcome {
        uint userDeltaSrcAmount;
        uint userDeltaDestAmount;
        uint actualRate;
    }

    function calculateTradeOutcome (uint srcBalanceBefore, uint destBalanceBefore, ERC20 src, ERC20 dest,
        address destAddress)
        internal returns(TradeOutcome outcome)
    {
        uint userSrcBalanceAfter;
        uint userDestBalanceAfter;

        userSrcBalanceAfter = getBalance(src, msg.sender);
        userDestBalanceAfter = getBalance(dest, destAddress);

        //protect from underflow
        require(userDestBalanceAfter > destBalanceBefore);
        require(srcBalanceBefore > userSrcBalanceAfter);

        outcome.userDeltaDestAmount = userDestBalanceAfter - destBalanceBefore;
        outcome.userDeltaSrcAmount = srcBalanceBefore - userSrcBalanceAfter;

        outcome.actualRate = calcRateFromQty(
                outcome.userDeltaSrcAmount,
                outcome.userDeltaDestAmount,
                getDecimalsSafe(src),
                getDecimalsSafe(dest)
            );
    }
}

Contract ABI
[{"constant":false,"inputs":[{"name":"alerter","type":"address"}],"name":"removeAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"enabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOperators","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"src","type":"address"},{"name":"srcAmount","type":"uint256"},{"name":"dest","type":"address"},{"name":"destAddress","type":"address"},{"name":"maxDestAmount","type":"uint256"},{"name":"minConversionRate","type":"uint256"},{"name":"walletId","type":"address"},{"name":"hint","type":"bytes"}],"name":"tradeWithHint","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"srcAmount","type":"uint256"},{"name":"minConversionRate","type":"uint256"}],"name":"swapTokenToEther","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"sendTo","type":"address"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxGasPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAlerter","type":"address"}],"name":"addAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kyberNetworkContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"getUserCapInWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"src","type":"address"},{"name":"srcAmount","type":"uint256"},{"name":"dest","type":"address"},{"name":"minConversionRate","type":"uint256"}],"name":"swapTokenToToken","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"transferAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"minConversionRate","type":"uint256"}],"name":"swapEtherToToken","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"transferAdminQuickly","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAlerters","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"srcQty","type":"uint256"}],"name":"getExpectedRate","outputs":[{"name":"expectedRate","type":"uint256"},{"name":"slippageRate","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"token","type":"address"}],"name":"getUserCapInTokenWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOperator","type":"address"}],"name":"addOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kyberNetworkContract","type":"address"}],"name":"setKyberNetworkContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"field","type":"bytes32"}],"name":"info","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"src","type":"address"},{"name":"srcAmount","type":"uint256"},{"name":"dest","type":"address"},{"name":"destAddress","type":"address"},{"name":"maxDestAmount","type":"uint256"},{"name":"minConversionRate","type":"uint256"},{"name":"walletId","type":"address"}],"name":"trade","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"sendTo","type":"address"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"},{"name":"user","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_admin","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"trader","type":"address"},{"indexed":false,"name":"src","type":"address"},{"indexed":false,"name":"dest","type":"address"},{"indexed":false,"name":"actualSrcAmount","type":"uint256"},{"indexed":false,"name":"actualDestAmount","type":"uint256"}],"name":"ExecuteTrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newNetworkContract","type":"address"},{"indexed":false,"name":"oldNetworkContract","type":"address"}],"name":"KyberNetworkSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"sendTo","type":"address"}],"name":"TokenWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"sendTo","type":"address"}],"name":"EtherWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"pendingAdmin","type":"address"}],"name":"TransferAdminPending","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAdmin","type":"address"},{"indexed":false,"name":"previousAdmin","type":"address"}],"name":"AdminClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAlerter","type":"address"},{"indexed":false,"name":"isAdd","type":"bool"}],"name":"AlerterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOperator","type":"address"},{"indexed":false,"name":"isAdd","type":"bool"}],"name":"OperatorAdded","type":"event"}]

Contract Creation Code
6060604052341561000f57600080fd5b604051602080611a048339810160405280805160008054600160a060020a03191633600160a060020a039081169190911790915590925082161515905061005557600080fd5b60008054600160a060020a03909216600160a060020a031990921691909117905561197f806100856000396000f3006060604052600436106101455763ffffffff60e060020a60003504166301a12fd3811461014a578063238dafe01461016b578063267822471461019257806327a099d8146101c157806329589f61146102275780633bba21dc146102ad5780633ccdbb28146102d25780633de39c11146102fb578063408ee7fe1461030e5780634f61ff8b1461032d5780636432679f146103405780637409e2eb1461035f57806375829def1461038b57806377f50f97146103aa5780637a2a0456146103bd5780637acc8678146103d45780637c423f54146103f3578063809a9e55146104065780638eaaeecf146104465780639870d7fe1461046b578063abd188a81461048a578063ac8a584a146104a9578063b64a097e146104c8578063cb3c28c7146104de578063ce56c45414610510578063d4fac45d14610532578063f851a44014610557575b600080fd5b341561015557600080fd5b610169600160a060020a036004351661056a565b005b341561017657600080fd5b61017e6106da565b604051901515815260200160405180910390f35b341561019d57600080fd5b6101a5610744565b604051600160a060020a03909116815260200160405180910390f35b34156101cc57600080fd5b6101d4610753565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156102135780820151838201526020016101fb565b505050509050019250505060405180910390f35b61029b600160a060020a036004803582169160248035926044358316926064358116926084359260a4359260c43516916101049060e43590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506107bb95505050505050565b60405190815260200160405180910390f35b34156102b857600080fd5b61029b600160a060020a0360043516602435604435610ad9565b34156102dd57600080fd5b610169600160a060020a036004358116906024359060443516610b1d565b341561030657600080fd5b61029b610c14565b341561031957600080fd5b610169600160a060020a0360043516610c5e565b341561033857600080fd5b6101a5610d5a565b341561034b57600080fd5b61029b600160a060020a0360043516610d69565b341561036a57600080fd5b61029b600160a060020a036004358116906024359060443516606435610de4565b341561039657600080fd5b610169600160a060020a0360043516610e15565b34156103b557600080fd5b610169610eb0565b61029b600160a060020a0360043516602435610f4a565b34156103df57600080fd5b610169600160a060020a0360043516610f8d565b34156103fe57600080fd5b6101d461106f565b341561041157600080fd5b61042e600160a060020a03600435811690602435166044356110d5565b60405191825260208201526040908101905180910390f35b341561045157600080fd5b61029b600160a060020a0360043581169060243516611171565b341561047657600080fd5b610169600160a060020a03600435166111f7565b341561049557600080fd5b610169600160a060020a03600435166112c7565b34156104b457600080fd5b610169600160a060020a036004351661136c565b34156104d357600080fd5b61029b6004356114d8565b61029b600160a060020a03600435811690602435906044358116906064358116906084359060a4359060c4351661152b565b341561051b57600080fd5b610169600435600160a060020a0360243516611552565b341561053d57600080fd5b61029b600160a060020a03600435811690602435166115e5565b341561056257600080fd5b6101a5611696565b6000805433600160a060020a0390811691161461058657600080fd5b600160a060020a03821660009081526003602052604090205460ff1615156105ad57600080fd5b50600160a060020a0381166000908152600360205260408120805460ff191690555b6005548110156106d65781600160a060020a03166005828154811015156105f257fe5b600091825260209091200154600160a060020a031614156106ce5760058054600019810190811061061f57fe5b60009182526020909120015460058054600160a060020a03909216918390811061064557fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560058054906106819060001983016118c1565b507f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762826000604051600160a060020a039092168252151560208201526040908101905180910390a16106d6565b6001016105cf565b5050565b600754600090600160a060020a031663238dafe082604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561072457600080fd5b6102c65a03f1151561073557600080fd5b50505060405180519150505b90565b600154600160a060020a031681565b61075b6118ea565b60048054806020026020016040519081016040528092919081815260200182805480156107b157602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610793575b5050505050905090565b60006107c56118fc565b60006107cf611913565b600160a060020a038c1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14806107f8575034155b151561080357600080fd5b61080d8c336115e5565b83526108198a8a6115e5565b6020840152600160a060020a038c1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610851573483818151019052506108e8565b600754600160a060020a03808e16916323b872dd913391168e60006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156108c257600080fd5b6102c65a03f115156108d357600080fd5b5050506040518051905015156108e857600080fd5b600754600160a060020a031663088322ef34338f8f8f8f8f8f8f8f60006040516020015260405160e060020a63ffffffff8d16028152600160a060020a03808b16600483019081528a82166024840152604483018a90528882166064840152878216608484015260a4830187905260c4830186905290841660e4830152610120610104830190815290916101240183818151815260200191508051906020019080838360005b838110156109a657808201518382015260200161098e565b50505050905090810190601f1680156109d35780820380516001836020036101000a031916815260200191505b509a50505050505050505050506020604051808303818588803b15156109f857600080fd5b6125ee5a03f11515610a0957600080fd5b5050505060405180519250610a289050835184602001518e8d8d6116a5565b905080602001518214610a3a57600080fd5b8781602001511115610a4b57600080fd5b8681604001511015610a5c57600080fd5b600160a060020a0333167f1849bd6a030a1bca28b83437fd3de96f3d27a5d172fa7e9c78e7b61468928a398d8c84518560200151604051600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a280602001519c9b505050505050505050505050565b6000610ae36118ea565b610b14858573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee336b204fce5e3e25026110000000886000886107bb565b95945050505050565b60005433600160a060020a03908116911614610b3857600080fd5b82600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610b9557600080fd5b6102c65a03f11515610ba657600080fd5b505050604051805190501515610bbb57600080fd5b7f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e6838383604051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a1505050565b600754600090600160a060020a0316633de39c1182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561072457600080fd5b60005433600160a060020a03908116911614610c7957600080fd5b600160a060020a03811660009081526003602052604090205460ff1615610c9f57600080fd5b60055460329010610caf57600080fd5b7f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600360205260409020805460ff191660019081179091556005805490918101610d2e83826118c1565b5060009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055565b600754600160a060020a031681565b600754600090600160a060020a0316636432679f83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610dc457600080fd5b6102c65a03f11515610dd557600080fd5b50505060405180519392505050565b6000610dee6118ea565b610e0b868686336b204fce5e3e25026110000000886000886107bb565b9695505050505050565b60005433600160a060020a03908116911614610e3057600080fd5b600160a060020a0381161515610e4557600080fd5b6001547f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4090600160a060020a0316604051600160a060020a03909116815260200160405180910390a160018054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a03908116911614610ecb57600080fd5b6001546000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed91600160a060020a039081169116604051600160a060020a039283168152911660208201526040908101905180910390a16001805460008054600160a060020a0319908116600160a060020a03841617909155169055565b6000610f546118ea565b610f8573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee3486336b204fce5e3e25026110000000886000886107bb565b949350505050565b60005433600160a060020a03908116911614610fa857600080fd5b600160a060020a0381161515610fbd57600080fd5b7f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4081604051600160a060020a03909116815260200160405180910390a16000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed908290600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a160008054600160a060020a031916600160a060020a0392909216919091179055565b6110776118ea565b60058054806020026020016040519081016040528092919081815260200182805480156107b157602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610793575050505050905090565b6007546000908190600160a060020a031663809a9e55868686856040516040015260405160e060020a63ffffffff8616028152600160a060020a03938416600482015291909216602482015260448101919091526064016040805180830381600087803b151561114457600080fd5b6102c65a03f1151561115557600080fd5b5050506040518051906020018051905091509150935093915050565b600754600090600160a060020a0316638eaaeecf8484846040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b15156111d457600080fd5b6102c65a03f115156111e557600080fd5b50505060405180519150505b92915050565b60005433600160a060020a0390811691161461121257600080fd5b600160a060020a03811660009081526002602052604090205460ff161561123857600080fd5b6004546032901061124857600080fd5b7f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600260205260409020805460ff191660019081179091556004805490918101610d2e83826118c1565b60005433600160a060020a039081169116146112e257600080fd5b600160a060020a03811615156112f757600080fd5b6007547f8936e1f096bf0a8c9df862b3d1d5b82774cad78116200175f00b5b7ba3010b02908290600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a160078054600160a060020a031916600160a060020a0392909216919091179055565b6000805433600160a060020a0390811691161461138857600080fd5b600160a060020a03821660009081526002602052604090205460ff1615156113af57600080fd5b50600160a060020a0381166000908152600260205260408120805460ff191690555b6004548110156106d65781600160a060020a03166004828154811015156113f457fe5b600091825260209091200154600160a060020a031614156114d05760048054600019810190811061142157fe5b60009182526020909120015460048054600160a060020a03909216918390811061144757fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560048054600019019061148390826118c1565b507f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b826000604051600160a060020a039092168252151560208201526040908101905180910390a16106d6565b6001016113d1565b600754600090600160a060020a031663b64a097e83836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610dc457600080fd5b60006115356118ea565b61154589898989898989886107bb565b9998505050505050505050565b60005433600160a060020a0390811691161461156d57600080fd5b600160a060020a03811682156108fc0283604051600060405180830381858888f19350505050151561159e57600080fd5b7fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de8282604051918252600160a060020a031660208201526040908101905180910390a15050565b6000600160a060020a03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561161d5750600160a060020a038116316111f1565b82600160a060020a03166370a082318360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561167457600080fd5b6102c65a03f1151561168557600080fd5b5050506040518051905090506111f1565b600054600160a060020a031681565b6116ad611913565b6000806116ba86336115e5565b91506116c685856115e5565b90508681116116d457600080fd5b8188116116e057600080fd5b8681036020840152818803835261170e835184602001516117008961171f565b6117098961171f565b611763565b604084015250909695505050505050565b600160a060020a038116600090815260066020526040812054151561174757611747826117fe565b50600160a060020a031660009081526006602052604090205490565b60006b204fce5e3e2502611000000085111561177e57600080fd5b6b204fce5e3e2502611000000084111561179757600080fd5b8282106117d257601283830311156117ae57600080fd5b84838303600a0a02670de0b6b3a764000085028115156117ca57fe5b049050610f85565b601282840311156117e257600080fd5b84828403600a0a670de0b6b3a76400008602028115156117ca57fe5b600160a060020a03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561184457600160a060020a0381166000908152600660205260409020601290556118be565b80600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561188a57600080fd5b6102c65a03f1151561189b57600080fd5b5050506040518051600160a060020a038316600090815260066020526040902055505b50565b8154818355818115116118e5576000838152602090206118e5918101908301611935565b505050565b60206040519081016040526000815290565b604080519081016040526000808252602082015290565b6060604051908101604052806000815260200160008152602001600081525090565b61074191905b8082111561194f576000815560010161193b565b50905600a165627a7a72305820ae71dd6239f7d143bf7d308b1a1ca8ad767ca7ae5966d3c0dd1f98a64bd45b2f002900000000000000000000000043bd4ed7ca01a5feebe0e1a3e34d4523aaef0b50


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