ETH Price: $3,284.03 (-1.43%)

Contract

0x5b1F500134bdD7f4359F5B2adC65f839737290f4

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Gov3904582023-05-24 15:22:15607 days ago1684941735IN
0x5b1F5001...9737290f4
0 ETH0.000076462.81
Set Spread Basis...2185742023-05-12 11:47:11620 days ago1683892031IN
0x5b1F5001...9737290f4
0 ETH0.000320416.86
Set Secondary Pr...2185392023-05-12 11:47:11620 days ago1683892031IN
0x5b1F5001...9737290f4
0 ETH0.000308746.67
Set Max Strict P...2185382023-05-12 11:47:11620 days ago1683892031IN
0x5b1F5001...9737290f4
0 ETH0.000307486.67
Set Token Config2184852023-05-12 11:44:55620 days ago1683891895IN
0x5b1F5001...9737290f4
0 ETH0.000469116.5
Set Token Config2184822023-05-12 11:44:55620 days ago1683891895IN
0x5b1F5001...9737290f4
0 ETH0.000470566.52
Set Token Config2184792023-05-12 11:44:55620 days ago1683891895IN
0x5b1F5001...9737290f4
0 ETH0.00047046.52
Set Token Config2184752023-05-12 11:44:55620 days ago1683891895IN
0x5b1F5001...9737290f4
0 ETH0.000475616.59
Set Token Config2184702023-05-12 11:44:55620 days ago1683891895IN
0x5b1F5001...9737290f4
0 ETH0.000481386.67
Set Token Config2184672023-05-12 11:44:55620 days ago1683891895IN
0x5b1F5001...9737290f4
0 ETH0.000481386.67

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VaultPriceFeed

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 5 : VaultPriceFeed.sol
// SPDX-License-Identifier: BUSL-1.1

import "./interfaces/v0.8/IVaultPriceFeed.sol";
import "../oracle/interfaces/v0.8/ISecondaryPriceFeed.sol";
import "@api3/contracts/v0.8/interfaces/IProxy.sol";

pragma solidity ^0.8.0;

