ETH Price: $2,362.38 (-5.34%)

Contract

0x141104687b51985D6210Eb4b398F1DC5b5b9e9F5
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Token106473192020-08-12 20:29:491659 days ago1597264189IN
Kyber: Reserve RSV
0 ETH0.01386192275
Withdraw Ether106473142020-08-12 20:28:551659 days ago1597264135IN
Kyber: Reserve RSV
0 ETH0.00889157275
Set Contracts105894572020-08-03 22:11:391668 days ago1596492699IN
Kyber: Reserve RSV
0 ETH0.0013217538
Enable Trade105828882020-08-02 21:48:011669 days ago1596404881IN
Kyber: Reserve RSV
0 ETH0.0011926941
Transfer105501682020-07-28 20:26:451674 days ago1595968005IN
Kyber: Reserve RSV
32.5 ETH0.0012141354
Approve Withdraw...105457052020-07-28 4:00:521674 days ago1595908852IN
Kyber: Reserve RSV
0 ETH0.0077145774
Transfer105455782020-07-28 3:31:311674 days ago1595907091IN
Kyber: Reserve RSV
12 ETH0.0016188472
Transfer105455452020-07-28 3:23:571674 days ago1595906637IN
Kyber: Reserve RSV
12 ETH0.00151272
Transfer105438922020-07-27 21:22:521675 days ago1595884972IN
Kyber: Reserve RSV
25.5 ETH0.001124250
Set Contracts105255242020-07-25 0:42:451678 days ago1595637765IN
Kyber: Reserve RSV
0 ETH0.0018087152
Set Contracts105249242020-07-24 22:25:561678 days ago1595629556IN
Kyber: Reserve RSV
0 ETH0.0021565462
Withdraw Ether104979142020-07-20 18:16:431682 days ago1595269003IN
Kyber: Reserve RSV
0 ETH0.0022956471
Withdraw Token104978882020-07-20 18:11:501682 days ago1595268710IN
Kyber: Reserve RSV
0 ETH0.0018308275
Withdraw Token104978732020-07-20 18:09:071682 days ago1595268547IN
Kyber: Reserve RSV
0 ETH0.0045815770
Approve Withdraw...104978672020-07-20 18:06:451682 days ago1595268405IN
Kyber: Reserve RSV
0 ETH0.0033905970
Approve Withdraw...104978302020-07-20 17:59:371682 days ago1595267977IN
Kyber: Reserve RSV
0 ETH0.0035690971
Disable Trade104977972020-07-20 17:52:361682 days ago1595267556IN
Kyber: Reserve RSV
0 ETH0.002232576
Set Contracts104105522020-07-07 6:04:561695 days ago1594101896IN
Kyber: Reserve RSV
0 ETH0.0012874137
Enable Trade103258792020-06-24 2:51:201708 days ago1592967080IN
Kyber: Reserve RSV
0 ETH0.001163640
Disable Trade103257852020-06-24 2:28:111708 days ago1592965691IN
Kyber: Reserve RSV
0 ETH0.0011162538
Add Alerter103257842020-06-24 2:27:561708 days ago1592965676IN
Kyber: Reserve RSV
0 ETH0.0028428538
Add Alerter103257722020-06-24 2:24:331709 days ago1592965473IN
Kyber: Reserve RSV
0 ETH0.0020440
Disable Trade103256832020-06-24 2:06:171709 days ago1592964377IN
Kyber: Reserve RSV
0 ETH0.0004254420
Set Contracts98353812020-04-09 2:41:181784 days ago1586400078IN
Kyber: Reserve RSV
0 ETH0.000278268
Withdraw98206292020-04-06 20:26:331787 days ago1586204793IN
Kyber: Reserve RSV
0 ETH0.000538978
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
106473142020-08-12 20:28:551659 days ago1597264135
Kyber: Reserve RSV
70.00179028 ETH
105843662020-08-03 3:23:111668 days ago1596424991
Kyber: Reserve RSV
0.00134207 ETH
105843482020-08-03 3:17:511668 days ago1596424671
Kyber: Reserve RSV
0.00313236 ETH
104979142020-07-20 18:16:431682 days ago1595269003
Kyber: Reserve RSV
25.99280868 ETH
104967272020-07-20 13:49:491682 days ago1595252989
Kyber: Reserve RSV
0.0219384 ETH
104937652020-07-20 2:38:371682 days ago1595212717
Kyber: Reserve RSV
0.4037209 ETH
104914002020-07-19 17:54:291683 days ago1595181269
Kyber: Reserve RSV
0.83390827 ETH
104883542020-07-19 6:39:211683 days ago1595140761
Kyber: Reserve RSV
0.029916 ETH
104871482020-07-19 2:09:371684 days ago1595124577
Kyber: Reserve RSV
0.10430329 ETH
104861342020-07-18 22:27:241684 days ago1595111244
Kyber: Reserve RSV
0.12389374 ETH
104841432020-07-18 15:06:041684 days ago1595084764
Kyber: Reserve RSV
1.9944 ETH
104841362020-07-18 15:04:151684 days ago1595084655
Kyber: Reserve RSV
1.85906758 ETH
104841362020-07-18 15:04:151684 days ago1595084655
Kyber: Reserve RSV
4.986 ETH
104841222020-07-18 15:00:181684 days ago1595084418
Kyber: Reserve RSV
1.32064183 ETH
104841212020-07-18 15:00:161684 days ago1595084416
Kyber: Reserve RSV
4.986 ETH
104841162020-07-18 14:59:111684 days ago1595084351
Kyber: Reserve RSV
4.63231228 ETH
104841162020-07-18 14:59:111684 days ago1595084351
Kyber: Reserve RSV
6.87679917 ETH
104840962020-07-18 14:55:191684 days ago1595084119
Kyber: Reserve RSV
0.9972 ETH
104840922020-07-18 14:54:131684 days ago1595084053
Kyber: Reserve RSV
1.08188195 ETH
104840912020-07-18 14:54:051684 days ago1595084045
Kyber: Reserve RSV
0.9972 ETH
104840912020-07-18 14:54:051684 days ago1595084045
Kyber: Reserve RSV
0.9972 ETH
104839572020-07-18 14:20:591684 days ago1595082059
Kyber: Reserve RSV
1.9944 ETH
104839242020-07-18 14:13:261684 days ago1595081606
Kyber: Reserve RSV
1.63993606 ETH
104839242020-07-18 14:13:261684 days ago1595081606
Kyber: Reserve RSV
1.93055824 ETH
104832992020-07-18 11:50:191684 days ago1595073019
Kyber: Reserve RSV
0.83100193 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xc6C8bcE5...3957a6979
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
KyberReserve

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-12-12
*/

// File: contracts/ERC20Interface.sol

pragma solidity 0.4.18;


// 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/Utils.sol

pragma solidity 0.4.18;



