ETH Price: $2,433.62 (+1.26%)

Contract

0xAD84a44a673Be4FdcD5e39Ebd15eBC404E87F314
 

Overview

ETH Balance

0.192695167045981601 ETH

Eth Value

$468.95 (@ $2,433.62/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Enable Trade116608082021-01-15 16:29:031360 days ago1610728143IN
Kyber: Reserve CND
0 ETH0.00799975275
Transfer116606952021-01-15 16:05:071360 days ago1610726707IN
Kyber: Reserve CND
17 ETH0.00625055278
Withdraw Token116604982021-01-15 15:26:561360 days ago1610724416IN
Kyber: Reserve CND
0 ETH0.01235567106
Disable Trade116604912021-01-15 15:26:181360 days ago1610724378IN
Kyber: Reserve CND
0 ETH0.00311375106
Withdraw Ether111944652020-11-05 2:22:391431 days ago1604542959IN
Kyber: Reserve CND
0 ETH0.00068231.00000123
Transfer Admin111944612020-11-05 2:21:591431 days ago1604542919IN
Kyber: Reserve CND
0 ETH0.0005488824.00000123
Enable Trade106128652020-08-07 13:07:261521 days ago1596805646IN
Kyber: Reserve CND
0 ETH0.0022690278
Transfer106128512020-08-07 13:04:531521 days ago1596805493IN
Kyber: Reserve CND
15.104 ETH0.0021134994
Withdraw Token106126632020-08-07 12:22:211521 days ago1596802941IN
Kyber: Reserve CND
0 ETH0.0086856770
Disable Trade106126282020-08-07 12:13:581521 days ago1596802438IN
Kyber: Reserve CND
0 ETH0.0019093765
Set Contracts104069992020-07-06 16:38:151553 days ago1594053495IN
Kyber: Reserve CND
0 ETH0.0017397550
Set Contracts103352702020-06-25 13:49:381564 days ago1593092978IN
Kyber: Reserve CND
0 ETH0.0016000146
Transfer103278622020-06-24 10:12:441565 days ago1592993564IN
Kyber: Reserve CND
0.00802824 ETH0.0013490460
Transfer103278382020-06-24 10:08:101565 days ago1592993290IN
Kyber: Reserve CND
69.99197176 ETH0.0013490460
Set Contracts103214722020-06-23 10:32:331566 days ago1592908353IN
Kyber: Reserve CND
0 ETH0.0012178235
Withdraw Token103214432020-06-23 10:26:131566 days ago1592907973IN
Kyber: Reserve CND
0 ETH0.0043428335
Withdraw Ether103214372020-06-23 10:25:201566 days ago1592907920IN
Kyber: Reserve CND
0 ETH0.0020058135
Transfer103166772020-06-22 16:36:181567 days ago1592843778IN
Kyber: Reserve CND
70 ETH0.001124250
Transfer Admin Q...103152782020-06-22 11:34:501567 days ago1592825690IN
Kyber: Reserve CND
0 ETH0.0009728130
Add Alerter103152782020-06-22 11:34:501567 days ago1592825690IN
Kyber: Reserve CND
0 ETH0.0026943630
Add Operator103152782020-06-22 11:34:501567 days ago1592825690IN
Kyber: Reserve CND
0 ETH0.0027016230
Approve Withdraw...103152782020-06-22 11:34:501567 days ago1592825690IN
Kyber: Reserve CND
0 ETH0.0037408530
Approve Withdraw...103152782020-06-22 11:34:501567 days ago1592825690IN
Kyber: Reserve CND
0 ETH0.0020291130
0x60606040103152782020-06-22 11:34:501567 days ago1592825690IN
 Contract Creation
0 ETH0.0576213630

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
173454342023-05-26 19:46:11499 days ago1685130371
Kyber: Reserve CND
0.1202005 ETH
173452702023-05-26 19:13:23499 days ago1685128403
Kyber: Reserve CND
0.79010544 ETH
173452622023-05-26 19:11:47499 days ago1685128307
Kyber: Reserve CND
0.9186309 ETH
173452612023-05-26 19:11:35499 days ago1685128295
Kyber: Reserve CND
0.93501491 ETH
173452602023-05-26 19:11:23499 days ago1685128283
Kyber: Reserve CND
0.61567154 ETH
173452592023-05-26 19:11:11499 days ago1685128271
Kyber: Reserve CND
0.96343637 ETH
173452582023-05-26 19:10:59499 days ago1685128259
Kyber: Reserve CND
0.98137381 ETH
173452582023-05-26 19:10:59499 days ago1685128259
Kyber: Reserve CND
0.98623827 ETH
173452572023-05-26 19:10:47499 days ago1685128247
Kyber: Reserve CND
0.99795264 ETH
173452122023-05-26 19:01:47499 days ago1685127707
Kyber: Reserve CND
3.50166915 ETH
173451702023-05-26 18:53:23499 days ago1685127203
Kyber: Reserve CND
3.961035 ETH
143236342022-03-05 0:07:25946 days ago1646438845
Kyber: Reserve CND
0.98020892 ETH
143236002022-03-04 23:58:10946 days ago1646438290
Kyber: Reserve CND
0.99735159 ETH
143235932022-03-04 23:57:21946 days ago1646438241
Kyber: Reserve CND
1.998 ETH
141487452022-02-05 22:42:01973 days ago1644100921
Kyber: Reserve CND
0.87387278 ETH
141487372022-02-05 22:40:14973 days ago1644100814
Kyber: Reserve CND
0.80653815 ETH
141487342022-02-05 22:39:44973 days ago1644100784
Kyber: Reserve CND
0.82154291 ETH
141487192022-02-05 22:36:58973 days ago1644100618
Kyber: Reserve CND
0.81996988 ETH
141487102022-02-05 22:35:51973 days ago1644100551
Kyber: Reserve CND
3.25195666 ETH
141405132022-02-04 16:08:07975 days ago1643990887
Kyber: Reserve CND
0.33013742 ETH
141404842022-02-04 16:00:13975 days ago1643990413
Kyber: Reserve CND
0.41735259 ETH
138847932021-12-27 3:11:081014 days ago1640574668
Kyber: Reserve CND
0.52393394 ETH
138847912021-12-27 3:10:101014 days ago1640574610
Kyber: Reserve CND
0.48818184 ETH
138847892021-12-27 3:09:501014 days ago1640574590
Kyber: Reserve CND
0.97847117 ETH
138847722021-12-27 3:06:491014 days ago1640574409
Kyber: Reserve CND
0.63683626 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.