contract VaultPriceFeed is IVaultPriceFeed {

    uint256 public constant PRICE_PRECISION = 10**30;
    uint256 public constant ONE_USD = PRICE_PRECISION;
    uint256 public constant BASIS_POINTS_DIVISOR = 10000;
    uint256 public constant MAX_SPREAD_BASIS_POINTS = 50;
    uint256 public constant MAX_ADJUSTMENT_INTERVAL = 2 hours;
    uint256 public constant MAX_ADJUSTMENT_BASIS_POINTS = 20;

    address public gov;

    bool public isSecondaryPriceEnabled = true;
    bool public favorPrimaryPrice;
    uint256 public maxStrictPriceDeviation;
    address public secondaryPriceFeed;
    uint256 public spreadThresholdBasisPoints = 30;
    uint256 public expireTimeForPriceFeed = 1 days; 


    mapping(address => address) public priceFeedProxies;
    mapping(address => uint256) public priceDecimals;
    mapping(address => uint256) public spreadBasisPoints;
    mapping(address => bool) public strictStableTokens;

    mapping(address => uint256) public override adjustmentBasisPoints;
    mapping(address => bool) public override isAdjustmentAdditive;
    mapping(address => uint256) public lastAdjustmentTimings;

    modifier onlyGov() {
        require(msg.sender == gov, "VaultPriceFeed: forbidden");
        _;
    }

    constructor()  {
        gov = msg.sender;
    }

    function setGov(address _gov) external onlyGov {
        require(_gov != address(0), "VaultPriceFeed: address(0)");
        gov = _gov;
    }

    function setAdjustment(
        address _token,
        bool _isAdditive,
        uint256 _adjustmentBps
    ) external override onlyGov {
        require(lastAdjustmentTimings[_token] + MAX_ADJUSTMENT_INTERVAL < block.timestamp, "VaultPriceFeed: adjustment frequency exceeded");
        require(_adjustmentBps <= MAX_ADJUSTMENT_BASIS_POINTS, "invalid _adjustmentBps");
        isAdjustmentAdditive[_token] = _isAdditive;
        adjustmentBasisPoints[_token] = _adjustmentBps;
        lastAdjustmentTimings[_token] = block.timestamp;
    }

    function setIsSecondaryPriceEnabled(bool _isEnabled) external override onlyGov {
        isSecondaryPriceEnabled = _isEnabled;
    }

    function setExpireTimeForPriceFeed(uint256 _expireTimeForPriceFeed) external override onlyGov {
        require(_expireTimeForPriceFeed >= 1 minutes,"invalid _expireTimeForPriceFeed");
        require(_expireTimeForPriceFeed <= 1 days,"invalid _expireTimeForPriceFeed");
        expireTimeForPriceFeed = _expireTimeForPriceFeed;
    }

    function setSecondaryPriceFeed(address _secondaryPriceFeed) external onlyGov {
        secondaryPriceFeed = _secondaryPriceFeed;
    }

    function setSpreadBasisPoints(address _token, uint256 _spreadBasisPoints) external override onlyGov {
        require(_spreadBasisPoints <= MAX_SPREAD_BASIS_POINTS, "VaultPriceFeed: invalid _spreadBasisPoints");
        spreadBasisPoints[_token] = _spreadBasisPoints;
    }

    function setSpreadThresholdBasisPoints(uint256 _spreadThresholdBasisPoints) external override onlyGov {
        spreadThresholdBasisPoints = _spreadThresholdBasisPoints;
    }

    function setFavorPrimaryPrice(bool _favorPrimaryPrice) external override onlyGov {
        favorPrimaryPrice = _favorPrimaryPrice;
    }

    function setMaxStrictPriceDeviation(uint256 _maxStrictPriceDeviation) external override onlyGov {
        maxStrictPriceDeviation = _maxStrictPriceDeviation;
    }

    function setTokenConfig(
        address _token,
        address _priceFeedProxy,
        uint256 _priceDecimals,
        bool _isStrictStable
    ) external override onlyGov {
        priceFeedProxies[_token] = _priceFeedProxy;
        priceDecimals[_token] = _priceDecimals;
        strictStableTokens[_token] = _isStrictStable;
    }

    function getPrice(
        address _token,
        bool _maximise,
        bool /*_includeAmmPrice */,
        bool /* _useSwapPricing */
    ) public view override returns (uint256) {
        uint256 price = getPriceV1(_token, _maximise);

        uint256 adjustmentBps = adjustmentBasisPoints[_token];
        if (adjustmentBps > 0) {
            bool isAdditive = isAdjustmentAdditive[_token];
            if (isAdditive) {
                price = (price * (BASIS_POINTS_DIVISOR + adjustmentBps)) / BASIS_POINTS_DIVISOR;
            } else {
                price = (price * (BASIS_POINTS_DIVISOR - adjustmentBps)) / BASIS_POINTS_DIVISOR;
            }
        }

        return price;
    }

    function getPriceV1(
        address _token,
        bool _maximise
    ) public view returns (uint256) {
        uint256 price = getPrimaryPrice(_token, _maximise);


        if (isSecondaryPriceEnabled) {
            price = getSecondaryPrice(_token, price, _maximise);
        }

        if (strictStableTokens[_token]) {
            uint256 delta = price > ONE_USD ? price - ONE_USD : ONE_USD - price;
            if (delta <= maxStrictPriceDeviation) {
                return ONE_USD;
            }

            // if _maximise and price is e.g. 1.02, return 1.02
            if (_maximise && price > ONE_USD) {
                return price;
            }

            // if !_maximise and price is e.g. 0.98, return 0.98
            if (!_maximise && price < ONE_USD) {
                return price;
            }

            return ONE_USD;
        }

        uint256 _spreadBasisPoints = spreadBasisPoints[_token];

        if (_maximise) {
            return (price * (BASIS_POINTS_DIVISOR + _spreadBasisPoints)) / BASIS_POINTS_DIVISOR;
        }

        return (price * (BASIS_POINTS_DIVISOR - _spreadBasisPoints)) / BASIS_POINTS_DIVISOR;
    }

    function getLatestPrimaryPrice(address _token) public override view returns (uint256) {
        return _getApi3Price(_token);
    }   

    function getPrimaryPrice(address _token, bool /*_maximise*/) public view override returns (uint256) {
        uint256 price = _getApi3Price(_token);

        uint256 _priceDecimals = priceDecimals[_token];
        return (price * PRICE_PRECISION) / 10 ** _priceDecimals;
    }

    function getSecondaryPrice(
        address _token,
        uint256 _referencePrice,
        bool _maximise
    ) public view returns (uint256) {
        if (secondaryPriceFeed == address(0)) {
            return _referencePrice;
        }
        return ISecondaryPriceFeed(secondaryPriceFeed).getPrice(_token, _referencePrice, _maximise);
    }

    function _getApi3Price(address _token) private view  returns (uint256) {
        address proxy = priceFeedProxies[_token];
        require(proxy != address(0), "VaultPriceFeed: invalid price feed proxy");
        (int224 price, uint256 timestamp) = IProxy(proxy).read();
        require(price > 0, "VaultPriceFeed: price not positive");
        require(
            timestamp + expireTimeForPriceFeed > block.timestamp,
            "VaultPriceFeed: expired"
        );
        return uint256(uint224(price));
    }
}

File 2 of 5 : IProxy.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/// @dev See DapiProxy.sol for comments about usage
interface IProxy {
    function read() external view returns (int224 value, uint32 timestamp);

    function api3ServerV1() external view returns (address);
}

File 3 of 5 : IProxy.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@api3/airnode-protocol-v1/contracts/api3-server-v1/proxies/interfaces/IProxy.sol";

File 4 of 5 : IVaultPriceFeed.sol
// SPDX-License-Identifier: BUSL-1.1

pragma solidity ^0.8.0;

interface IVaultPriceFeed {
    function adjustmentBasisPoints(address _token)
        external
        view
        returns (uint256);

    function isAdjustmentAdditive(address _token) external view returns (bool);

    function setAdjustment(
        address _token,
        bool _isAdditive,
        uint256 _adjustmentBps
    ) external;

    function setIsSecondaryPriceEnabled(bool _isEnabled) external;