/// @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/PermissionGroups.sol

pragma solidity 0.4.18;


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

pragma solidity 0.4.18;




/**
 * @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/ConversionRatesInterface.sol

pragma solidity 0.4.18;



interface ConversionRatesInterface {

    function recordImbalance(
        ERC20 token,
        int buyAmount,
        uint rateUpdateBlock,
        uint currentBlock
    )
        public;

    function getRate(ERC20 token, uint currentBlockNumber, bool buy, uint qty) public view returns(uint);
}

// File: contracts/SanityRatesInterface.sol

pragma solidity 0.4.18;


interface SanityRatesInterface {
    function getSanityRate(ERC20 src, ERC20 dest) public view returns(uint);
}

// File: contracts/KyberReserveInterface.sol

pragma solidity 0.4.18;


/// @title Kyber Reserve contract
interface KyberReserveInterface {

    function trade(
        ERC20 srcToken,
        uint srcAmount,
        ERC20 destToken,
        address destAddress,
        uint conversionRate,
        bool validate
    )
        public
        payable
        returns(bool);

    function getConversionRate(ERC20 src, ERC20 dest, uint srcQty, uint blockNumber) public view returns(uint);
}

// File: contracts/reserves/KyberReserve.sol

pragma solidity 0.4.18;








/// @title Kyber Reserve contract
contract KyberReserve is KyberReserveInterface, Withdrawable, Utils {

    address public kyberNetwork;
    bool public tradeEnabled;
    ConversionRatesInterface public conversionRatesContract;
    SanityRatesInterface public sanityRatesContract;
    mapping(bytes32=>bool) public approvedWithdrawAddresses; // sha3(token,address)=>bool
    mapping(address=>address) public tokenWallet;

    function KyberReserve(address _kyberNetwork, ConversionRatesInterface _ratesContract, address _admin) public {
        require(_admin != address(0));
        require(_ratesContract != address(0));
        require(_kyberNetwork != address(0));
        kyberNetwork = _kyberNetwork;
        conversionRatesContract = _ratesContract;
        admin = _admin;
        tradeEnabled = true;
    }

    event DepositToken(ERC20 token, uint amount);

    function() public payable {
        DepositToken(ETH_TOKEN_ADDRESS, msg.value);
    }

    event TradeExecute(
        address indexed origin,
        address src,
        uint srcAmount,
        address destToken,
        uint destAmount,
        address destAddress
    );

    function trade(
        ERC20 srcToken,
        uint srcAmount,
        ERC20 destToken,
        address destAddress,
        uint conversionRate,
        bool validate
    )
        public
        payable
        returns(bool)
    {
        require(tradeEnabled);
        require(msg.sender == kyberNetwork);

        require(doTrade(srcToken, srcAmount, destToken, destAddress, conversionRate, validate));

        return true;
    }

    event TradeEnabled(bool enable);

    function enableTrade() public onlyAdmin returns(bool) {
        tradeEnabled = true;
        TradeEnabled(true);

        return true;
    }

    function disableTrade() public onlyAlerter returns(bool) {
        tradeEnabled = false;
        TradeEnabled(false);

        return true;
    }

    event WithdrawAddressApproved(ERC20 token, address addr, bool approve);

    function approveWithdrawAddress(ERC20 token, address addr, bool approve) public onlyAdmin {
        approvedWithdrawAddresses[keccak256(token, addr)] = approve;
        WithdrawAddressApproved(token, addr, approve);

        setDecimals(token);
        if ((tokenWallet[token] == address(0x0)) && (token != ETH_TOKEN_ADDRESS)) {
            tokenWallet[token] = this; // by default
            require(token.approve(this, 2 ** 255));
        }
    }

    event NewTokenWallet(ERC20 token, address wallet);

    function setTokenWallet(ERC20 token, address wallet) public onlyAdmin {
        require(wallet != address(0x0));
        tokenWallet[token] = wallet;
        NewTokenWallet(token, wallet);
    }

    event WithdrawFunds(ERC20 token, uint amount, address destination);

    function withdraw(ERC20 token, uint amount, address destination) public onlyOperator returns(bool) {
        require(approvedWithdrawAddresses[keccak256(token, destination)]);

        if (token == ETH_TOKEN_ADDRESS) {
            destination.transfer(amount);
        } else {
            require(token.transferFrom(tokenWallet[token], destination, amount));
        }

        WithdrawFunds(token, amount, destination);

        return true;
    }

    event SetContractAddresses(address network, address rate, address sanity);

    function setContracts(
        address _kyberNetwork,
        ConversionRatesInterface _conversionRates,
        SanityRatesInterface _sanityRates
    )
        public
        onlyAdmin
    {
        require(_kyberNetwork != address(0));
        require(_conversionRates != address(0));

        kyberNetwork = _kyberNetwork;
        conversionRatesContract = _conversionRates;
        sanityRatesContract = _sanityRates;

        SetContractAddresses(kyberNetwork, conversionRatesContract, sanityRatesContract);
    }

    ////////////////////////////////////////////////////////////////////////////
    /// status functions ///////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////
    function getBalance(ERC20 token) public view returns(uint) {
        if (token == ETH_TOKEN_ADDRESS)
            return this.balance;
        else {
            address wallet = tokenWallet[token];
            uint balanceOfWallet = token.balanceOf(wallet);
            uint allowanceOfWallet = token.allowance(wallet, this);

            return (balanceOfWallet < allowanceOfWallet) ? balanceOfWallet : allowanceOfWallet;
        }
    }

    function getDestQty(ERC20 src, ERC20 dest, uint srcQty, uint rate) public view returns(uint) {
        uint dstDecimals = getDecimals(dest);
        uint srcDecimals = getDecimals(src);

        return calcDstQty(srcQty, srcDecimals, dstDecimals, rate);
    }

    function getSrcQty(ERC20 src, ERC20 dest, uint dstQty, uint rate) public view returns(uint) {
        uint dstDecimals = getDecimals(dest);
        uint srcDecimals = getDecimals(src);

        return calcSrcQty(dstQty, srcDecimals, dstDecimals, rate);
    }

    function getConversionRate(ERC20 src, ERC20 dest, uint srcQty, uint blockNumber) public view returns(uint) {
        ERC20 token;
        bool  isBuy;

        if (!tradeEnabled) return 0;

        if (ETH_TOKEN_ADDRESS == src) {
            isBuy = true;
            token = dest;
        } else if (ETH_TOKEN_ADDRESS == dest) {
            isBuy = false;
            token = src;
        } else {
            return 0; // pair is not listed
        }

        uint rate = conversionRatesContract.getRate(token, blockNumber, isBuy, srcQty);
        uint destQty = getDestQty(src, dest, srcQty, rate);

        if (getBalance(dest) < destQty) return 0;

        if (sanityRatesContract != address(0)) {
            uint sanityRate = sanityRatesContract.getSanityRate(src, dest);
            if (rate > sanityRate) return 0;
        }

        return rate;
    }

    /// @dev do a trade
    /// @param srcToken Src token
    /// @param srcAmount Amount of src token
    /// @param destToken Destination token
    /// @param destAddress Destination address to send tokens to
    /// @param validate If true, additional validations are applicable
    /// @return true iff trade is successful
    function doTrade(
        ERC20 srcToken,
        uint srcAmount,
        ERC20 destToken,
        address destAddress,
        uint conversionRate,
        bool validate
    )
        internal
        returns(bool)
    {
        // can skip validation if done at kyber network level
        if (validate) {
            require(conversionRate > 0);
            if (srcToken == ETH_TOKEN_ADDRESS)
                require(msg.value == srcAmount);
            else
                require(msg.value == 0);
        }

        uint destAmount = getDestQty(srcToken, destToken, srcAmount, conversionRate);
        // sanity check
        require(destAmount > 0);

        // add to imbalance
        ERC20 token;
        int tradeAmount;
        if (srcToken == ETH_TOKEN_ADDRESS) {
            tradeAmount = int(destAmount);
            token = destToken;
        } else {
            tradeAmount = -1 * int(srcAmount);
            token = srcToken;
        }

        conversionRatesContract.recordImbalance(
            token,
            tradeAmount,
            0,
            block.number
        );

        // collect src tokens
        if (srcToken != ETH_TOKEN_ADDRESS) {
            require(srcToken.transferFrom(msg.sender, tokenWallet[srcToken], srcAmount));
        }

        // send dest tokens
        if (destToken == ETH_TOKEN_ADDRESS) {
            destAddress.transfer(destAmount);
        } else {
            require(destToken.transferFrom(tokenWallet[destToken], destAddress, destAmount));
        }

        TradeExecute(msg.sender, srcToken, srcAmount, destToken, destAmount, destAddress);

        return true;
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[],"name":"enableTrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"alerter","type":"address"}],"name":"removeAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"wallet","type":"address"}],"name":"setTokenWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"sendTo","type":"address"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAlerter","type":"address"}],"name":"addAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sanityRatesContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"addr","type":"address"},{"name":"approve","type":"bool"}],"name":"approveWithdrawAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"destination","type":"address"}],"name":"withdraw","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"disableTrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"srcToken","type":"address"},{"name":"srcAmount","type":"uint256"},{"name":"destToken","type":"address"},{"name":"destAddress","type":"address"},{"name":"conversionRate","type":"uint256"},{"name":"validate","type":"bool"}],"name":"trade","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","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":"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":"blockNumber","type":"uint256"}],"name":"getConversionRate","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":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"dstQty","type":"uint256"},{"name":"rate","type":"uint256"}],"name":"getSrcQty","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kyberNetwork","type":"address"},{"name":"_conversionRates","type":"address"},{"name":"_sanityRates","type":"address"}],"name":"setContracts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kyberNetwork","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","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":"conversionRatesContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tradeEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"approvedWithdrawAddresses","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"srcQty","type":"uint256"},{"name":"rate","type":"uint256"}],"name":"getDestQty","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_kyberNetwork","type":"address"},{"name":"_ratesContract","type":"address"},{"name":"_admin","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"DepositToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"origin","type":"address"},{"indexed":false,"name":"src","type":"address"},{"indexed":false,"name":"srcAmount","type":"uint256"},{"indexed":false,"name":"destToken","type":"address"},{"indexed":false,"name":"destAmount","type":"uint256"},{"indexed":false,"name":"destAddress","type":"address"}],"name":"TradeExecute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"enable","type":"bool"}],"name":"TradeEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"approve","type":"bool"}],"name":"WithdrawAddressApproved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"wallet","type":"address"}],"name":"NewTokenWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"destination","type":"address"}],"name":"WithdrawFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"network","type":"address"},{"indexed":false,"name":"rate","type":"address"},{"indexed":false,"name":"sanity","type":"address"}],"name":"SetContractAddresses","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"}]

Deployed Bytecode

0x6060604052600436106101655763ffffffff60e060020a60003504166299d38681146101b957806301a12fd3146101e05780631bc7bfec14610201578063267822471461022657806327a099d8146102555780633ccdbb28146102bb578063408ee7fe146102e457806347e6924f14610303578063546dc71c1461031657806369328dec146103405780636940030f146103695780636cf698111461037c57806375829def146103a857806377f50f97146103c75780637acc8678146103da5780637c423f54146103f95780637cd442721461040c5780639870d7fe14610449578063a7fca95314610468578063a80cbac614610493578063ac8a584a146104b2578063b3066d49146104d1578063b78b842d146104fc578063ce56c4541461050f578063d5847d3314610531578063d621e81314610544578063d7b7024d14610557578063f851a4401461056d578063f8b2cb4f14610580578063fa64dffa1461059f575b7f2d0c0a8842b9944ece1495eb61121621b5e36bd6af3bba0318c695f525aef79f60008051602061204983398151915234604051600160a060020a03909216825260208201526040908101905180910390a1005b34156101c457600080fd5b6101cc6105ca565b604051901515815260200160405180910390f35b34156101eb57600080fd5b6101ff600160a060020a0360043516610658565b005b341561020c57600080fd5b6101ff600160a060020a03600435811690602435166107c8565b341561023157600080fd5b610239610874565b604051600160a060020a03909116815260200160405180910390f35b341561026057600080fd5b610268610883565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156102a757808201518382015260200161028f565b505050509050019250505060405180910390f35b34156102c657600080fd5b6101ff600160a060020a0360043581169060243590604435166108eb565b34156102ef57600080fd5b6101ff600160a060020a03600435166109e2565b341561030e57600080fd5b610239610ade565b341561032157600080fd5b6101ff600160a060020a03600435811690602435166044351515610aed565b341561034b57600080fd5b6101cc600160a060020a036004358116906024359060443516610cd7565b341561037457600080fd5b6101cc610eb0565b6101cc600160a060020a03600435811690602435906044358116906064351660843560a4351515610f31565b34156103b357600080fd5b6101ff600160a060020a0360043516610f9e565b34156103d257600080fd5b6101ff611039565b34156103e557600080fd5b6101ff600160a060020a03600435166110d3565b341561040457600080fd5b6102686111b5565b341561041757600080fd5b610437600160a060020a036004358116906024351660443560643561121b565b60405190815260200160405180910390f35b341561045457600080fd5b6101ff600160a060020a0360043516611406565b341561047357600080fd5b610437600160a060020a03600435811690602435166044356064356114d6565b341561049e57600080fd5b610239600160a060020a0360043516611508565b34156104bd57600080fd5b6101ff600160a060020a0360043516611523565b34156104dc57600080fd5b6101ff600160a060020a036004358116906024358116906044351661168f565b341561050757600080fd5b610239611773565b341561051a57600080fd5b6101ff600435600160a060020a0360243516611782565b341561053c57600080fd5b610239611815565b341561054f57600080fd5b6101cc611824565b341561056257600080fd5b6101cc600435611845565b341561057857600080fd5b61023961185a565b341561058b57600080fd5b610437600160a060020a0360043516611869565b34156105aa57600080fd5b610437600160a060020a03600435811690602435166044356064356119bd565b6000805433600160a060020a039081169116146105e657600080fd5b6007805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790557f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7356001604051901515815260200160405180910390a15060015b90565b6000805433600160a060020a0390811691161461067457600080fd5b600160a060020a03821660009081526003602052604090205460ff16151561069b57600080fd5b50600160a060020a0381166000908152600360205260408120805460ff191690555b6005548110156107c45781600160a060020a03166005828154811015156106e057fe5b600091825260209091200154600160a060020a031614156107bc5760058054600019810190811061070d57fe5b60009182526020909120015460058054600160a060020a03909216918390811061073357fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600580549061076f906000198301611ff4565b507f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762826000604051600160a060020a039092168252151560208201526040908101905180910390a16107c4565b6001016106bd565b5050565b60005433600160a060020a039081169116146107e357600080fd5b600160a060020a03811615156107f857600080fd5b600160a060020a038281166000908152600b6020526040908190208054600160a060020a031916928416929092179091557f81995c7b922889ac0a81e41866106d4046268ea3a9abaae9f9e080a6ce36ee7d908390839051600160a060020a039283168152911660208201526040908101905180910390a15050565b600154600160a060020a031681565b61088b612018565b60048054806020026020016040519081016040528092919081815260200182805480156108e157602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116108c3575b5050505050905090565b60005433600160a060020a0390811691161461090657600080fd5b82600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561096357600080fd5b6102c65a03f1151561097457600080fd5b50505060405180519050151561098957600080fd5b7f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e6838383604051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a1505050565b60005433600160a060020a039081169116146109fd57600080fd5b600160a060020a03811660009081526003602052604090205460ff1615610a2357600080fd5b60055460329010610a3357600080fd5b7f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600360205260409020805460ff191660019081179091556005805490918101610ab28382611ff4565b5060009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055565b600954600160a060020a031681565b60005433600160a060020a03908116911614610b0857600080fd5b80600a600085856040516c01000000000000000000000000600160a060020a039384168102825291909216026014820152602801604051908190039020815260208101919091526040908101600020805460ff1916921515929092179091557fd5fd5351efae1f4bb760079da9f0ff9589e2c3e216337ca9d39cdff573b245c49084908490849051600160a060020a0393841681529190921660208201529015156040808301919091526060909101905180910390a1610bc7836119e4565b600160a060020a038381166000908152600b602052604090205416158015610c065750600160a060020a03831660008051602061204983398151915214155b15610cd257600160a060020a038381166000818152600b60205260408082208054600160a060020a03191630958616179055919263095ea7b39290917f800000000000000000000000000000000000000000000000000000000000000091516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610cac57600080fd5b6102c65a03f11515610cbd57600080fd5b505050604051805190501515610cd257600080fd5b505050565b600160a060020a03331660009081526002602052604081205460ff161515610cfe57600080fd5b600a600085846040516c01000000000000000000000000600160a060020a039384168102825291909216026014820152602801604051908190039020815260208101919091526040016000205460ff161515610d5957600080fd5b600160a060020a0384166000805160206120498339815191521415610dae57600160a060020a03821683156108fc0284604051600060405180830381858888f193505050501515610da957600080fd5b610e52565b600160a060020a038085166000818152600b60205260408082205492936323b872dd9316918691889190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610e2c57600080fd5b6102c65a03f11515610e3d57600080fd5b505050604051805190501515610e5257600080fd5b7fb67719fc33c1f17d31bf3a698690d62066b1e0bae28fcd3c56cf2c015c2863d6848484604051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a15060019392505050565b600160a060020a03331660009081526003602052604081205460ff161515610ed757600080fd5b6007805474ff0000000000000000000000000000000000000000191690557f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7356000604051901515815260200160405180910390a150600190565b60075460009074010000000000000000000000000000000000000000900460ff161515610f5d57600080fd5b60075433600160a060020a03908116911614610f7857600080fd5b610f86878787878787611aa1565b1515610f9157600080fd5b5060019695505050505050565b60005433600160a060020a03908116911614610fb957600080fd5b600160a060020a0381161515610fce57600080fd5b6001547f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4090600160a060020a0316604051600160a060020a03909116815260200160405180910390a160018054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a0390811691161461105457600080fd5b6001546000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed91600160a060020a039081169116604051600160a060020a039283168152911660208201526040908101905180910390a16001805460008054600160a060020a0319908116600160a060020a03841617909155169055565b60005433600160a060020a039081169116146110ee57600080fd5b600160a060020a038116151561110357600080fd5b7f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4081604051600160a060020a03909116815260200160405180910390a16000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed908290600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a160008054600160a060020a031916600160a060020a0392909216919091179055565b6111bd612018565b60058054806020026020016040519081016040528092919081815260200182805480156108e157602002820191906000526020600020908154600160a060020a031681526001909101906020018083116108c3575050505050905090565b600080600080600080600760149054906101000a900460ff16151561124357600095506113f9565b600080516020612049833981519152600160a060020a038b16141561126e57600193508894506112a2565b600080516020612049833981519152600160a060020a038a16141561129957600093508994506112a2565b600095506113f9565b600854600160a060020a031663b8e9c22e8689878c60006040516020015260405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252151560448301526064820152608401602060405180830381600087803b151561131257600080fd5b6102c65a03f1151561132357600080fd5b50505060405180519050925061133b8a8a8a866119bd565b9150816113478a611869565b101561135657600095506113f9565b600954600160a060020a0316156113f557600954600160a060020a031663a58092b78b8b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b15156113c857600080fd5b6102c65a03f115156113d957600080fd5b5050506040518051915050808311156113f557600095506113f9565b8295505b5050505050949350505050565b60005433600160a060020a0390811691161461142157600080fd5b600160a060020a03811660009081526002602052604090205460ff161561144757600080fd5b6004546032901061145757600080fd5b7f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600260205260409020805460ff191660019081179091556004805490918101610ab28382611ff4565b60008060006114e486611df6565b91506114ef87611df6565b90506114fd85828487611eb4565b979650505050505050565b600b60205260009081526040902054600160a060020a031681565b6000805433600160a060020a0390811691161461153f57600080fd5b600160a060020a03821660009081526002602052604090205460ff16151561156657600080fd5b50600160a060020a0381166000908152600260205260408120805460ff191690555b6004548110156107c45781600160a060020a03166004828154811015156115ab57fe5b600091825260209091200154600160a060020a03161415611687576004805460001981019081106115d857fe5b60009182526020909120015460048054600160a060020a0390921691839081106115fe57fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560048054600019019061163a9082611ff4565b507f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b826000604051600160a060020a039092168252151560208201526040908101905180910390a16107c4565b600101611588565b60005433600160a060020a039081169116146116aa57600080fd5b600160a060020a03831615156116bf57600080fd5b600160a060020a03821615156116d457600080fd5b60078054600160a060020a03808616600160a060020a0319928316179283905560088054868316908416179081905560098054868416941693909317928390557f7a85322644a4462d8ff5482d2a841a4d231f8cfb3c9f4a50f66f8b2bd568c31c938216929082169116604051600160a060020a03938416815291831660208301529091166040808301919091526060909101905180910390a1505050565b600754600160a060020a031681565b60005433600160a060020a0390811691161461179d57600080fd5b600160a060020a03811682156108fc0283604051600060405180830381858888f1935050505015156117ce57600080fd5b7fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de8282604051918252600160a060020a031660208201526040908101905180910390a15050565b600854600160a060020a031681565b60075474010000000000000000000000000000000000000000900460ff1681565b600a6020526000908152604090205460ff1681565b600054600160a060020a031681565b6000808080600160a060020a038516600080516020612049833981519152141561189f5730600160a060020a03163193506119b5565b600160a060020a038086166000818152600b602052604080822054909316955090916370a08231918691516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561190c57600080fd5b6102c65a03f1151561191d57600080fd5b5050506040518051925050600160a060020a03851663dd62ed3e843060006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561198757600080fd5b6102c65a03f1151561199857600080fd5b50505060405180519150508082106119b057806119b2565b815b93505b505050919050565b60008060006119cb86611df6565b91506119d687611df6565b90506114fd85828487611f5b565b600160a060020a0381166000805160206120498339815191521415611a2457600160a060020a038116600090815260066020526040902060129055611a9e565b80600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611a6a57600080fd5b6102c65a03f11515611a7b57600080fd5b5050506040518051600160a060020a038316600090815260066020526040902055505b50565b6000806000808415611af55760008611611aba57600080fd5b600160a060020a038a166000805160206120498339815191521415611aea57348914611ae557600080fd5b611af5565b3415611af557600080fd5b611b018a898b896119bd565b925060008311611b1057600080fd5b600160a060020a038a166000805160206120498339815191521415611b39575086905081611b43565b5088905060001988025b600854600160a060020a031663c6fd2103838360004360405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515611ba957600080fd5b6102c65a03f11515611bba57600080fd5b505050600160a060020a038a1660008051602061204983398151915214611c8057600160a060020a03808b166000818152600b60205260408082205492936323b872dd9333939116918e9190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515611c5a57600080fd5b6102c65a03f11515611c6b57600080fd5b505050604051805190501515611c8057600080fd5b600160a060020a0388166000805160206120498339815191521415611cd557600160a060020a03871683156108fc0284604051600060405180830381858888f193505050501515611cd057600080fd5b611d79565b600160a060020a038089166000818152600b60205260408082205492936323b872dd9316918b91889190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515611d5357600080fd5b6102c65a03f11515611d6457600080fd5b505050604051805190501515611d7957600080fd5b33600160a060020a03167fea9415385bae08fe9f6dc457b02577166790cde83bb18cc340aac6cb81b824de8b8b8b878c604051600160a060020a039586168152602081019490945291841660408085019190915260608401919091529216608082015260a001905180910390a25060019998505050505050505050565b600080600160a060020a0383166000805160206120498339815191521415611e215760129150611eae565b50600160a060020a038216600090815260066020526040902054801515611eaa5782600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611e8857600080fd5b6102c65a03f11515611e9957600080fd5b505050604051805190509150611eae565b8091505b50919050565b600080806b204fce5e3e25026110000000871115611ed157600080fd5b69d3c21bcecceda1000000841115611ee857600080fd5b848610611f195760128587031115611eff57600080fd5b5050828403600a0a8502670de0b6b3a76400000282611f3f565b60128686031115611f2957600080fd5b5050670de0b6b3a76400008502848403600a0a83025b80600182840103811515611f4f57fe5b04979650505050505050565b60006b204fce5e3e25026110000000851115611f7657600080fd5b69d3c21bcecceda1000000821115611f8d57600080fd5b838310611fc05760128484031115611fa457600080fd5b670de0b6b3a7640000858302858503600a0a025b049050611fec565b60128385031115611fd057600080fd5b828403600a0a670de0b6b3a764000002828602811515611fb857fe5b949350505050565b815481835581811511610cd257600083815260209020610cd291810190830161202a565b60206040519081016040526000815290565b61065591905b808211156120445760008155600101612030565b50905600000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeea165627a7a72305820759891b305e45ecc25a9959c4d0a44c09a9387d84dbb3d83aaa761f481dbe40b0029

Deployed Bytecode Sourcemap

9569:8114:0:-;;;;;;;;;-1:-1:-1;;;9569:8114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10466:42;-1:-1:-1;;;;;;;;;;;10498:9:0;10466:42;;-1:-1:-1;;;;;10466:42:0;;;;;;;;;;;;;;;;;;;;9569:8114;11223:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5982:463;;;;;;;;;;-1:-1:-1;;;;;5982:463:0;;;;;;;12137:198;;;;;;;;;;-1:-1:-1;;;;;12137:198:0;;;;;;;;;;3606:27;;;;;;;;;;;;;;;-1:-1:-1;;;;;3606:27:0;;;;;;;;;;;;;;4217:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;71:3;;;64:6;52:2;45:3;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;7883:189:0;;;;;;;;;;-1:-1:-1;;;;;7883:189:0;;;;;;;;;;;;;5666:308;;;;;;;;;;-1:-1:-1;;;;;5666:308:0;;;;;9773:47;;;;;;;;;;;;11613:458;;;;;;;;;;-1:-1:-1;;;;;11613:458:0;;;;;;;;;;;;;;12418:461;;;;;;;;;;-1:-1:-1;;;;;12418:461:0;;;;;;;;;;;;;11376:150;;;;;;;;;;;;10722:453;;-1:-1:-1;;;;;10722:453:0;;;;;;;;;;;;;;;;;;;;;;;;4635:187;;;;;;;;;;-1:-1:-1;;;;;4635:187:0;;;;;5404:194;;;;;;;;;;;;5003:223;;;;;;;;;;-1:-1:-1;;;;;5003:223:0;;;;;4323:96;;;;;;;;;;;;14756:888;;;;;;;;;;-1:-1:-1;;;;;14756:888:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6514:319;;;;;;;;;;-1:-1:-1;;;;;6514:319:0;;;;;14485:263;;;;;;;;;;-1:-1:-1;;;;;14485:263:0;;;;;;;;;;;;;;9918:44;;;;;;;;;;-1:-1:-1;;;;;9918:44:0;;;;;6841:481;;;;;;;;;;-1:-1:-1;;;;;6841:481:0;;;;;12969:534;;;;;;;;;;-1:-1:-1;;;;;12969:534:0;;;;;;;;;;;;;;;9646:27;;;;;;;;;;;;8184:153;;;;;;;;;;;;-1:-1:-1;;;;;8184:153:0;;;;;9711:55;;;;;;;;;;;;9680:24;;;;;;;;;;;;9827:55;;;;;;;;;;;;;;3579:20;;;;;;;;;;;;13757:448;;;;;;;;;;-1:-1:-1;;;;;13757:448:0;;;;;14213:264;;;;;;;;;;-1:-1:-1;;;;;14213:264:0;;;;;;;;;;;;;;11223:145;11271:4;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;11288:12;:19;;-1:-1:-1;;11288:19:0;;;;;11318:18;11303:4;11318:18;;;;;;;;;;;;;;;;-1:-1:-1;11356:4:0;4016:1;11223:145;:::o;5982:463::-;6131:6;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;6059:17:0;;;;;;:8;:17;;;;;;;;6051:26;;;;;;;;-1:-1:-1;;;;;;6088:17:0;;6108:5;6088:17;;;:8;:17;;;;;:25;;-1:-1:-1;;6088:25:0;;;6126:312;6147:13;:20;6143:24;;6126:312;;;6213:7;-1:-1:-1;;;;;6193:27:0;:13;6207:1;6193:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6193:16:0;:27;6189:238;;;6260:13;6274:20;;-1:-1:-1;;6274:24:0;;;6260:39;;;;;;;;;;;;;;;;6241:13;:16;;-1:-1:-1;;;;;6260:39:0;;;;6255:1;;6241:16;;;;;;;;;;;;;;;:58;;-1:-1:-1;;;;;;6241:58:0;-1:-1:-1;;;;;6241:58:0;;;;;;;;;;6318:13;:22;;;;;-1:-1:-1;;6318:22:0;;;:::i;:::-;;6359:28;6372:7;6381:5;6359:28;;-1:-1:-1;;;;;6359:28:0;;;;;;;;;;;;;;;;;;;;;;6406:5;;6189:238;6169:3;;6126:312;;;5982:463;;:::o;12137:198::-;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;12226:22:0;;;;12218:31;;;;;;-1:-1:-1;;;;;12260:18:0;;;;;;;:11;:18;;;;;;;:27;;-1:-1:-1;;;;;;12260:27:0;;;;;;;;;;;12298:29;;12260:18;;:27;;12298:29;-1:-1:-1;;;;;12298:29:0;;;;;;;;;;;;;;;;;;;;;;12137:198;;:::o;3606:27::-;;;-1:-1:-1;;;;;3606:27:0;;:::o;4217:98::-;4264:9;;:::i;:::-;4293:14;4286:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4286:21:0;;;;;;;;;;;;;;;;;;;;;;;4217:98;:::o;7883:189::-;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;7986:5;-1:-1:-1;;;;;7986:14:0;;8001:6;8009;7986:30;;;;;;;;-1:-1:-1;;;7986:30:0;;;;;;-1:-1:-1;;;;;7986:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7978:39;;;;;;;;8028:36;8042:5;8049:6;8057;8028:36;;-1:-1:-1;;;;;8028:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7883:189;;;:::o;5666:308::-;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;5743:20:0;;;;;;:8;:20;;;;;;;;5742:21;5734:30;;;;;;5806:13;:20;3854:2;5806:37;;5798:46;;;;;;5857:30;5870:10;5882:4;5857:30;;-1:-1:-1;;;;;5857:30:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5898:20:0;;;;;;:8;:20;;;;;:27;;-1:-1:-1;;5898:27:0;5921:4;5898:27;;;;;;5936:13;:30;;:13;;:30;;;:13;:30;;:::i;:::-;-1:-1:-1;5936:30:0;;;;;;;;;;;-1:-1:-1;;;;;;5936:30:0;-1:-1:-1;;;;;5936:30:0;;;;;;;;;;5666:308::o;9773:47::-;;;-1:-1:-1;;;;;9773:47:0;;:::o;11613:458::-;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;11766:7;11714:25;:49;11750:5;11757:4;11740:22;;;-1:-1:-1;;;;;11740:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;11714:49;;;;;;;;;;;;;-1:-1:-1;11714:49:0;:59;;-1:-1:-1;;11714:59:0;;;;;;;;;;;11784:45;;11808:5;;11815:4;;11821:7;;11784:45;-1:-1:-1;;;;;11784:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11842:18;11854:5;11842:11;:18::i;:::-;-1:-1:-1;;;;;11876:18:0;;;11906:3;11876:18;;;:11;:18;;;;;;;:34;11875:68;;;;-1:-1:-1;;;;;;11916:26:0;;-1:-1:-1;;;;;;;;;;;11916:26:0;;11875:68;11871:193;;;-1:-1:-1;;;;;11960:18:0;;;;;;;:11;:18;;;;;;:25;;-1:-1:-1;;;;;;11960:25:0;11981:4;11960:25;;;;;;:18;;12022:13;;11981:4;;12042:8;;12022:29;;;;;;-1:-1:-1;;;12022:29:0;;;;;;-1:-1:-1;;;;;12022:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12014:38;;;;;;;;11613:458;;;:::o;12418:461::-;-1:-1:-1;;;;;4086:10:0;4076:21;12511:4;4076:21;;;:9;:21;;;;;;;;4068:30;;;;;;;;12536:25;:56;12572:5;12579:11;12562:29;;;-1:-1:-1;;;;;12562:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;12536:56;;;;;;;;;;;;;;;;12528:65;;;;;;;;-1:-1:-1;;;;;12610:26:0;;-1:-1:-1;;;;;;;;;;;12610:26:0;12606:188;;;-1:-1:-1;;;;;12653:20:0;;:28;;;;12674:6;12653:28;;;;;;;;;;;;;;;;;;;;;;;;;;12606:188;;;-1:-1:-1;;;;;12722:18:0;;;12741;;;;:11;:18;;;;;;;12722;;;;12741;;12761:11;;12774:6;;12741:18;12722:59;;;;;;-1:-1:-1;;;12722:59:0;;;;;;-1:-1:-1;;;;;12722:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12714:68;;;;;;;;12806:41;12820:5;12827:6;12835:11;12806:41;;-1:-1:-1;;;;;12806:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12867:4:0;12418:461;;;;;:::o;11376:150::-;-1:-1:-1;;;;;4177:10:0;4168:20;11427:4;4168:20;;;:8;:20;;;;;;;;4160:29;;;;;;;;11444:12;:20;;-1:-1:-1;;11444:20:0;;;11475:19;11459:5;11475:19;;;;;;;;;;;;;;;;-1:-1:-1;11514:4:0;11376:150;:::o;10722:453::-;10984:12;;10954:4;;10984:12;;;;;10976:21;;;;;;;;11030:12;;11016:10;-1:-1:-1;;;;;11016:26:0;;;11030:12;;11016:26;11008:35;;;;;;11064:78;11072:8;11082:9;11093;11104:11;11117:14;11133:8;11064:7;:78::i;:::-;11056:87;;;;;;;;-1:-1:-1;11163:4:0;10722:453;;;;;;;;:::o;4635:187::-;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;4712:22:0;;;;4704:31;;;;;;4767:12;;4746:34;;-1:-1:-1;;;;;4767:12:0;4746:34;;-1:-1:-1;;;;;4746:34:0;;;;;;;;;;;;;;4791:12;:23;;-1:-1:-1;;;;;;4791:23:0;-1:-1:-1;;;;;4791:23:0;;;;;;;;;;4635:187::o;5404:194::-;5452:12;;5468:10;-1:-1:-1;;;;;5452:26:0;;;:12;;:26;5444:35;;;;;;5503:12;;;5517:5;5490:33;;-1:-1:-1;;;;;5503:12:0;;;;5517:5;5490:33;;-1:-1:-1;;;;;5490:33:0;;;;;;;;;;;;;;;;;;;;;;5542:12;;;;5534:20;;-1:-1:-1;;;;;;5534:20:0;;;-1:-1:-1;;;;;5542:12:0;;5534:20;;;;5565:25;;;5404:194::o;5003:223::-;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;5087:22:0;;;;5079:31;;;;;;5121:30;5142:8;5121:30;;-1:-1:-1;;;;;5121:30:0;;;;;;;;;;;;;;5185:5;;5162:29;;5175:8;;-1:-1:-1;;;;;5185:5:0;5162:29;;-1:-1:-1;;;;;5162:29:0;;;;;;;;;;;;;;;;;;;;;;5202:5;:16;;-1:-1:-1;;;;;;5202:16:0;-1:-1:-1;;;;;5202:16:0;;;;;;;;;;5003:223::o;4323:96::-;4369:9;;:::i;:::-;4398:13;4391:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4391:20:0;;;;;;;;;;;;;;;;;;;;;;4323:96;:::o;14756:888::-;14857:4;14874:11;14896;15234:9;15323:12;15493:15;14925:12;;;;;;;;;;;14924:13;14920:27;;;14946:1;14939:8;;;;14920:27;-1:-1:-1;;;;;;;;;;;;;;;;14964:24:0;;;14960:262;;;15013:4;15005:12;;15040:4;15032:12;;14960:262;;;-1:-1:-1;;;;;;;;;;;;;;;;15066:25:0;;;15062:160;;;15116:5;15108:13;;15144:3;15136:11;;15062:160;;;15187:1;15180:8;;;;15062:160;15246:23;;-1:-1:-1;;;;;15246:23:0;:31;15278:5;15285:11;15298:5;15305:6;15246:23;:66;;;;;;;-1:-1:-1;;;15246:66:0;;;;;;-1:-1:-1;;;;;15246:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15234:78;;15338:35;15349:3;15354:4;15360:6;15368:4;15338:10;:35::i;:::-;15323:50;;15409:7;15390:16;15401:4;15390:10;:16::i;:::-;:26;15386:40;;;15425:1;15418:8;;;;15386:40;15443:19;;-1:-1:-1;;;;;15443:19:0;:33;15439:174;;15511:19;;-1:-1:-1;;;;;15511:19:0;:33;15545:3;15550:4;15511:19;:44;;;;;;;-1:-1:-1;;;15511:44:0;;;;;;-1:-1:-1;;;;;15511:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15574:17:0;;;15570:31;;;15600:1;15593:8;;;;15570:31;15632:4;15625:11;;14756:888;;;;;;;;;;;;:::o;6514:319::-;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;6593:22:0;;;;;;:9;:22;;;;;;;;6592:23;6584:32;;;;;;6658:14;:21;3854:2;6658:38;;6650:47;;;;;;6710:32;6724:11;6737:4;6710:32;;-1:-1:-1;;;;;6710:32:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6753:22:0;;;;;;:9;:22;;;;;:29;;-1:-1:-1;;6753:29:0;6778:4;6753:29;;;;;;6793:14;:32;;:14;;:32;;;:14;:32;;:::i;14485:263::-;14571:4;14588:16;14635;14607:17;14619:4;14607:11;:17::i;:::-;14588:36;;14654:16;14666:3;14654:11;:16::i;:::-;14635:35;;14690:50;14701:6;14709:11;14722;14735:4;14690:10;:50::i;:::-;14683:57;14485:263;-1:-1:-1;;;;;;;14485:263:0:o;9918:44::-;;;;;;;;;;;;-1:-1:-1;;;;;9918:44:0;;:::o;6841:481::-;6996:6;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;6920:19:0;;;;;;:9;:19;;;;;;;;6912:28;;;;;;;;-1:-1:-1;;;;;;6951:19:0;;6973:5;6951:19;;;:9;:19;;;;;:27;;-1:-1:-1;;6951:27:0;;;6991:324;7012:14;:21;7008:25;;6991:324;;;7080:8;-1:-1:-1;;;;;7059:29:0;:14;7074:1;7059:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7059:17:0;:29;7055:249;;;7129:14;7144:21;;-1:-1:-1;;7144:25:0;;;7129:41;;;;;;;;;;;;;;;;7109:14;:17;;-1:-1:-1;;;;;7129:41:0;;;;7124:1;;7109:17;;;;;;;;;;;;;;;:61;;-1:-1:-1;;;;;;7109:61:0;-1:-1:-1;;;;;7109:61:0;;;;;;;;;;7189:14;:26;;-1:-1:-1;;7189:26:0;;;;;;:::i;:::-;;7234:30;7248:8;7258:5;7234:30;;-1:-1:-1;;;;;7234:30:0;;;;;;;;;;;;;;;;;;;;;;7283:5;;7055:249;7035:3;;6991:324;;12969:534;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;13185:27:0;;;;13177:36;;;;;;-1:-1:-1;;;;;13232:30:0;;;;13224:39;;;;;;13276:12;:28;;-1:-1:-1;;;;;13276:28:0;;;-1:-1:-1;;;;;;13276:28:0;;;;;;;;13315:23;:42;;;;;;;;;;;;;13368:19;:34;;;;;;;;;;;;;;;13415:80;;13436:12;;;13450:23;;;;13475:19;13415:80;;-1:-1:-1;;;;;13415:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12969:534;;;:::o;9646:27::-;;;-1:-1:-1;;;;;9646:27:0;;:::o;8184:153::-;3999:5;;3985:10;-1:-1:-1;;;;;3985:19:0;;;3999:5;;3985:19;3977:28;;;;;;-1:-1:-1;;;;;8266:15:0;;:23;;;;8282:6;8266:23;;;;;;;;;;;;;;;;;;;;;;;;;;8300:29;8314:6;8322;8300:29;;;;;-1:-1:-1;;;;;8300:29:0;;;;;;;;;;;;;;;;8184:153;;:::o;9711:55::-;;;-1:-1:-1;;;;;9711:55:0;;:::o;9680:24::-;;;;;;;;;:::o;9827:55::-;;;;;;;;;;;;;;;:::o;3579:20::-;;;-1:-1:-1;;;;;3579:20:0;;:::o;13757:448::-;13810:4;;;;-1:-1:-1;;;;;13831:26:0;;-1:-1:-1;;;;;;;;;;;13831:26:0;13827:371;;;13879:4;-1:-1:-1;;;;;13879:12:0;;13872:19;;;;13827:371;-1:-1:-1;;;;;13939:18:0;;;;;;;:11;:18;;;;;;;;;;;-1:-1:-1;13939:18:0;;13995:15;;13939:18;;13995:23;;;;;;-1:-1:-1;;;13995:23:0;;;;;;-1:-1:-1;;;;;13995:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;14058:15:0;;;14074:6;14082:4;14058:29;;;;;;;;-1:-1:-1;;;14058:29:0;;;;;;-1:-1:-1;;;;;14058:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14112:35:0;;;14111:75;;14169:17;14111:75;;;14151:15;14111:75;14104:82;;13827:371;13757:448;;;;;;:::o;14213:264::-;14300:4;14317:16;14364;14336:17;14348:4;14336:11;:17::i;:::-;14317:36;;14383:16;14395:3;14383:11;:16::i;:::-;14364:35;;14419:50;14430:6;14438:11;14451;14464:4;14419:10;:50::i;1358:174::-;-1:-1:-1;;;;;1416:26:0;;-1:-1:-1;;;;;;;;;;;1416:26:0;1412:112;;;-1:-1:-1;;;;;1444:15:0;;;;;;:8;:15;;;;;1300:2;1444:30;;1412:112;;;1508:5;-1:-1:-1;;;;;1508:14:0;;:16;;;;;;;;;;;-1:-1:-1;;;1508:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1490:15:0;;;;;;:8;:15;;;;;:34;-1:-1:-1;1412:112:0;1358:174;:::o;15986:1694::-;16205:4;16528:15;16705:11;16727:15;16294:8;16290:226;;;16344:1;16327:18;;16319:27;;;;;;-1:-1:-1;;;;;16365:29:0;;-1:-1:-1;;;;;;;;;;;16365:29:0;16361:143;;;16421:9;:22;;16413:31;;;;;;16361:143;;;16489:9;:14;16481:23;;;;;;16546:58;16557:8;16567:9;16578;16589:14;16546:10;:58::i;:::-;16528:76;-1:-1:-1;16661:1:0;16648:14;;16640:23;;;;;;-1:-1:-1;;;;;16757:29:0;;-1:-1:-1;;;;;;;;;;;16757:29:0;16753:220;;;-1:-1:-1;16855:9:0;;-1:-1:-1;16821:10:0;16753:220;;;-1:-1:-1;16953:8:0;;-1:-1:-1;;;16911:19:0;;16753:220;16985:23;;-1:-1:-1;;;;;16985:23:0;:39;17039:5;17059:11;16985:23;17101:12;16985:139;;-1:-1:-1;;;16985:139:0;;;;;;-1:-1:-1;;;;;16985:139:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16985:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;17172:29:0;;-1:-1:-1;;;;;;;;;;;17172:29:0;17168:138;;-1:-1:-1;;;;;17226:21:0;;;17260;;;;:11;:21;;;;;;;17226;;;;17248:10;;17260:21;;;17283:9;;17260:21;17226:67;;;;;;-1:-1:-1;;;17226:67:0;;;;;;-1:-1:-1;;;;;17226:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17218:76;;;;;;;;-1:-1:-1;;;;;17351:30:0;;-1:-1:-1;;;;;;;;;;;17351:30:0;17347:208;;;-1:-1:-1;;;;;17398:20:0;;:32;;;;17419:10;17398:32;;;;;;;;;;;;;;;;;;;;;;;;;;17347:208;;;-1:-1:-1;;;;;17471:22:0;;;17494;;;;:11;:22;;;;;;;17471;;;;17494;;17518:11;;17531:10;;17494:22;17471:71;;;;;;-1:-1:-1;;;17471:71:0;;;;;;-1:-1:-1;;;;;17471:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17463:80;;;;;;;;17580:10;-1:-1:-1;;;;;17567:81:0;;17592:8;17602:9;17613;17624:10;17636:11;17567:81;;-1:-1:-1;;;;;17567:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17668:4:0;;15986:1694;-1:-1:-1;;;;;;;;;15986:1694:0:o;1540:479::-;1596:4;;-1:-1:-1;;;;;1617:26:0;;-1:-1:-1;;;;;;;;;;;1617:26:0;1613:51;;;1300:2;1645:19;;;;1613:51;-1:-1:-1;;;;;;1719:15:0;;;;;;:8;:15;;;;;;1935:18;;1932:46;;;1962:5;-1:-1:-1;;;;;1962:14:0;;:16;;;;;;;;;;;-1:-1:-1;;;1962:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1955:23;;;;1932:46;1998:13;1991:20;;1540:479;;;;;:::o;2604:861::-;2706:4;;;1096:6;2731:17;;;2723:26;;;;;;1161:17;2768:16;;;2760:25;;;;;;2942:26;;;2938:430;;1252:2;2994:25;;;2993:43;;2985:52;;;;;;-1:-1:-1;;3092:25:0;;;3087:2;:31;3065:54;;1045:6;3065:54;3149:4;2938:430;;;1252:2;3195:25;;;3194:43;;3186:52;;;;;;-1:-1:-1;;1045:6:0;3266:18;;3328:25;;;3323:2;:31;3315:40;;2938:430;3417:11;3412:1;3398:11;3386:9;:23;:27;3385:43;;;;;;;;;2604:861;-1:-1:-1;;;;;;;2604:861:0:o;2027:569::-;2129:4;1096:6;2154:17;;;2146:26;;;;;;1161:17;2191:16;;;2183:25;;;;;;2225:26;;;2221:368;;1252:2;2277:25;;;2276:43;;2268:52;;;;;;1045:6;2343:13;;;2365:25;;;2360:2;:31;2343:49;2342:63;;2335:70;;;;2221:368;1252:2;2447:25;;;2446:43;;2438:52;;;;;;2563:11;2549;:25;2544:2;:31;1045:6;2531:45;2522:4;2513:6;:13;2512:65;;;;;;2221:368;2027:569;;;;;;:::o;9569:8114::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://759891b305e45ecc25a9959c4d0a44c09a9387d84dbb3d83aaa761f481dbe40b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.