    function setExpireTimeForPriceFeed(uint256 _expireTimeForPriceFeed) external;

    function setSpreadBasisPoints(address _token, uint256 _spreadBasisPoints)
        external;

    function setSpreadThresholdBasisPoints(uint256 _spreadThresholdBasisPoints)
        external;

    function setFavorPrimaryPrice(bool _favorPrimaryPrice) external;

    function setMaxStrictPriceDeviation(uint256 _maxStrictPriceDeviation)
        external;

    function getPrice(
        address _token,
        bool _maximise,
        bool _includeAmmPrice,
        bool _useSwapPricing
    ) external view returns (uint256);

    function getPrimaryPrice(address _token, bool _maximise)
        external
        view
        returns (uint256);

    function setTokenConfig(
        address _token,
        address _priceFeedProxy,
        uint256 _priceDecimals,
        bool _isStrictStable
    ) external;

    function getLatestPrimaryPrice(address _token) external view returns (uint256);


}

File 5 of 5 : ISecondaryPriceFeed.sol
// SPDX-License-Identifier: BUSL-1.1

pragma solidity ^0.8.0;

interface ISecondaryPriceFeed {
    function getPrice(address _token, uint256 _referencePrice, bool _maximise) external view returns (uint256);
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BASIS_POINTS_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ADJUSTMENT_BASIS_POINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ADJUSTMENT_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SPREAD_BASIS_POINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ONE_USD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"adjustmentBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expireTimeForPriceFeed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"favorPrimaryPrice","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getLatestPrimaryPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_maximise","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_maximise","type":"bool"}],"name":"getPriceV1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"","type":"bool"}],"name":"getPrimaryPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_referencePrice","type":"uint256"},{"internalType":"bool","name":"_maximise","type":"bool"}],"name":"getSecondaryPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAdjustmentAdditive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSecondaryPriceEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastAdjustmentTimings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxStrictPriceDeviation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"priceDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"priceFeedProxies","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondaryPriceFeed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_isAdditive","type":"bool"},{"internalType":"uint256","name":"_adjustmentBps","type":"uint256"}],"name":"setAdjustment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expireTimeForPriceFeed","type":"uint256"}],"name":"setExpireTimeForPriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_favorPrimaryPrice","type":"bool"}],"name":"setFavorPrimaryPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isEnabled","type":"bool"}],"name":"setIsSecondaryPriceEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxStrictPriceDeviation","type":"uint256"}],"name":"setMaxStrictPriceDeviation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_secondaryPriceFeed","type":"address"}],"name":"setSecondaryPriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_spreadBasisPoints","type":"uint256"}],"name":"setSpreadBasisPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_spreadThresholdBasisPoints","type":"uint256"}],"name":"setSpreadThresholdBasisPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_priceFeedProxy","type":"address"},{"internalType":"uint256","name":"_priceDecimals","type":"uint256"},{"internalType":"bool","name":"_isStrictStable","type":"bool"}],"name":"setTokenConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"spreadBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"spreadThresholdBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"strictStableTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040526001600060146101000a81548160ff021916908315150217905550601e6003556201518060045534801561003757600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612672806100876000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c8063717cfe7a11610125578063a39c73a3116100ad578063cefe0f211161007c578063cefe0f2114610654578063cfad57a214610684578063d694376c146106a0578063eb1c92a9146106bc578063ff59f163146106d857610211565b8063a39c73a3146105ba578063afafed88146105d8578063b731dd8714610608578063b8f611051461062457610211565b806395082d25116100f457806395082d25146105165780639a0a6635146105345780639b18dc47146105505780639b8893801461056e578063a27ea3861461058a57610211565b8063717cfe7a1461047a5780637cdddae6146104aa5780638b86616c146104da57806390a5d2cb146104f857610211565b806348cac277116101a857806356c8c2c11161017757806356c8c2c1146103c2578063593d9e80146103f2578063604f37e91461041057806367781c0e1461042c5780636ce8a44b1461044a57610211565b806348cac277146103285780634a4b1f4f146103585780634b9ade471461037657806356bf9de41461039257610211565b80632fc3a70a116101e45780632fc3a70a1461028c578063378e7bf7146102bc5780633eba8d36146102da5780633ebbc6011461030a57610211565b80630957aed914610216578063126082cf1461023457806312d43a51146102525780632fbfe3d314610270575b600080fd5b61021e6106f4565b60405161022b9190611a31565b60405180910390f35b61023c6106f9565b6040516102499190611a31565b60405180910390f35b61025a6106ff565b6040516102679190611a8d565b60405180910390f35b61028a60048036038101906102859190611ad9565b610723565b005b6102a660048036038101906102a19190611b6a565b6107bb565b6040516102b39190611a31565b60405180910390f35b6102c46108d3565b6040516102d19190611a31565b60405180910390f35b6102f460048036038101906102ef9190611bd1565b6108d9565b6040516103019190611a31565b60405180910390f35b6103126109e2565b60405161031f9190611c33565b60405180910390f35b610342600480360381019061033d9190611c4e565b6109f5565b60405161034f9190611a31565b60405180910390f35b610360610a0d565b60405161036d9190611a31565b60405180910390f35b610390600480360381019061038b9190611c7b565b610a12565b005b6103ac60048036038101906103a79190611c4e565b610bbf565b6040516103b99190611a31565b60405180910390f35b6103dc60048036038101906103d79190611ce2565b610bd1565b6040516103e99190611a31565b60405180910390f35b6103fa610c5d565b6040516104079190611c33565b60405180910390f35b61042a60048036038101906104259190611d22565b610c70565b005b610434610d1b565b6040516104419190611a31565b60405180910390f35b610464600480360381019061045f9190611c4e565b610d2c565b6040516104719190611c33565b60405180910390f35b610494600480360381019061048f9190611c4e565b610d4c565b6040516104a19190611a31565b60405180910390f35b6104c460048036038101906104bf9190611ce2565b610d64565b6040516104d19190611a31565b60405180910390f35b6104e2610f6a565b6040516104ef9190611a8d565b60405180910390f35b610500610f90565b60405161050d9190611a31565b60405180910390f35b61051e610f96565b60405161052b9190611a31565b60405180910390f35b61054e60048036038101906105499190611c4e565b610fa7565b005b610558611079565b6040516105659190611a31565b60405180910390f35b61058860048036038101906105839190611d4f565b61107f565b005b6105a4600480360381019061059f9190611c4e565b611199565b6040516105b19190611a31565b60405180910390f35b6105c26111b1565b6040516105cf9190611a31565b60405180910390f35b6105f260048036038101906105ed9190611c4e565b6111b7565b6040516105ff9190611a8d565b60405180910390f35b610622600480360381019061061d9190611ad9565b6111ea565b005b61063e60048036038101906106399190611c4e565b611282565b60405161064b9190611c33565b60405180910390f35b61066e60048036038101906106699190611c4e565b6112a2565b60405161067b9190611a31565b60405180910390f35b61069e60048036038101906106999190611c4e565b6112ba565b005b6106ba60048036038101906106b59190611d8f565b6113fa565b005b6106d660048036038101906106d19190611d22565b61163e565b005b6106f260048036038101906106ed9190611ad9565b6116e9565b005b603281565b61271081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a890611e3f565b60405180910390fd5b8060018190555050565b6000806107c88686610d64565b90506000600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111156108c6576000600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050801561089b576127108261271061087f9190611e8e565b8461088a9190611ec2565b6108949190611f33565b92506108c4565b612710826127106108ac9190611f64565b846108b79190611ec2565b6108c19190611f33565b92505b505b8192505050949350505050565b60015481565b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610938578290506109db565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637fece3688585856040518463ffffffff1660e01b815260040161099793929190611f98565b602060405180830381865afa1580156109b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d89190611fe4565b90505b9392505050565b600060149054906101000a900460ff1681565b60096020528060005260406000206000915090505481565b601481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9790611e3f565b60405180910390fd5b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b6000610bca8261180b565b9050919050565b600080610bdd8461180b565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600a610c309190612144565b6c0c9f2c9cd04674edea4000000083610c499190611ec2565b610c539190611f33565b9250505092915050565b600060159054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590611e3f565b60405180910390fd5b80600060156101000a81548160ff02191690831515021790555050565b6c0c9f2c9cd04674edea4000000081565b600a6020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915090505481565b600080610d718484610bd1565b9050600060149054906101000a900460ff1615610d9657610d938482856108d9565b90505b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ec05760006c0c9f2c9cd04674edea400000008211610e1c57816c0c9f2c9cd04674edea40000000610e179190611f64565b610e36565b6c0c9f2c9cd04674edea4000000082610e359190611f64565b5b90506001548111610e58576c0c9f2c9cd04674edea4000000092505050610f64565b838015610e7157506c0c9f2c9cd04674edea4000000082115b15610e80578192505050610f64565b83158015610e9a57506c0c9f2c9cd04674edea4000000082105b15610ea9578192505050610f64565b6c0c9f2c9cd04674edea4000000092505050610f64565b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508315610f395761271081612710610f1b9190611e8e565b83610f269190611ec2565b610f309190611f33565b92505050610f64565b61271081612710610f4a9190611f64565b83610f559190611ec2565b610f5f9190611f33565b925050505b92915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b6c0c9f2c9cd04674edea4000000081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102c90611e3f565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c2081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110490611e3f565b60405180910390fd5b6032811115611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890612201565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60076020528060005260406000206000915090505481565b60035481565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90611e3f565b60405180910390fd5b8060038190555050565b60086020528060005260406000206000915054906101000a900460ff1681565b60066020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133f90611e3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ae9061226d565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147f90611e3f565b60405180910390fd5b42611c20600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114d69190611e8e565b10611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d906122ff565b60405180910390fd5b601481111561155a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115519061236b565b60405180910390fd5b81600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c390611e3f565b60405180910390fd5b80600060146101000a81548160ff02191690831515021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90611e3f565b60405180910390fd5b603c8110156117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b2906123d7565b60405180910390fd5b62015180811115611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f8906123d7565b60405180910390fd5b8060048190555050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d690612469565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff166357de26a46040518163ffffffff1660e01b81526004016040805180830381865afa15801561192c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195091906124fe565b63ffffffff1691509150600082601b0b136119a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611997906125b0565b60405180910390fd5b42600454826119af9190611e8e565b116119ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e69061261c565b60405180910390fd5b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169350505050919050565b6000819050919050565b611a2b81611a18565b82525050565b6000602082019050611a466000830184611a22565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a7782611a4c565b9050919050565b611a8781611a6c565b82525050565b6000602082019050611aa26000830184611a7e565b92915050565b600080fd5b611ab681611a18565b8114611ac157600080fd5b50565b600081359050611ad381611aad565b92915050565b600060208284031215611aef57611aee611aa8565b5b6000611afd84828501611ac4565b91505092915050565b611b0f81611a6c565b8114611b1a57600080fd5b50565b600081359050611b2c81611b06565b92915050565b60008115159050919050565b611b4781611b32565b8114611b5257600080fd5b50565b600081359050611b6481611b3e565b92915050565b60008060008060808587031215611b8457611b83611aa8565b5b6000611b9287828801611b1d565b9450506020611ba387828801611b55565b9350506040611bb487828801611b55565b9250506060611bc587828801611b55565b91505092959194509250565b600080600060608486031215611bea57611be9611aa8565b5b6000611bf886828701611b1d565b9350506020611c0986828701611ac4565b9250506040611c1a86828701611b55565b9150509250925092565b611c2d81611b32565b82525050565b6000602082019050611c486000830184611c24565b92915050565b600060208284031215611c6457611c63611aa8565b5b6000611c7284828501611b1d565b91505092915050565b60008060008060808587031215611c9557611c94611aa8565b5b6000611ca387828801611b1d565b9450506020611cb487828801611b1d565b9350506040611cc587828801611ac4565b9250506060611cd687828801611b55565b91505092959194509250565b60008060408385031215611cf957611cf8611aa8565b5b6000611d0785828601611b1d565b9250506020611d1885828601611b55565b9150509250929050565b600060208284031215611d3857611d37611aa8565b5b6000611d4684828501611b55565b91505092915050565b60008060408385031215611d6657611d65611aa8565b5b6000611d7485828601611b1d565b9250506020611d8585828601611ac4565b9150509250929050565b600080600060608486031215611da857611da7611aa8565b5b6000611db686828701611b1d565b9350506020611dc786828701611b55565b9250506040611dd886828701611ac4565b9150509250925092565b600082825260208201905092915050565b7f5661756c745072696365466565643a20666f7262696464656e00000000000000600082015250565b6000611e29601983611de2565b9150611e3482611df3565b602082019050919050565b60006020820190508181036000830152611e5881611e1c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e9982611a18565b9150611ea483611a18565b9250828201905080821115611ebc57611ebb611e5f565b5b92915050565b6000611ecd82611a18565b9150611ed883611a18565b9250828202611ee681611a18565b91508282048414831517611efd57611efc611e5f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611f3e82611a18565b9150611f4983611a18565b925082611f5957611f58611f04565b5b828204905092915050565b6000611f6f82611a18565b9150611f7a83611a18565b9250828203905081811115611f9257611f91611e5f565b5b92915050565b6000606082019050611fad6000830186611a7e565b611fba6020830185611a22565b611fc76040830184611c24565b949350505050565b600081519050611fde81611aad565b92915050565b600060208284031215611ffa57611ff9611aa8565b5b600061200884828501611fcf565b91505092915050565b60008160011c9050919050565b6000808291508390505b60018511156120685780860481111561204457612043611e5f565b5b60018516156120535780820291505b808102905061206185612011565b9450612028565b94509492505050565b600082612081576001905061213d565b8161208f576000905061213d565b81600181146120a557600281146120af576120de565b600191505061213d565b60ff8411156120c1576120c0611e5f565b5b8360020a9150848211156120d8576120d7611e5f565b5b5061213d565b5060208310610133831016604e8410600b84101617156121135782820a90508381111561210e5761210d611e5f565b5b61213d565b612120848484600161201e565b9250905081840481111561213757612136611e5f565b5b81810290505b9392505050565b600061214f82611a18565b915061215a83611a18565b92506121877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612071565b905092915050565b7f5661756c745072696365466565643a20696e76616c6964205f7370726561644260008201527f61736973506f696e747300000000000000000000000000000000000000000000602082015250565b60006121eb602a83611de2565b91506121f68261218f565b604082019050919050565b6000602082019050818103600083015261221a816121de565b9050919050565b7f5661756c745072696365466565643a2061646472657373283029000000000000600082015250565b6000612257601a83611de2565b915061226282612221565b602082019050919050565b600060208201905081810360008301526122868161224a565b9050919050565b7f5661756c745072696365466565643a2061646a7573746d656e7420667265717560008201527f656e637920657863656564656400000000000000000000000000000000000000602082015250565b60006122e9602d83611de2565b91506122f48261228d565b604082019050919050565b60006020820190508181036000830152612318816122dc565b9050919050565b7f696e76616c6964205f61646a7573746d656e7442707300000000000000000000600082015250565b6000612355601683611de2565b91506123608261231f565b602082019050919050565b6000602082019050818103600083015261238481612348565b9050919050565b7f696e76616c6964205f65787069726554696d65466f7250726963654665656400600082015250565b60006123c1601f83611de2565b91506123cc8261238b565b602082019050919050565b600060208201905081810360008301526123f0816123b4565b9050919050565b7f5661756c745072696365466565643a20696e76616c696420707269636520666560008201527f65642070726f7879000000000000000000000000000000000000000000000000602082015250565b6000612453602883611de2565b915061245e826123f7565b604082019050919050565b6000602082019050818103600083015261248281612446565b9050919050565b600081601b0b9050919050565b61249f81612489565b81146124aa57600080fd5b50565b6000815190506124bc81612496565b92915050565b600063ffffffff82169050919050565b6124db816124c2565b81146124e657600080fd5b50565b6000815190506124f8816124d2565b92915050565b6000806040838503121561251557612514611aa8565b5b6000612523858286016124ad565b9250506020612534858286016124e9565b9150509250929050565b7f5661756c745072696365466565643a207072696365206e6f7420706f7369746960008201527f7665000000000000000000000000000000000000000000000000000000000000602082015250565b600061259a602283611de2565b91506125a58261253e565b604082019050919050565b600060208201905081810360008301526125c98161258d565b9050919050565b7f5661756c745072696365466565643a2065787069726564000000000000000000600082015250565b6000612606601783611de2565b9150612611826125d0565b602082019050919050565b60006020820190508181036000830152612635816125f9565b905091905056fea2646970667358221220c9bd0b39590d54e0b95ea418056e3340e74a348cb603dd25dbafd04ea632b13264736f6c63430008110033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102115760003560e01c8063717cfe7a11610125578063a39c73a3116100ad578063cefe0f211161007c578063cefe0f2114610654578063cfad57a214610684578063d694376c146106a0578063eb1c92a9146106bc578063ff59f163146106d857610211565b8063a39c73a3146105ba578063afafed88146105d8578063b731dd8714610608578063b8f611051461062457610211565b806395082d25116100f457806395082d25146105165780639a0a6635146105345780639b18dc47146105505780639b8893801461056e578063a27ea3861461058a57610211565b8063717cfe7a1461047a5780637cdddae6146104aa5780638b86616c146104da57806390a5d2cb146104f857610211565b806348cac277116101a857806356c8c2c11161017757806356c8c2c1146103c2578063593d9e80146103f2578063604f37e91461041057806367781c0e1461042c5780636ce8a44b1461044a57610211565b806348cac277146103285780634a4b1f4f146103585780634b9ade471461037657806356bf9de41461039257610211565b80632fc3a70a116101e45780632fc3a70a1461028c578063378e7bf7146102bc5780633eba8d36146102da5780633ebbc6011461030a57610211565b80630957aed914610216578063126082cf1461023457806312d43a51146102525780632fbfe3d314610270575b600080fd5b61021e6106f4565b60405161022b9190611a31565b60405180910390f35b61023c6106f9565b6040516102499190611a31565b60405180910390f35b61025a6106ff565b6040516102679190611a8d565b60405180910390f35b61028a60048036038101906102859190611ad9565b610723565b005b6102a660048036038101906102a19190611b6a565b6107bb565b6040516102b39190611a31565b60405180910390f35b6102c46108d3565b6040516102d19190611a31565b60405180910390f35b6102f460048036038101906102ef9190611bd1565b6108d9565b6040516103019190611a31565b60405180910390f35b6103126109e2565b60405161031f9190611c33565b60405180910390f35b610342600480360381019061033d9190611c4e565b6109f5565b60405161034f9190611a31565b60405180910390f35b610360610a0d565b60405161036d9190611a31565b60405180910390f35b610390600480360381019061038b9190611c7b565b610a12565b005b6103ac60048036038101906103a79190611c4e565b610bbf565b6040516103b99190611a31565b60405180910390f35b6103dc60048036038101906103d79190611ce2565b610bd1565b6040516103e99190611a31565b60405180910390f35b6103fa610c5d565b6040516104079190611c33565b60405180910390f35b61042a60048036038101906104259190611d22565b610c70565b005b610434610d1b565b6040516104419190611a31565b60405180910390f35b610464600480360381019061045f9190611c4e565b610d2c565b6040516104719190611c33565b60405180910390f35b610494600480360381019061048f9190611c4e565b610d4c565b6040516104a19190611a31565b60405180910390f35b6104c460048036038101906104bf9190611ce2565b610d64565b6040516104d19190611a31565b60405180910390f35b6104e2610f6a565b6040516104ef9190611a8d565b60405180910390f35b610500610f90565b60405161050d9190611a31565b60405180910390f35b61051e610f96565b60405161052b9190611a31565b60405180910390f35b61054e60048036038101906105499190611c4e565b610fa7565b005b610558611079565b6040516105659190611a31565b60405180910390f35b61058860048036038101906105839190611d4f565b61107f565b005b6105a4600480360381019061059f9190611c4e565b611199565b6040516105b19190611a31565b60405180910390f35b6105c26111b1565b6040516105cf9190611a31565b60405180910390f35b6105f260048036038101906105ed9190611c4e565b6111b7565b6040516105ff9190611a8d565b60405180910390f35b610622600480360381019061061d9190611ad9565b6111ea565b005b61063e60048036038101906106399190611c4e565b611282565b60405161064b9190611c33565b60405180910390f35b61066e60048036038101906106699190611c4e565b6112a2565b60405161067b9190611a31565b60405180910390f35b61069e60048036038101906106999190611c4e565b6112ba565b005b6106ba60048036038101906106b59190611d8f565b6113fa565b005b6106d660048036038101906106d19190611d22565b61163e565b005b6106f260048036038101906106ed9190611ad9565b6116e9565b005b603281565b61271081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a890611e3f565b60405180910390fd5b8060018190555050565b6000806107c88686610d64565b90506000600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111156108c6576000600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050801561089b576127108261271061087f9190611e8e565b8461088a9190611ec2565b6108949190611f33565b92506108c4565b612710826127106108ac9190611f64565b846108b79190611ec2565b6108c19190611f33565b92505b505b8192505050949350505050565b60015481565b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610938578290506109db565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637fece3688585856040518463ffffffff1660e01b815260040161099793929190611f98565b602060405180830381865afa1580156109b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d89190611fe4565b90505b9392505050565b600060149054906101000a900460ff1681565b60096020528060005260406000206000915090505481565b601481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9790611e3f565b60405180910390fd5b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b6000610bca8261180b565b9050919050565b600080610bdd8461180b565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600a610c309190612144565b6c0c9f2c9cd04674edea4000000083610c499190611ec2565b610c539190611f33565b9250505092915050565b600060159054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590611e3f565b60405180910390fd5b80600060156101000a81548160ff02191690831515021790555050565b6c0c9f2c9cd04674edea4000000081565b600a6020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915090505481565b600080610d718484610bd1565b9050600060149054906101000a900460ff1615610d9657610d938482856108d9565b90505b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ec05760006c0c9f2c9cd04674edea400000008211610e1c57816c0c9f2c9cd04674edea40000000610e179190611f64565b610e36565b6c0c9f2c9cd04674edea4000000082610e359190611f64565b5b90506001548111610e58576c0c9f2c9cd04674edea4000000092505050610f64565b838015610e7157506c0c9f2c9cd04674edea4000000082115b15610e80578192505050610f64565b83158015610e9a57506c0c9f2c9cd04674edea4000000082105b15610ea9578192505050610f64565b6c0c9f2c9cd04674edea4000000092505050610f64565b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508315610f395761271081612710610f1b9190611e8e565b83610f269190611ec2565b610f309190611f33565b92505050610f64565b61271081612710610f4a9190611f64565b83610f559190611ec2565b610f5f9190611f33565b925050505b92915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b6c0c9f2c9cd04674edea4000000081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102c90611e3f565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c2081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110490611e3f565b60405180910390fd5b6032811115611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890612201565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60076020528060005260406000206000915090505481565b60035481565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90611e3f565b60405180910390fd5b8060038190555050565b60086020528060005260406000206000915054906101000a900460ff1681565b60066020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133f90611e3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ae9061226d565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147f90611e3f565b60405180910390fd5b42611c20600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114d69190611e8e565b10611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d906122ff565b60405180910390fd5b601481111561155a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115519061236b565b60405180910390fd5b81600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c390611e3f565b60405180910390fd5b80600060146101000a81548160ff02191690831515021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90611e3f565b60405180910390fd5b603c8110156117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b2906123d7565b60405180910390fd5b62015180811115611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f8906123d7565b60405180910390fd5b8060048190555050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d690612469565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff166357de26a46040518163ffffffff1660e01b81526004016040805180830381865afa15801561192c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195091906124fe565b63ffffffff1691509150600082601b0b136119a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611997906125b0565b60405180910390fd5b42600454826119af9190611e8e565b116119ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e69061261c565b60405180910390fd5b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169350505050919050565b6000819050919050565b611a2b81611a18565b82525050565b6000602082019050611a466000830184611a22565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a7782611a4c565b9050919050565b611a8781611a6c565b82525050565b6000602082019050611aa26000830184611a7e565b92915050565b600080fd5b611ab681611a18565b8114611ac157600080fd5b50565b600081359050611ad381611aad565b92915050565b600060208284031215611aef57611aee611aa8565b5b6000611afd84828501611ac4565b91505092915050565b611b0f81611a6c565b8114611b1a57600080fd5b50565b600081359050611b2c81611b06565b92915050565b60008115159050919050565b611b4781611b32565b8114611b5257600080fd5b50565b600081359050611b6481611b3e565b92915050565b60008060008060808587031215611b8457611b83611aa8565b5b6000611b9287828801611b1d565b9450506020611ba387828801611b55565b9350506040611bb487828801611b55565b9250506060611bc587828801611b55565b91505092959194509250565b600080600060608486031215611bea57611be9611aa8565b5b6000611bf886828701611b1d565b9350506020611c0986828701611ac4565b9250506040611c1a86828701611b55565b9150509250925092565b611c2d81611b32565b82525050565b6000602082019050611c486000830184611c24565b92915050565b600060208284031215611c6457611c63611aa8565b5b6000611c7284828501611b1d565b91505092915050565b60008060008060808587031215611c9557611c94611aa8565b5b6000611ca387828801611b1d565b9450506020611cb487828801611b1d565b9350506040611cc587828801611ac4565b9250506060611cd687828801611b55565b91505092959194509250565b60008060408385031215611cf957611cf8611aa8565b5b6000611d0785828601611b1d565b9250506020611d1885828601611b55565b9150509250929050565b600060208284031215611d3857611d37611aa8565b5b6000611d4684828501611b55565b91505092915050565b60008060408385031215611d6657611d65611aa8565b5b6000611d7485828601611b1d565b9250506020611d8585828601611ac4565b9150509250929050565b600080600060608486031215611da857611da7611aa8565b5b6000611db686828701611b1d565b9350506020611dc786828701611b55565b9250506040611dd886828701611ac4565b9150509250925092565b600082825260208201905092915050565b7f5661756c745072696365466565643a20666f7262696464656e00000000000000600082015250565b6000611e29601983611de2565b9150611e3482611df3565b602082019050919050565b60006020820190508181036000830152611e5881611e1c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e9982611a18565b9150611ea483611a18565b9250828201905080821115611ebc57611ebb611e5f565b5b92915050565b6000611ecd82611a18565b9150611ed883611a18565b9250828202611ee681611a18565b91508282048414831517611efd57611efc611e5f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611f3e82611a18565b9150611f4983611a18565b925082611f5957611f58611f04565b5b828204905092915050565b6000611f6f82611a18565b9150611f7a83611a18565b9250828203905081811115611f9257611f91611e5f565b5b92915050565b6000606082019050611fad6000830186611a7e565b611fba6020830185611a22565b611fc76040830184611c24565b949350505050565b600081519050611fde81611aad565b92915050565b600060208284031215611ffa57611ff9611aa8565b5b600061200884828501611fcf565b91505092915050565b60008160011c9050919050565b6000808291508390505b60018511156120685780860481111561204457612043611e5f565b5b60018516156120535780820291505b808102905061206185612011565b9450612028565b94509492505050565b600082612081576001905061213d565b8161208f576000905061213d565b81600181146120a557600281146120af576120de565b600191505061213d565b60ff8411156120c1576120c0611e5f565b5b8360020a9150848211156120d8576120d7611e5f565b5b5061213d565b5060208310610133831016604e8410600b84101617156121135782820a90508381111561210e5761210d611e5f565b5b61213d565b612120848484600161201e565b9250905081840481111561213757612136611e5f565b5b81810290505b9392505050565b600061214f82611a18565b915061215a83611a18565b92506121877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612071565b905092915050565b7f5661756c745072696365466565643a20696e76616c6964205f7370726561644260008201527f61736973506f696e747300000000000000000000000000000000000000000000602082015250565b60006121eb602a83611de2565b91506121f68261218f565b604082019050919050565b6000602082019050818103600083015261221a816121de565b9050919050565b7f5661756c745072696365466565643a2061646472657373283029000000000000600082015250565b6000612257601a83611de2565b915061226282612221565b602082019050919050565b600060208201905081810360008301526122868161224a565b9050919050565b7f5661756c745072696365466565643a2061646a7573746d656e7420667265717560008201527f656e637920657863656564656400000000000000000000000000000000000000602082015250565b60006122e9602d83611de2565b91506122f48261228d565b604082019050919050565b60006020820190508181036000830152612318816122dc565b9050919050565b7f696e76616c6964205f61646a7573746d656e7442707300000000000000000000600082015250565b6000612355601683611de2565b91506123608261231f565b602082019050919050565b6000602082019050818103600083015261238481612348565b9050919050565b7f696e76616c6964205f65787069726554696d65466f7250726963654665656400600082015250565b60006123c1601f83611de2565b91506123cc8261238b565b602082019050919050565b600060208201905081810360008301526123f0816123b4565b9050919050565b7f5661756c745072696365466565643a20696e76616c696420707269636520666560008201527f65642070726f7879000000000000000000000000000000000000000000000000602082015250565b6000612453602883611de2565b915061245e826123f7565b604082019050919050565b6000602082019050818103600083015261248281612446565b9050919050565b600081601b0b9050919050565b61249f81612489565b81146124aa57600080fd5b50565b6000815190506124bc81612496565b92915050565b600063ffffffff82169050919050565b6124db816124c2565b81146124e657600080fd5b50565b6000815190506124f8816124d2565b92915050565b6000806040838503121561251557612514611aa8565b5b6000612523858286016124ad565b9250506020612534858286016124e9565b9150509250929050565b7f5661756c745072696365466565643a207072696365206e6f7420706f7369746960008201527f7665000000000000000000000000000000000000000000000000000000000000602082015250565b600061259a602283611de2565b91506125a58261253e565b604082019050919050565b600060208201905081810360008301526125c98161258d565b9050919050565b7f5661756c745072696365466565643a2065787069726564000000000000000000600082015250565b6000612606601783611de2565b9150612611826125d0565b602082019050919050565b60006020820190508181036000830152612635816125f9565b905091905056fea2646970667358221220c9bd0b39590d54e0b95ea418056e3340e74a348cb603dd25dbafd04ea632b13264736f6c63430008110033

Block Transaction Gas Used Reward
view all blocks sequenced

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
[ 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.