Cardona Testnet

Contract

0x896419Ed2E0dC848a1f7d2814F4e5Df4b9B9bFcc

Overview

ETH Balance

0 ETH

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Transfer29631482024-05-08 13:57:22210 days ago1715176642IN
0x896419Ed...4b9B9bFcc
0 ETH0.000263035.1
Approve29106742024-05-06 17:53:39212 days ago1715018019IN
0x896419Ed...4b9B9bFcc
0 ETH0.000258785.5853
Faucet29106682024-05-06 17:53:21212 days ago1715018001IN
0x896419Ed...4b9B9bFcc
0 ETH0.000167444.92
Faucet29106662024-05-06 17:53:15212 days ago1715017995IN
0x896419Ed...4b9B9bFcc
0 ETH0.000190925.61
Faucet29106632024-05-06 17:53:06212 days ago1715017986IN
0x896419Ed...4b9B9bFcc
0 ETH0.000217476.39
Faucet29106612024-05-06 17:52:59212 days ago1715017979IN
0x896419Ed...4b9B9bFcc
0 ETH0.000217476.39
Faucet29106592024-05-06 17:52:53212 days ago1715017973IN
0x896419Ed...4b9B9bFcc
0 ETH0.000326736.39
Approve13443372024-03-13 1:52:48267 days ago1710294768IN
0x896419Ed...4b9B9bFcc
0 ETH0.000006160.133
Faucet13442372024-03-13 1:47:42267 days ago1710294462IN
0x896419Ed...4b9B9bFcc
0 ETH0.000006850.134
Approve13441132024-03-13 1:41:23267 days ago1710294083IN
0x896419Ed...4b9B9bFcc
0 ETH0.000006160.133
Faucet13440992024-03-13 1:40:39267 days ago1710294039IN
0x896419Ed...4b9B9bFcc
0 ETH0.000004590.135
Faucet13440842024-03-13 1:39:52267 days ago1710293992IN
0x896419Ed...4b9B9bFcc
0 ETH0.000004560.134
Faucet13440702024-03-13 1:39:10267 days ago1710293950IN
0x896419Ed...4b9B9bFcc
0 ETH0.000004560.134
Faucet13440632024-03-13 1:38:47267 days ago1710293927IN
0x896419Ed...4b9B9bFcc
0 ETH0.000004520.133
Faucet13440582024-03-13 1:38:31267 days ago1710293911IN
0x896419Ed...4b9B9bFcc
0 ETH0.000009070.133

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
70027442024-09-27 17:49:3368 days ago1727459373
0x896419Ed...4b9B9bFcc
0 ETH
69981502024-09-27 13:49:2468 days ago1727444964
0x896419Ed...4b9B9bFcc
0 ETH
69935592024-09-27 9:49:1169 days ago1727430551
0x896419Ed...4b9B9bFcc
0 ETH
69889612024-09-27 5:48:5769 days ago1727416137
0x896419Ed...4b9B9bFcc
0 ETH
69843662024-09-27 1:48:4869 days ago1727401728
0x896419Ed...4b9B9bFcc
0 ETH
69797772024-09-26 21:48:3769 days ago1727387317
0x896419Ed...4b9B9bFcc
0 ETH
69752332024-09-26 17:48:2469 days ago1727372904
0x896419Ed...4b9B9bFcc
0 ETH
69707452024-09-26 13:48:0969 days ago1727358489
0x896419Ed...4b9B9bFcc
0 ETH
69664032024-09-26 9:48:0070 days ago1727344080
0x896419Ed...4b9B9bFcc
0 ETH
69618322024-09-26 5:47:5070 days ago1727329670
0x896419Ed...4b9B9bFcc
0 ETH
69572582024-09-26 1:47:4170 days ago1727315261
0x896419Ed...4b9B9bFcc
0 ETH
69526822024-09-25 21:47:3270 days ago1727300852
0x896419Ed...4b9B9bFcc
0 ETH
69481122024-09-25 17:47:1870 days ago1727286438
0x896419Ed...4b9B9bFcc
0 ETH
69435402024-09-25 13:47:0370 days ago1727272023
0x896419Ed...4b9B9bFcc
0 ETH
69389642024-09-25 9:46:4671 days ago1727257606
0x896419Ed...4b9B9bFcc
0 ETH
69343912024-09-25 5:46:3271 days ago1727243192
0x896419Ed...4b9B9bFcc
0 ETH
69298142024-09-25 1:46:2271 days ago1727228782
0x896419Ed...4b9B9bFcc
0 ETH
69252352024-09-24 21:46:1371 days ago1727214373
0x896419Ed...4b9B9bFcc
0 ETH
69206652024-09-24 17:45:5971 days ago1727199959
0x896419Ed...4b9B9bFcc
0 ETH
69160972024-09-24 13:45:4571 days ago1727185545
0x896419Ed...4b9B9bFcc
0 ETH
69115222024-09-24 9:45:3272 days ago1727171132
0x896419Ed...4b9B9bFcc
0 ETH
69069482024-09-24 5:45:2072 days ago1727156720
0x896419Ed...4b9B9bFcc
0 ETH
69023692024-09-24 1:45:0672 days ago1727142306
0x896419Ed...4b9B9bFcc
0 ETH
68977932024-09-23 21:44:5272 days ago1727127892
0x896419Ed...4b9B9bFcc
0 ETH
68932112024-09-23 17:44:4072 days ago1727113480
0x896419Ed...4b9B9bFcc
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TellorPlayground

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
Yes with 300 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at cardona-zkevm.polygonscan.com on 2024-03-11
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract TellorPlayground {
    // Events
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event NewReport(
        bytes32 _queryId,
        uint256 _time,
        bytes _value,
        uint256 _nonce,
        bytes _queryData,
        address _reporter
    );
    event NewStaker(address _staker, uint256 _amount);
    event StakeWithdrawRequested(address _staker, uint256 _amount);
    event StakeWithdrawn(address _staker);
    event Transfer(address indexed from, address indexed to, uint256 value);

    // Storage
    mapping(bytes32 => mapping(uint256 => bool)) public isDisputed; //queryId -> timestamp -> value
    mapping(bytes32 => mapping(uint256 => address)) public reporterByTimestamp;
    mapping(address => StakeInfo) stakerDetails; //mapping from a persons address to their staking info
    mapping(bytes32 => uint256[]) public timestamps;
    mapping(bytes32 => uint256) public tips; // mapping of data IDs to the amount of TRB they are tipped
    mapping(bytes32 => mapping(uint256 => bytes)) public values; //queryId -> timestamp -> value
    mapping(bytes32 => uint256[]) public voteRounds; // mapping of vote identifier hashes to an array of dispute IDs
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => uint256) private _balances;

    uint256 public stakeAmount;
    uint256 public constant timeBasedReward = 5e17; // time based reward for a reporter for successfully submitting a value
    uint256 public tipsInContract; // number of tips within the contract
    uint256 public voteCount;
    address public token;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    // Structs
    struct StakeInfo {
        uint256 startDate; //stake start date
        uint256 stakedBalance; // staked balance
        uint256 lockedBalance; // amount locked for withdrawal
        uint256 reporterLastTimestamp; // timestamp of reporter's last reported value
        uint256 reportsSubmitted; // total number of reports submitted by reporter
    }

    // Functions
    /**
     * @dev Initializes playground parameters
     */
    constructor() {
        _name = "TellorPlayground";
        _symbol = "TRBP";
        _decimals = 18;
        token = address(this);
    }

    /**
     * @dev Mock function for adding staking rewards. No rewards actually given to stakers
     * @param _amount Amount of TRB to be added to the contract
     */
    function addStakingRewards(uint256 _amount) external {
        require(_transferFrom(msg.sender, address(this), _amount));
    }

    /**
     * @dev Approves amount that an address is alowed to spend of behalf of another
     * @param _spender The address which is allowed to spend the tokens
     * @param _amount The amount that msg.sender is allowing spender to use
     * @return bool Whether the transaction succeeded
     *
     */
    function approve(address _spender, uint256 _amount) external returns (bool){
        _approve(msg.sender, _spender, _amount);
        return true;
    }

    /**
     * @dev A mock function to create a dispute
     * @param _queryId The tellorId to be disputed
     * @param _timestamp the timestamp of the value to be disputed
     */
    function beginDispute(bytes32 _queryId, uint256 _timestamp) external {
        values[_queryId][_timestamp] = bytes("");
        isDisputed[_queryId][_timestamp] = true;
        voteCount++;
        voteRounds[keccak256(abi.encodePacked(_queryId, _timestamp))].push(
            voteCount
        );
    }

    /**
     * @dev Allows a reporter to submit stake
     * @param _amount amount of tokens to stake
     */
    function depositStake(uint256 _amount) external {
        StakeInfo storage _staker = stakerDetails[msg.sender];
        if (_staker.lockedBalance > 0) {
            if (_staker.lockedBalance >= _amount) {
                _staker.lockedBalance -= _amount;
            } else {
                require(
                    _transferFrom(
                        msg.sender,
                        address(this),
                        _amount - _staker.lockedBalance
                    )
                );
                _staker.lockedBalance = 0;
            }
        } else {
            require(_transferFrom(msg.sender, address(this), _amount));
        }
        _staker.startDate = block.timestamp; // This resets their stake start date to now
        _staker.stakedBalance += _amount;
        emit NewStaker(msg.sender, _amount);
    }

    /**
     * @dev Public function to mint tokens to the given address
     * @param _user The address which will receive the tokens
     */
    function faucet(address _user) external {
        _mint(_user, 1000 ether);
    }

    /**
     * @dev Allows a reporter to request to withdraw their stake
     * @param _amount amount of staked tokens requesting to withdraw
     */
    function requestStakingWithdraw(uint256 _amount) external {
        StakeInfo storage _staker = stakerDetails[msg.sender];
        require(
            _staker.stakedBalance >= _amount,
            "insufficient staked balance"
        );
        _staker.startDate = block.timestamp;
        _staker.lockedBalance += _amount;
        _staker.stakedBalance -= _amount;
        emit StakeWithdrawRequested(msg.sender, _amount);
    }

    /**
     * @dev A mock function to submit a value to be read without reporter staking needed
     * @param _queryId the ID to associate the value to
     * @param _value the value for the queryId
     * @param _nonce the current value count for the query id
     * @param _queryData the data used by reporters to fulfill the data query
     */
    // slither-disable-next-line timestamp
    function submitValue(
        bytes32 _queryId,
        bytes calldata _value,
        uint256 _nonce,
        bytes memory _queryData
    ) external {
        require(keccak256(_value) != keccak256(""), "value must be submitted");
        require(
            _nonce == timestamps[_queryId].length || _nonce == 0,
            "nonce must match timestamp index"
        );
        require(
            _queryId == keccak256(_queryData) || uint256(_queryId) <= 100,
            "id must be hash of bytes data"
        );
        values[_queryId][block.timestamp] = _value;
        timestamps[_queryId].push(block.timestamp);
        reporterByTimestamp[_queryId][block.timestamp] = msg.sender;
        stakerDetails[msg.sender].reporterLastTimestamp = block.timestamp;
        stakerDetails[msg.sender].reportsSubmitted++;
        emit NewReport(
            _queryId,
            block.timestamp,
            _value,
            _nonce,
            _queryData,
            msg.sender
        );
    }

    /**
     * @dev Transfer tokens from one user to another
     * @param _recipient The destination address
     * @param _amount The amount of tokens, including decimals, to transfer
     * @return bool If the transfer succeeded
     */
    function transfer(address _recipient, uint256 _amount)
        public
        returns (bool)
    {
        _transfer(msg.sender, _recipient, _amount);
        return true;
    }

    /**
     * @dev Transfer tokens from user to another
     * @param _sender The address which owns the tokens
     * @param _recipient The destination address
     * @param _amount The quantity of tokens to transfer
     * @return bool Whether the transfer succeeded
     */
    function transferFrom(
        address _sender,
        address _recipient,
        uint256 _amount
    ) public returns (bool) {
        _transfer(_sender, _recipient, _amount);
        _approve(
            _sender,
            msg.sender,
            _allowances[_sender][msg.sender] - _amount
        );
        return true;
    }

    /**
     * @dev Withdraws a reporter's stake
     */
    function withdrawStake() external {
        StakeInfo storage _s = stakerDetails[msg.sender];
        // Ensure reporter is locked and that enough time has passed
        require(block.timestamp - _s.startDate >= 7 days, "7 days didn't pass");
        require(_s.lockedBalance > 0, "reporter not locked for withdrawal");
        _transfer(address(this), msg.sender, _s.lockedBalance);
        _s.lockedBalance = 0;
        emit StakeWithdrawn(msg.sender);
    }

    // Getters
    /**
     * @dev Returns the amount that an address is alowed to spend of behalf of another
     * @param _owner The address which owns the tokens
     * @param _spender The address that will use the tokens
     * @return uint256 The amount of allowed tokens
     */
    function allowance(address _owner, address _spender) external view returns (uint256){
        return _allowances[_owner][_spender];
    }

    /**
     * @dev Returns the balance of a given user.
     * @param _account user address
     * @return uint256 user's token balance
     */
    function balanceOf(address _account) external view returns (uint256) {
        return _balances[_account];
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * @return uint8 the number of decimals; used only for display purposes
     */
    function decimals() external view returns (uint8) {
        return _decimals;
    }

    /**
     * @dev Retrieves the latest value for the queryId before the specified timestamp
     * @param _queryId is the queryId to look up the value for
     * @param _timestamp before which to search for latest value
     * @return _ifRetrieve bool true if able to retrieve a non-zero value
     * @return _value the value retrieved
     * @return _timestampRetrieved the value's timestamp
     */
    function getDataBefore(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (
            bool _ifRetrieve,
            bytes memory _value,
            uint256 _timestampRetrieved
        )
    {
        (bool _found, uint256 _index) = getIndexForDataBefore(
            _queryId,
            _timestamp
        );
        if (!_found) return (false, bytes(""), 0);
        _timestampRetrieved = getTimestampbyQueryIdandIndex(_queryId, _index);
        _value = values[_queryId][_timestampRetrieved];
        return (true, _value, _timestampRetrieved);
    }

    /**
     * @dev Retrieves latest array index of data before the specified timestamp for the queryId
     * @param _queryId is the queryId to look up the index for
     * @param _timestamp is the timestamp before which to search for the latest index
     * @return _found whether the index was found
     * @return _index the latest index found before the specified timestamp
     */
    // slither-disable-next-line calls-loop
    function getIndexForDataBefore(bytes32 _queryId, uint256 _timestamp)
        public
        view
        returns (bool _found, uint256 _index)
    {
        uint256 _count = getNewValueCountbyQueryId(_queryId);
        if (_count > 0) {
            uint256 _middle;
            uint256 _start = 0;
            uint256 _end = _count - 1;
            uint256 _time;
            //Checking Boundaries to short-circuit the algorithm
            _time = getTimestampbyQueryIdandIndex(_queryId, _start);
            if (_time >= _timestamp) return (false, 0);
            _time = getTimestampbyQueryIdandIndex(_queryId, _end);
            if (_time < _timestamp) {
                while (isInDispute(_queryId, _time) && _end > 0) {
                    _end--;
                    _time = getTimestampbyQueryIdandIndex(_queryId, _end);
                }
                if (_end == 0 && isInDispute(_queryId, _time)) {
                    return (false, 0);
                }
                return (true, _end);
            }
            //Since the value is within our boundaries, do a binary search
            while (true) {
                _middle = (_end - _start) / 2 + 1 + _start;
                _time = getTimestampbyQueryIdandIndex(_queryId, _middle);
                if (_time < _timestamp) {
                    //get immediate next value
                    uint256 _nextTime = getTimestampbyQueryIdandIndex(
                        _queryId,
                        _middle + 1
                    );
                    if (_nextTime >= _timestamp) {
                        if (!isInDispute(_queryId, _time)) {
                            // _time is correct
                            return (true, _middle);
                        } else {
                            // iterate backwards until we find a non-disputed value
                            while (
                                isInDispute(_queryId, _time) && _middle > 0
                            ) {
                                _middle--;
                                _time = getTimestampbyQueryIdandIndex(
                                    _queryId,
                                    _middle
                                );
                            }
                            if (_middle == 0 && isInDispute(_queryId, _time)) {
                                return (false, 0);
                            }
                            // _time is correct
                            return (true, _middle);
                        }
                    } else {
                        //look from middle + 1(next value) to end
                        _start = _middle + 1;
                    }
                } else {
                    uint256 _prevTime = getTimestampbyQueryIdandIndex(
                        _queryId,
                        _middle - 1
                    );
                    if (_prevTime < _timestamp) {
                        if (!isInDispute(_queryId, _prevTime)) {
                            // _prevTime is correct
                            return (true, _middle - 1);
                        } else {
                            // iterate backwards until we find a non-disputed value
                            _middle--;
                            while (
                                isInDispute(_queryId, _prevTime) && _middle > 0
                            ) {
                                _middle--;
                                _prevTime = getTimestampbyQueryIdandIndex(
                                    _queryId,
                                    _middle
                                );
                            }
                            if (
                                _middle == 0 && isInDispute(_queryId, _prevTime)
                            ) {
                                return (false, 0);
                            }
                            // _prevtime is correct
                            return (true, _middle);
                        }
                    } else {
                        //look from start to middle -1(prev value)
                        _end = _middle - 1;
                    }
                }
            }
        }
        return (false, 0);
    }

    /**
     * @dev Counts the number of values that have been submitted for a given ID
     * @param _queryId the ID to look up
     * @return uint256 count of the number of values received for the queryId
     */
    function getNewValueCountbyQueryId(bytes32 _queryId)
        public
        view
        returns (uint256)
    {
        return timestamps[_queryId].length;
    }

    /**
     * @dev Returns the reporter for a given timestamp and queryId
     * @param _queryId bytes32 version of the queryId
     * @param _timestamp uint256 timestamp of report
     * @return address of data reporter
     */
    function getReporterByTimestamp(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (address)
    {
        return reporterByTimestamp[_queryId][_timestamp];
    }

    /**
     * @dev Returns mock stake amount
     * @return uint256 stake amount
     */
    function getStakeAmount() external view returns (uint256) {
        return stakeAmount;
    }

    /**
     * @dev Allows users to retrieve all information about a staker
     * @param _stakerAddress address of staker inquiring about
     * @return uint startDate of staking
     * @return uint current amount staked
     * @return uint current amount locked for withdrawal
     * @return uint reward debt used to calculate staking reward
     * @return uint reporter's last reported timestamp
     * @return uint total number of reports submitted by reporter
     * @return uint governance vote count when first staked
     * @return uint number of votes case by staker when first staked
     * @return uint whether staker is counted in totalStakers
     */
    function getStakerInfo(address _stakerAddress)
        external
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            bool
        )
    {
        StakeInfo storage _staker = stakerDetails[_stakerAddress];
        return (
            _staker.startDate,
            _staker.stakedBalance,
            _staker.lockedBalance,
            0, // reward debt
            _staker.reporterLastTimestamp,
            _staker.reportsSubmitted,
            0, // start vote count
            0, // start vote tally
            false
        );
    }

    /**
     * @dev Gets the timestamp for the value based on their index
     * @param _queryId is the queryId to look up
     * @param _index is the value index to look up
     * @return uint256 timestamp
     */
    function getTimestampbyQueryIdandIndex(bytes32 _queryId, uint256 _index)
        public
        view
        returns (uint256)
    {
        uint256 _len = timestamps[_queryId].length;
        if (_len == 0 || _len <= _index) return 0;
        return timestamps[_queryId][_index];
    }

    /**
     * @dev Returns an array of voting rounds for a given vote
     * @param _hash is the identifier hash for a vote
     * @return uint256[] memory dispute IDs of the vote rounds
     */
    function getVoteRounds(bytes32 _hash) public view returns (uint256[] memory){
        return voteRounds[_hash];
    }

    /**
     * @dev Returns the governance address of the contract
     * @return address (this address)
     */
    function governance() external view returns (address) {
        return address(this);
    }

    /**
     * @dev Returns whether a given value is disputed
     * @param _queryId unique ID of the data feed
     * @param _timestamp timestamp of the value
     * @return bool whether the value is disputed
     */
    function isInDispute(bytes32 _queryId, uint256 _timestamp)
        public
        view
        returns (bool)
    {
        return isDisputed[_queryId][_timestamp];
    }

    /**
     * @dev Returns the name of the token.
     * @return string name of the token
     */
    function name() external view returns (string memory) {
        return _name;
    }

    /**
     * @dev Retrieves value from oracle based on queryId/timestamp
     * @param _queryId being requested
     * @param _timestamp to retrieve data/value from
     * @return bytes value for queryId/timestamp submitted
     */
    function retrieveData(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (bytes memory)
    {
        return values[_queryId][_timestamp];
    }

    /**
     * @dev Returns the symbol of the token.
     * @return string symbol of the token
     */
    function symbol() external view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the total supply of the token.
     * @return uint256 total supply of token
     */
    function totalSupply() external view returns (uint256) {
        return _totalSupply;
    }

    // Internal functions
    /**
     * @dev Internal function to approve tokens for the user
     * @param _owner The owner of the tokens
     * @param _spender The address which is allowed to spend the tokens
     * @param _amount The amount that msg.sender is allowing spender to use
     */
    function _approve(
        address _owner,
        address _spender,
        uint256 _amount
    ) internal {
        require(_owner != address(0), "ERC20: approve from the zero address");
        require(_spender != address(0), "ERC20: approve to the zero address");
        _allowances[_owner][_spender] = _amount;
        emit Approval(_owner, _spender, _amount);
    }

    /**
     * @dev Internal function to burn tokens for the user
     * @param _account The address whose tokens to burn
     * @param _amount The quantity of tokens to burn
     */
    function _burn(address _account, uint256 _amount) internal{
        require(_account != address(0), "ERC20: burn from the zero address");
        _balances[_account] -= _amount;
        _totalSupply -= _amount;
        emit Transfer(_account, address(0), _amount);
    }

    /**
     * @dev Internal function to create new tokens for the user
     * @param _account The address which receives minted tokens
     * @param _amount The quantity of tokens to min
     */
    function _mint(address _account, uint256 _amount) internal{
        require(_account != address(0), "ERC20: mint to the zero address");
        _totalSupply += _amount;
        _balances[_account] += _amount;
        emit Transfer(address(0), _account, _amount);
    }

    /**
     * @dev Internal function to perform token transfer
     * @param _sender The address which owns the tokens
     * @param _recipient The destination address
     * @param _amount The quantity of tokens to transfer
     */
    function _transfer(
        address _sender,
        address _recipient,
        uint256 _amount
    ) internal{
        require(_sender != address(0), "ERC20: transfer from the zero address");
        require( _recipient != address(0),"ERC20: transfer to the zero address");
        _balances[_sender] -= _amount;
        _balances[_recipient] += _amount;
        emit Transfer(_sender, _recipient, _amount);
    }

    /**
     * @dev Allows this contract to transfer tokens from one user to another
     * @param _sender The address which owns the tokens
     * @param _recipient The destination address
     * @param _amount The quantity of tokens to transfer
     * @return bool Whether the transfer succeeded
     */
    function _transferFrom(
        address _sender,
        address _recipient,
        uint256 _amount
    ) internal returns (bool) {
        _transfer(_sender, _recipient, _amount);
        _approve(
            _sender,
            msg.sender,
            _allowances[_sender][address(this)] - _amount
        );
        return true;
    }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_value","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"_nonce","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_queryData","type":"bytes"},{"indexed":false,"internalType":"address","name":"_reporter","type":"address"}],"name":"NewReport","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"NewStaker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"StakeWithdrawRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"}],"name":"StakeWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"addStakingRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"beginDispute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"depositStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"faucet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getDataBefore","outputs":[{"internalType":"bool","name":"_ifRetrieve","type":"bool"},{"internalType":"bytes","name":"_value","type":"bytes"},{"internalType":"uint256","name":"_timestampRetrieved","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getIndexForDataBefore","outputs":[{"internalType":"bool","name":"_found","type":"bool"},{"internalType":"uint256","name":"_index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"}],"name":"getNewValueCountbyQueryId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getReporterByTimestamp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_stakerAddress","type":"address"}],"name":"getStakerInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getTimestampbyQueryIdandIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"name":"getVoteRounds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"isDisputed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"isInDispute","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"reporterByTimestamp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"requestStakingWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"retrieveData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"bytes","name":"_value","type":"bytes"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"bytes","name":"_queryData","type":"bytes"}],"name":"submitValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeBasedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"timestamps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"tips","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tipsInContract","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"values","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"voteRounds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040805180820190915260108082526f15195b1b1bdc941b185e59dc9bdd5b9960821b60209092019182526200004b91600e916200009f565b50604080518082019091526004808252630545242560e41b60209092019182526200007991600f916200009f565b506010805460ff19166012179055600c80546001600160a01b0319163017905562000182565b828054620000ad9062000145565b90600052602060002090601f016020900481019282620000d157600085556200011c565b82601f10620000ec57805160ff19168380011785556200011c565b828001600101855582156200011c579182015b828111156200011c578251825591602001919060010190620000ff565b506200012a9291506200012e565b5090565b5b808211156200012a57600081556001016200012f565b600181811c908216806200015a57607f821691505b602082108114156200017c57634e487b7160e01b600052602260045260246000fd5b50919050565b611d6380620001926000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063733bdef011610130578063c5958af9116100b8578063d9c51cd41161007c578063d9c51cd4146105c7578063dd62ed3e146105da578063e07c548614610613578063f25133f314610647578063fc0c546a1461065a57610232565b8063c5958af914610572578063c638407114610585578063c979fe9f1461058e578063cb82cc8f146105a1578063ce5e11bf146105b457610232565b806396426d97116100ff57806396426d9714610513578063a792765f14610522578063a9059cbb14610544578063b86d1d6314610557578063bed9d8611461056a57610232565b8063733bdef01461044357806377b03e0d146104d85780638929f4c6146104f857806395d89b411461050b57610232565b8063313ce567116101be57806360c7dc471161018257806360c7dc47146103d557806364473df2146103de57806369d43bd31461040957806370a0823114610412578063722580b61461043b57610232565b8063313ce5671461035b57806344e87f91146103705780635aa6e6751461039c5780635eaa9ced146103a2578063602bf227146103b557610232565b80631f379acc116102055780631f379acc1461029d578063217053c0146102b257806323b872dd146102fe578063248638e514610311578063294490851461033157610232565b806306fdde0314610237578063091b50ff14610255578063095ea7b31461026857806318160ddd1461028b575b600080fd5b61023f61066d565b60405161024c9190611c32565b60405180910390f35b61023f610263366004611ada565b6106ff565b61027b6102763660046119f4565b6107a4565b604051901515815260200161024c565b600d545b60405190815260200161024c565b6102b06102ab366004611ada565b6107bb565b005b6102e66102c0366004611ada565b60016020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b03909116815260200161024c565b61027b61030c3660046119b9565b610881565b61032461031f366004611a1d565b6108d3565b60405161024c9190611b56565b61034461033f366004611ada565b610936565b60408051921515835260208301919091520161024c565b60105460405160ff909116815260200161024c565b61027b61037e366004611ada565b60009182526020828152604080842092845291905290205460ff1690565b306102e6565b6102b06103b0366004611a35565b610c60565b61028f6103c3366004611a1d565b60046020526000908152604090205481565b61028f60095481565b61027b6103ec366004611ada565b600060208181529281526040808220909352908152205460ff1681565b61028f600a5481565b61028f610420366004611966565b6001600160a01b031660009081526008602052604090205490565b60095461028f565b610492610451366004611966565b6001600160a01b0316600090815260026020819052604082208054600182015492820154600383015460049093015491959394909390929190839081908190565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e083015215156101008201526101200161024c565b61028f6104e6366004611a1d565b60009081526003602052604090205490565b6102b0610506366004611a1d565b610e9a565b61023f610f75565b61028f6706f05b59d3b2000081565b610535610530366004611ada565b610f84565b60405161024c93929190611b9a565b61027b6105523660046119f4565b611081565b6102b0610565366004611966565b61108e565b6102b06110a4565b61023f610580366004611ada565b6111b2565b61028f600b5481565b61028f61059c366004611ada565b611260565b6102b06105af366004611a1d565b611291565b61028f6105c2366004611ada565b61136f565b6102b06105d5366004611a1d565b6113dc565b61028f6105e8366004611987565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b6102e6610621366004611ada565b60009182526001602090815260408084209284529190529020546001600160a01b031690565b61028f610655366004611ada565b6113f0565b600c546102e6906001600160a01b031681565b6060600e805461067c90611cab565b80601f01602080910402602001604051908101604052809291908181526020018280546106a890611cab565b80156106f55780601f106106ca576101008083540402835291602001916106f5565b820191906000526020600020905b8154815290600101906020018083116106d857829003601f168201915b5050505050905090565b60056020908152600092835260408084209091529082529020805461072390611cab565b80601f016020809104026020016040519081016040528092919081815260200182805461074f90611cab565b801561079c5780601f106107715761010080835404028352916020019161079c565b820191906000526020600020905b81548152906001019060200180831161077f57829003601f168201915b505050505081565b60006107b133848461140c565b5060015b92915050565b60408051602080820180845260008084528681526005835284812086825290925292902090516107eb92906117bb565b506000828152602081815260408083208484529091528120805460ff19166001179055600b80549161081c83611ce6565b9190505550600660008383604051602001610841929190918252602082015260400190565b60408051601f19818403018152918152815160209283012083528282019390935291016000908120600b5481546001810183559183529290912001555050565b600061088e848484611531565b6001600160a01b0384166000908152600760209081526040808320338085529252909120546108c99186916108c4908690611c7d565b61140c565b5060019392505050565b60008181526006602090815260409182902080548351818402810184019094528084526060939283018282801561092957602002820191906000526020600020905b815481526020019060010190808311610915575b505050505090505b919050565b60008281526003602052604081205481908015610c50576000808061095c600185611c7d565b9050600061096a898461136f565b905087811061098457600080965096505050505050610c59565b61098e898361136f565b905087811015610a2e575b60008981526020818152604080832084845290915290205460ff1680156109c05750600082115b156109e357816109cf81611c94565b9250506109dc898361136f565b9050610999565b81158015610a08575060008981526020818152604080832084845290915290205460ff165b15610a1e57600080965096505050505050610c59565b50600195509350610c5992505050565b826002610a3b8285611c7d565b610a459190611c5d565b610a50906001611c45565b610a5a9190611c45565b9350610a66898561136f565b905087811015610b66576000610a818a6105c2876001611c45565b9050888110610b535760008a81526020818152604080832085845290915290205460ff16610abb5760018597509750505050505050610c59565b60008a81526020818152604080832085845290915290205460ff168015610ae25750600085115b15610b055784610af181611c94565b955050610afe8a8661136f565b9150610abb565b84158015610b2a575060008a81526020818152604080832085845290915290205460ff165b15610b415760008097509750505050505050610c59565b60018597509750505050505050610c59565b610b5e856001611c45565b935050610c4b565b6000610b778a6105c2600188611c7d565b905088811015610c3c5760008a81526020818152604080832084845290915290205460ff16610bbb576001610bac8187611c7d565b97509750505050505050610c59565b84610bc581611c94565b9550505b60008a81526020818152604080832084845290915290205460ff168015610bf05750600085115b15610c135784610bff81611c94565b955050610c0c8a8661136f565b9050610bc9565b84158015610b2a575060008a81526020818152604080832084845290915290205460ff16610b2a565b610c47600186611c7d565b9250505b610a2e565b60008092509250505b9250929050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708484604051610c91929190611b46565b60405180910390201415610cec5760405162461bcd60e51b815260206004820152601760248201527f76616c7565206d757374206265207375626d697474656400000000000000000060448201526064015b60405180910390fd5b600085815260036020526040902054821480610d06575081155b610d525760405162461bcd60e51b815260206004820181905260248201527f6e6f6e6365206d757374206d617463682074696d657374616d7020696e6465786044820152606401610ce3565b80516020820120851480610d67575060648511155b610db35760405162461bcd60e51b815260206004820152601d60248201527f6964206d7573742062652068617368206f6620627974657320646174610000006044820152606401610ce3565b60008581526005602090815260408083204284529091529020610dd790858561183f565b5060008581526003602081815260408084208054600181810183559186528386204291018190558a86529083528185208186528352818520805473ffffffffffffffffffffffffffffffffffffffff19163390811790915585526002909252832091820155600401805491610e4b83611ce6565b91905055507f48e9e2c732ba278de6ac88a3a57a5c5ba13d3d8370e709b3b98333a57876ca9585428686868633604051610e8b9796959493929190611bc5565b60405180910390a15050505050565b3360009081526002602052604090206001810154821115610efd5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74207374616b65642062616c616e636500000000006044820152606401610ce3565b428155600281018054839190600090610f17908490611c45565b9250508190555081816001016000828254610f329190611c7d565b909155505060408051338152602081018490527f3d8d9df4bd0172df32e557fa48e96435cd7f2cac06aaffacfaee608e6f7898ef91015b60405180910390a15050565b6060600f805461067c90611cab565b600060606000806000610f978787610936565b9150915081610fc1576000604051806020016040528060008152506000945094509450505061107a565b610fcb878261136f565b60008881526005602090815260408083208484529091529020805491945090610ff390611cab565b80601f016020809104026020016040519081016040528092919081815260200182805461101f90611cab565b801561106c5780601f106110415761010080835404028352916020019161106c565b820191906000526020600020905b81548152906001019060200180831161104f57829003601f168201915b505050505093506001945050505b9250925092565b60006107b1338484611531565b6110a181683635c9adc5dea00000611698565b50565b336000908152600260205260409020805462093a80906110c49042611c7d565b10156111075760405162461bcd60e51b8152602060048201526012602482015271372064617973206469646e2774207061737360701b6044820152606401610ce3565b60008160020154116111665760405162461bcd60e51b815260206004820152602260248201527f7265706f72746572206e6f74206c6f636b656420666f72207769746864726177604482015261185b60f21b6064820152608401610ce3565b61117530338360020154611531565b600060028201556040513381527f4a7934670bd8304e7da22378be1368f7c4fef17c5aee81804beda8638fe428ec9060200160405180910390a150565b600082815260056020908152604080832084845290915290208054606091906111da90611cab565b80601f016020809104026020016040519081016040528092919081815260200182805461120690611cab565b80156112535780601f1061122857610100808354040283529160200191611253565b820191906000526020600020905b81548152906001019060200180831161123657829003601f168201915b5050505050905092915050565b6006602052816000526040600020818154811061127c57600080fd5b90600052602060002001600091509150505481565b336000908152600260208190526040909120908101541561130657818160020154106112d657818160020160008282546112cb9190611c7d565b909155506113019050565b6112f033308360020154856112eb9190611c7d565b611777565b6112f957600080fd5b600060028201555b61131a565b611311333084611777565b61131a57600080fd5b428155600181018054839190600090611334908490611c45565b909155505060408051338152602081018490527fa96c2cce65119a2170d1711a6e82f18f2006448828483ba7545e5954765436479101610f69565b60008281526003602052604081205480158061138b5750828111155b1561139a5760009150506107b5565b60008481526003602052604090208054849081106113c857634e487b7160e01b600052603260045260246000fd5b906000526020600020015491505092915050565b6113e7333083611777565b6110a157600080fd5b6003602052816000526040600020818154811061127c57600080fd5b6001600160a01b03831661146e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce3565b6001600160a01b0382166114cf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce3565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166115955760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ce3565b6001600160a01b0382166115f75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ce3565b6001600160a01b0383166000908152600860205260408120805483929061161f908490611c7d565b90915550506001600160a01b0382166000908152600860205260408120805483929061164c908490611c45565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161152491815260200190565b6001600160a01b0382166116ee5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610ce3565b80600d60008282546117009190611c45565b90915550506001600160a01b0382166000908152600860205260408120805483929061172d908490611c45565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000611784848484611531565b6001600160a01b03841660009081526007602090815260408083203084529091529020546108c990859033906108c4908690611c7d565b8280546117c790611cab565b90600052602060002090601f0160209004810192826117e9576000855561182f565b82601f1061180257805160ff191683800117855561182f565b8280016001018555821561182f579182015b8281111561182f578251825591602001919060010190611814565b5061183b9291506118b3565b5090565b82805461184b90611cab565b90600052602060002090601f01602090048101928261186d576000855561182f565b82601f106118865782800160ff1982351617855561182f565b8280016001018555821561182f579182015b8281111561182f578235825591602001919060010190611898565b5b8082111561183b57600081556001016118b4565b80356001600160a01b038116811461093157600080fd5b600082601f8301126118ef578081fd5b813567ffffffffffffffff8082111561190a5761190a611d17565b604051601f8301601f19908116603f0116810190828211818310171561193257611932611d17565b8160405283815286602085880101111561194a578485fd5b8360208701602083013792830160200193909352509392505050565b600060208284031215611977578081fd5b611980826118c8565b9392505050565b60008060408385031215611999578081fd5b6119a2836118c8565b91506119b0602084016118c8565b90509250929050565b6000806000606084860312156119cd578081fd5b6119d6846118c8565b92506119e4602085016118c8565b9150604084013590509250925092565b60008060408385031215611a06578182fd5b611a0f836118c8565b946020939093013593505050565b600060208284031215611a2e578081fd5b5035919050565b600080600080600060808688031215611a4c578081fd5b85359450602086013567ffffffffffffffff80821115611a6a578283fd5b818801915088601f830112611a7d578283fd5b813581811115611a8b578384fd5b896020828501011115611a9c578384fd5b60208301965080955050604088013593506060880135915080821115611ac0578283fd5b50611acd888289016118df565b9150509295509295909350565b60008060408385031215611aec578182fd5b50508035926020909101359150565b60008151808452815b81811015611b2057602081850181015186830182015201611b04565b81811115611b315782602083870101525b50601f01601f19169290920160200192915050565b6000828483379101908152919050565b6020808252825182820181905260009190848201906040850190845b81811015611b8e57835183529284019291840191600101611b72565b50909695505050505050565b6000841515825260606020830152611bb56060830185611afb565b9050826040830152949350505050565b600088825287602083015260c060408301528560c0830152858760e08401378060e08784010152601f19601f870116820185606084015260e0838203016080840152611c1460e0820186611afb565b9150506001600160a01b03831660a083015298975050505050505050565b6000602082526119806020830184611afb565b60008219821115611c5857611c58611d01565b500190565b600082611c7857634e487b7160e01b81526012600452602481fd5b500490565b600082821015611c8f57611c8f611d01565b500390565b600081611ca357611ca3611d01565b506000190190565b600181811c90821680611cbf57607f821691505b60208210811415611ce057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611cfa57611cfa611d01565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220f2233fa3c479dfac43a71b519542a8a0dc83f6b7f3788fccd8c715ebdd6b418264736f6c63430008030033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102325760003560e01c8063733bdef011610130578063c5958af9116100b8578063d9c51cd41161007c578063d9c51cd4146105c7578063dd62ed3e146105da578063e07c548614610613578063f25133f314610647578063fc0c546a1461065a57610232565b8063c5958af914610572578063c638407114610585578063c979fe9f1461058e578063cb82cc8f146105a1578063ce5e11bf146105b457610232565b806396426d97116100ff57806396426d9714610513578063a792765f14610522578063a9059cbb14610544578063b86d1d6314610557578063bed9d8611461056a57610232565b8063733bdef01461044357806377b03e0d146104d85780638929f4c6146104f857806395d89b411461050b57610232565b8063313ce567116101be57806360c7dc471161018257806360c7dc47146103d557806364473df2146103de57806369d43bd31461040957806370a0823114610412578063722580b61461043b57610232565b8063313ce5671461035b57806344e87f91146103705780635aa6e6751461039c5780635eaa9ced146103a2578063602bf227146103b557610232565b80631f379acc116102055780631f379acc1461029d578063217053c0146102b257806323b872dd146102fe578063248638e514610311578063294490851461033157610232565b806306fdde0314610237578063091b50ff14610255578063095ea7b31461026857806318160ddd1461028b575b600080fd5b61023f61066d565b60405161024c9190611c32565b60405180910390f35b61023f610263366004611ada565b6106ff565b61027b6102763660046119f4565b6107a4565b604051901515815260200161024c565b600d545b60405190815260200161024c565b6102b06102ab366004611ada565b6107bb565b005b6102e66102c0366004611ada565b60016020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b03909116815260200161024c565b61027b61030c3660046119b9565b610881565b61032461031f366004611a1d565b6108d3565b60405161024c9190611b56565b61034461033f366004611ada565b610936565b60408051921515835260208301919091520161024c565b60105460405160ff909116815260200161024c565b61027b61037e366004611ada565b60009182526020828152604080842092845291905290205460ff1690565b306102e6565b6102b06103b0366004611a35565b610c60565b61028f6103c3366004611a1d565b60046020526000908152604090205481565b61028f60095481565b61027b6103ec366004611ada565b600060208181529281526040808220909352908152205460ff1681565b61028f600a5481565b61028f610420366004611966565b6001600160a01b031660009081526008602052604090205490565b60095461028f565b610492610451366004611966565b6001600160a01b0316600090815260026020819052604082208054600182015492820154600383015460049093015491959394909390929190839081908190565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e083015215156101008201526101200161024c565b61028f6104e6366004611a1d565b60009081526003602052604090205490565b6102b0610506366004611a1d565b610e9a565b61023f610f75565b61028f6706f05b59d3b2000081565b610535610530366004611ada565b610f84565b60405161024c93929190611b9a565b61027b6105523660046119f4565b611081565b6102b0610565366004611966565b61108e565b6102b06110a4565b61023f610580366004611ada565b6111b2565b61028f600b5481565b61028f61059c366004611ada565b611260565b6102b06105af366004611a1d565b611291565b61028f6105c2366004611ada565b61136f565b6102b06105d5366004611a1d565b6113dc565b61028f6105e8366004611987565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b6102e6610621366004611ada565b60009182526001602090815260408084209284529190529020546001600160a01b031690565b61028f610655366004611ada565b6113f0565b600c546102e6906001600160a01b031681565b6060600e805461067c90611cab565b80601f01602080910402602001604051908101604052809291908181526020018280546106a890611cab565b80156106f55780601f106106ca576101008083540402835291602001916106f5565b820191906000526020600020905b8154815290600101906020018083116106d857829003601f168201915b5050505050905090565b60056020908152600092835260408084209091529082529020805461072390611cab565b80601f016020809104026020016040519081016040528092919081815260200182805461074f90611cab565b801561079c5780601f106107715761010080835404028352916020019161079c565b820191906000526020600020905b81548152906001019060200180831161077f57829003601f168201915b505050505081565b60006107b133848461140c565b5060015b92915050565b60408051602080820180845260008084528681526005835284812086825290925292902090516107eb92906117bb565b506000828152602081815260408083208484529091528120805460ff19166001179055600b80549161081c83611ce6565b9190505550600660008383604051602001610841929190918252602082015260400190565b60408051601f19818403018152918152815160209283012083528282019390935291016000908120600b5481546001810183559183529290912001555050565b600061088e848484611531565b6001600160a01b0384166000908152600760209081526040808320338085529252909120546108c99186916108c4908690611c7d565b61140c565b5060019392505050565b60008181526006602090815260409182902080548351818402810184019094528084526060939283018282801561092957602002820191906000526020600020905b815481526020019060010190808311610915575b505050505090505b919050565b60008281526003602052604081205481908015610c50576000808061095c600185611c7d565b9050600061096a898461136f565b905087811061098457600080965096505050505050610c59565b61098e898361136f565b905087811015610a2e575b60008981526020818152604080832084845290915290205460ff1680156109c05750600082115b156109e357816109cf81611c94565b9250506109dc898361136f565b9050610999565b81158015610a08575060008981526020818152604080832084845290915290205460ff165b15610a1e57600080965096505050505050610c59565b50600195509350610c5992505050565b826002610a3b8285611c7d565b610a459190611c5d565b610a50906001611c45565b610a5a9190611c45565b9350610a66898561136f565b905087811015610b66576000610a818a6105c2876001611c45565b9050888110610b535760008a81526020818152604080832085845290915290205460ff16610abb5760018597509750505050505050610c59565b60008a81526020818152604080832085845290915290205460ff168015610ae25750600085115b15610b055784610af181611c94565b955050610afe8a8661136f565b9150610abb565b84158015610b2a575060008a81526020818152604080832085845290915290205460ff165b15610b415760008097509750505050505050610c59565b60018597509750505050505050610c59565b610b5e856001611c45565b935050610c4b565b6000610b778a6105c2600188611c7d565b905088811015610c3c5760008a81526020818152604080832084845290915290205460ff16610bbb576001610bac8187611c7d565b97509750505050505050610c59565b84610bc581611c94565b9550505b60008a81526020818152604080832084845290915290205460ff168015610bf05750600085115b15610c135784610bff81611c94565b955050610c0c8a8661136f565b9050610bc9565b84158015610b2a575060008a81526020818152604080832084845290915290205460ff16610b2a565b610c47600186611c7d565b9250505b610a2e565b60008092509250505b9250929050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708484604051610c91929190611b46565b60405180910390201415610cec5760405162461bcd60e51b815260206004820152601760248201527f76616c7565206d757374206265207375626d697474656400000000000000000060448201526064015b60405180910390fd5b600085815260036020526040902054821480610d06575081155b610d525760405162461bcd60e51b815260206004820181905260248201527f6e6f6e6365206d757374206d617463682074696d657374616d7020696e6465786044820152606401610ce3565b80516020820120851480610d67575060648511155b610db35760405162461bcd60e51b815260206004820152601d60248201527f6964206d7573742062652068617368206f6620627974657320646174610000006044820152606401610ce3565b60008581526005602090815260408083204284529091529020610dd790858561183f565b5060008581526003602081815260408084208054600181810183559186528386204291018190558a86529083528185208186528352818520805473ffffffffffffffffffffffffffffffffffffffff19163390811790915585526002909252832091820155600401805491610e4b83611ce6565b91905055507f48e9e2c732ba278de6ac88a3a57a5c5ba13d3d8370e709b3b98333a57876ca9585428686868633604051610e8b9796959493929190611bc5565b60405180910390a15050505050565b3360009081526002602052604090206001810154821115610efd5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74207374616b65642062616c616e636500000000006044820152606401610ce3565b428155600281018054839190600090610f17908490611c45565b9250508190555081816001016000828254610f329190611c7d565b909155505060408051338152602081018490527f3d8d9df4bd0172df32e557fa48e96435cd7f2cac06aaffacfaee608e6f7898ef91015b60405180910390a15050565b6060600f805461067c90611cab565b600060606000806000610f978787610936565b9150915081610fc1576000604051806020016040528060008152506000945094509450505061107a565b610fcb878261136f565b60008881526005602090815260408083208484529091529020805491945090610ff390611cab565b80601f016020809104026020016040519081016040528092919081815260200182805461101f90611cab565b801561106c5780601f106110415761010080835404028352916020019161106c565b820191906000526020600020905b81548152906001019060200180831161104f57829003601f168201915b505050505093506001945050505b9250925092565b60006107b1338484611531565b6110a181683635c9adc5dea00000611698565b50565b336000908152600260205260409020805462093a80906110c49042611c7d565b10156111075760405162461bcd60e51b8152602060048201526012602482015271372064617973206469646e2774207061737360701b6044820152606401610ce3565b60008160020154116111665760405162461bcd60e51b815260206004820152602260248201527f7265706f72746572206e6f74206c6f636b656420666f72207769746864726177604482015261185b60f21b6064820152608401610ce3565b61117530338360020154611531565b600060028201556040513381527f4a7934670bd8304e7da22378be1368f7c4fef17c5aee81804beda8638fe428ec9060200160405180910390a150565b600082815260056020908152604080832084845290915290208054606091906111da90611cab565b80601f016020809104026020016040519081016040528092919081815260200182805461120690611cab565b80156112535780601f1061122857610100808354040283529160200191611253565b820191906000526020600020905b81548152906001019060200180831161123657829003601f168201915b5050505050905092915050565b6006602052816000526040600020818154811061127c57600080fd5b90600052602060002001600091509150505481565b336000908152600260208190526040909120908101541561130657818160020154106112d657818160020160008282546112cb9190611c7d565b909155506113019050565b6112f033308360020154856112eb9190611c7d565b611777565b6112f957600080fd5b600060028201555b61131a565b611311333084611777565b61131a57600080fd5b428155600181018054839190600090611334908490611c45565b909155505060408051338152602081018490527fa96c2cce65119a2170d1711a6e82f18f2006448828483ba7545e5954765436479101610f69565b60008281526003602052604081205480158061138b5750828111155b1561139a5760009150506107b5565b60008481526003602052604090208054849081106113c857634e487b7160e01b600052603260045260246000fd5b906000526020600020015491505092915050565b6113e7333083611777565b6110a157600080fd5b6003602052816000526040600020818154811061127c57600080fd5b6001600160a01b03831661146e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce3565b6001600160a01b0382166114cf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce3565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166115955760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ce3565b6001600160a01b0382166115f75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ce3565b6001600160a01b0383166000908152600860205260408120805483929061161f908490611c7d565b90915550506001600160a01b0382166000908152600860205260408120805483929061164c908490611c45565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161152491815260200190565b6001600160a01b0382166116ee5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610ce3565b80600d60008282546117009190611c45565b90915550506001600160a01b0382166000908152600860205260408120805483929061172d908490611c45565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000611784848484611531565b6001600160a01b03841660009081526007602090815260408083203084529091529020546108c990859033906108c4908690611c7d565b8280546117c790611cab565b90600052602060002090601f0160209004810192826117e9576000855561182f565b82601f1061180257805160ff191683800117855561182f565b8280016001018555821561182f579182015b8281111561182f578251825591602001919060010190611814565b5061183b9291506118b3565b5090565b82805461184b90611cab565b90600052602060002090601f01602090048101928261186d576000855561182f565b82601f106118865782800160ff1982351617855561182f565b8280016001018555821561182f579182015b8281111561182f578235825591602001919060010190611898565b5b8082111561183b57600081556001016118b4565b80356001600160a01b038116811461093157600080fd5b600082601f8301126118ef578081fd5b813567ffffffffffffffff8082111561190a5761190a611d17565b604051601f8301601f19908116603f0116810190828211818310171561193257611932611d17565b8160405283815286602085880101111561194a578485fd5b8360208701602083013792830160200193909352509392505050565b600060208284031215611977578081fd5b611980826118c8565b9392505050565b60008060408385031215611999578081fd5b6119a2836118c8565b91506119b0602084016118c8565b90509250929050565b6000806000606084860312156119cd578081fd5b6119d6846118c8565b92506119e4602085016118c8565b9150604084013590509250925092565b60008060408385031215611a06578182fd5b611a0f836118c8565b946020939093013593505050565b600060208284031215611a2e578081fd5b5035919050565b600080600080600060808688031215611a4c578081fd5b85359450602086013567ffffffffffffffff80821115611a6a578283fd5b818801915088601f830112611a7d578283fd5b813581811115611a8b578384fd5b896020828501011115611a9c578384fd5b60208301965080955050604088013593506060880135915080821115611ac0578283fd5b50611acd888289016118df565b9150509295509295909350565b60008060408385031215611aec578182fd5b50508035926020909101359150565b60008151808452815b81811015611b2057602081850181015186830182015201611b04565b81811115611b315782602083870101525b50601f01601f19169290920160200192915050565b6000828483379101908152919050565b6020808252825182820181905260009190848201906040850190845b81811015611b8e57835183529284019291840191600101611b72565b50909695505050505050565b6000841515825260606020830152611bb56060830185611afb565b9050826040830152949350505050565b600088825287602083015260c060408301528560c0830152858760e08401378060e08784010152601f19601f870116820185606084015260e0838203016080840152611c1460e0820186611afb565b9150506001600160a01b03831660a083015298975050505050505050565b6000602082526119806020830184611afb565b60008219821115611c5857611c58611d01565b500190565b600082611c7857634e487b7160e01b81526012600452602481fd5b500490565b600082821015611c8f57611c8f611d01565b500390565b600081611ca357611ca3611d01565b506000190190565b600181811c90821680611cbf57607f821691505b60208210811415611ce057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611cfa57611cfa611d01565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220f2233fa3c479dfac43a71b519542a8a0dc83f6b7f3788fccd8c715ebdd6b418264736f6c63430008030033

Deployed Bytecode Sourcemap

60:23400:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19529:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1121:59;;;;;;:::i;:::-;;:::i;3122:155::-;;;;;;:::i;:::-;;:::i;:::-;;;6038:14:1;;6031:22;6013:41;;6001:2;5986:18;3122:155:0;5968:92:1;20373:93:0;20446:12;;20373:93;;;12343:25:1;;;12331:2;12316:18;20373:93:0;12298:76:1;3472:312:0;;;;;;:::i;:::-;;:::i;:::-;;775:74;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;775:74:0;;;;;;-1:-1:-1;;;;;4864:55:1;;;4846:74;;4834:2;4819:18;775:74:0;4801:125:1;7779:346:0;;;;;;:::i;:::-;;:::i;18673:119::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11115:4380::-;;;;;;:::i;:::-;;:::i;:::-;;;;6632:14:1;;6625:22;6607:41;;6679:2;6664:18;;6657:34;;;;6580:18;11115:4380:0;6562:135:1;9557:85:0;9625:9;;9557:85;;9625:9;;;;13287:36:1;;13275:2;13260:18;9557:85:0;13242:87:1;19242:176:0;;;;;;:::i;:::-;19349:4;19378:20;;;;;;;;;;;:32;;;;;;;;;;;;19242:176;18917:93;18997:4;18917:93;;6021:1028;;;;;;:::i;:::-;;:::i;1015:39::-;;;;;;:::i;:::-;;;;;;;;;;;;;;1465:26;;;;;;674:62;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1623:29;;;;;;9259:114;;;;;;:::i;:::-;-1:-1:-1;;;;;9346:19:0;9319:7;9346:19;;;:9;:19;;;;;;;9259:114;16438:95;16514:11;;16438:95;;17218:723;;;;;;:::i;:::-;-1:-1:-1;;;;;17565:29:0;17329:7;17565:29;;;:13;:29;;;;;;;17627:17;;17659:21;;;;17695;;;;17762:29;;;;17806:24;;;;;17627:17;;17659:21;;17695;;17329:7;;17762:29;17806:24;17329:7;;;;;;17218:723;;;;;12744:25:1;;;12800:2;12785:18;;12778:34;;;;12828:18;;;12821:34;;;;12886:2;12871:18;;12864:34;;;;12929:3;12914:19;;12907:35;;;;12973:3;12958:19;;12951:35;13017:3;13002:19;;12995:35;13061:3;13046:19;;13039:35;13118:14;13111:22;13105:3;13090:19;;13083:51;12731:3;12716:19;17218:723:0;12698:442:1;15723:168:0;;;;;;:::i;:::-;15824:7;15856:20;;;:10;:20;;;;;:27;;15723:168;5173:441;;;;;;:::i;:::-;;:::i;20160:89::-;;;:::i;1498:46::-;;1540:4;1498:46;;10061:607;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;7303:183::-;;;;;;:::i;:::-;;:::i;4928:83::-;;;;;;:::i;:::-;;:::i;8193:469::-;;;:::i;19862:183::-;;;;;;:::i;:::-;;:::i;1697:24::-;;;;;;1219:47;;;;;;:::i;:::-;;:::i;3906:868::-;;;;;;:::i;:::-;;:::i;18170:294::-;;;;;;:::i;:::-;;:::i;2668:130::-;;;;;;:::i;:::-;;:::i;8962:139::-;;;;;;:::i;:::-;-1:-1:-1;;;;;9064:19:0;;;9038:7;9064:19;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;8962:139;16135:201;;;;;;:::i;:::-;16255:7;16287:29;;;:19;:29;;;;;;;;:41;;;;;;;;;-1:-1:-1;;;;;16287:41:0;;16135:201;961:47;;;;;;:::i;:::-;;:::i;1728:20::-;;;;;-1:-1:-1;;;;;1728:20:0;;;19529:85;19568:13;19601:5;19594:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19529:85;:::o;1121:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3122:155::-;3192:4;3208:39;3217:10;3229:8;3239:7;3208:8;:39::i;:::-;-1:-1:-1;3265:4:0;3122:155;;;;;:::o;3472:312::-;3583:9;;;;;;;;;;-1:-1:-1;3583:9:0;;;3552:16;;;:6;:16;;;;;:28;;;;;;;;;:40;;;;3583:9;3552:40;:::i;:::-;-1:-1:-1;3603:10:0;:20;;;;;;;;;;;:32;;;;;;;;:39;;-1:-1:-1;;3603:39:0;3638:4;3603:39;;;3653:9;:11;;;;;;:::i;:::-;;;;;;3675:10;:61;3713:8;3723:10;3696:38;;;;;;;;4327:19:1;;;4371:2;4362:12;;4355:28;4408:2;4399:12;;4317:100;3696:38:0;;;;-1:-1:-1;;3696:38:0;;;;;;;;;3686:49;;3696:38;3686:49;;;;3675:61;;;;;;;;;;;-1:-1:-1;3675:61:0;;;3756:9;;3675:101;;;;;;;;;;;;;;;;-1:-1:-1;;3472:312:0:o;7779:346::-;7905:4;7922:39;7932:7;7941:10;7953:7;7922:9;:39::i;:::-;-1:-1:-1;;;;;8042:20:0;;;;;;:11;:20;;;;;;;;8017:10;8042:32;;;;;;;;;7972:123;;7995:7;;8042:42;;8077:7;;8042:42;:::i;:::-;7972:8;:123::i;:::-;-1:-1:-1;8113:4:0;7779:346;;;;;:::o;18673:119::-;18767:17;;;;:10;:17;;;;;;;;;18760:24;;;;;;;;;;;;;;;;;18732:16;;18760:24;;;18767:17;18760:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18673:119;;;;:::o;11115:4380::-;11232:11;15856:20;;;:10;:20;;;;;:27;11232:11;;11344:10;;11340:4120;;11371:15;;;11449:10;11458:1;11449:6;:10;:::i;:::-;11434:25;;11474:13;11576:47;11606:8;11616:6;11576:29;:47::i;:::-;11568:55;;11651:10;11642:5;:19;11638:42;;11671:5;11678:1;11663:17;;;;;;;;;;;11638:42;11703:45;11733:8;11743:4;11703:29;:45::i;:::-;11695:53;;11775:10;11767:5;:18;11763:395;;;11806:174;19349:4;19378:20;;;;;;;;;;;:32;;;;;;;;;;;11813:40;;;;;11852:1;11845:4;:8;11813:40;11806:174;;;11878:6;;;;:::i;:::-;;;;11915:45;11945:8;11955:4;11915:29;:45::i;:::-;11907:53;;11806:174;;;12002:9;;:41;;;;-1:-1:-1;19349:4:0;19378:20;;;;;;;;;;;:32;;;;;;;;;;;12015:28;11998:107;;;12076:5;12083:1;12068:17;;;;;;;;;;;11998:107;-1:-1:-1;12131:4:0;;-1:-1:-1;12137:4:0;-1:-1:-1;12123:19:0;;-1:-1:-1;;;12123:19:0;11763:395;12316:6;12308:1;12291:13;12316:6;12291:4;:13;:::i;:::-;12290:19;;;;:::i;:::-;:23;;12312:1;12290:23;:::i;:::-;:32;;;;:::i;:::-;12280:42;;12349:48;12379:8;12389:7;12349:29;:48::i;:::-;12341:56;;12428:10;12420:5;:18;12416:3018;;;12511:17;12531:125;12587:8;12622:11;:7;12632:1;12622:11;:::i;12531:125::-;12511:145;;12696:10;12683:9;:23;12679:1195;;19349:4;19378:20;;;;;;;;;;;:32;;;;;;;;;;;12735:972;;12858:4;12864:7;12850:22;;;;;;;;;;;;12735:972;19349:4;19378:20;;;;;;;;;;;:32;;;;;;;;;;;13063:43;;;;;13105:1;13095:7;:11;13063:43;13022:392;;;13173:9;;;;:::i;:::-;;;;13225:157;13293:8;13340:7;13225:29;:157::i;:::-;13217:165;;13022:392;;;13448:12;;:44;;;;-1:-1:-1;19349:4:0;19378:20;;;;;;;;;;;:32;;;;;;;;;;;13464:28;13444:134;;;13537:5;13544:1;13529:17;;;;;;;;;;;;13444:134;13665:4;13671:7;13657:22;;;;;;;;;;;;12679:1195;13839:11;:7;13849:1;13839:11;:::i;:::-;13830:20;;12416:3018;;;;13922:17;13942:125;13998:8;14033:11;14043:1;14033:7;:11;:::i;13942:125::-;13922:145;;14106:10;14094:9;:22;14090:1325;;;19349:4;19378:20;;;;;;;;;;;:32;;;;;;;;;;;14145:1104;;14276:4;14282:11;14276:4;14282:7;:11;:::i;:::-;14268:26;;;;;;;;;;;;14145:1104;14444:9;;;;:::i;:::-;;;;14484:400;19349:4;19378:20;;;;;;;;;;;:32;;;;;;;;;;;14525:47;;;;;14571:1;14561:7;:11;14525:47;14484:400;;;14639:9;;;;:::i;:::-;;;;14695:157;14763:8;14810:7;14695:29;:157::i;:::-;14683:169;;14484:400;;;14952:12;;:48;;;;-1:-1:-1;19349:4:0;19378:20;;;;;;;;;;;:32;;;;;;;;;;;14968;19242:176;14090:1325;15380:11;15390:1;15380:7;:11;:::i;:::-;15373:18;;12416:3018;;12248:3201;;11340:4120;15478:5;15485:1;15470:17;;;;;11115:4380;;;;;;:::o;6021:1028::-;6216:13;6205:6;;6195:17;;;;;;;:::i;:::-;;;;;;;;:34;;6187:70;;;;-1:-1:-1;;;6187:70:0;;9756:2:1;6187:70:0;;;9738:21:1;9795:2;9775:18;;;9768:30;9834:25;9814:18;;;9807:53;9877:18;;6187:70:0;;;;;;;;;6300:20;;;;:10;:20;;;;;:27;6290:37;;;:52;;-1:-1:-1;6331:11:0;;6290:52;6268:134;;;;-1:-1:-1;;;6268:134:0;;10108:2:1;6268:134:0;;;10090:21:1;;;10127:18;;;10120:30;10186:34;10166:18;;;10159:62;10238:18;;6268:134:0;10080:182:1;6268:134:0;6447:21;;;;;;6435:33;;;:61;;-1:-1:-1;6493:3:0;6472:24;;;6435:61;6413:140;;;;-1:-1:-1;;;6413:140:0;;9051:2:1;6413:140:0;;;9033:21:1;9090:2;9070:18;;;9063:30;9129:31;9109:18;;;9102:59;9178:18;;6413:140:0;9023:179:1;6413:140:0;6564:16;;;;:6;:16;;;;;;;;6581:15;6564:33;;;;;;;:42;;6600:6;;6564:42;:::i;:::-;-1:-1:-1;6617:20:0;;;;:10;:20;;;;;;;;:42;;;;;;;;;;;;;;6643:15;6617:42;;;;;6670:29;;;;;;;;;:46;;;;;;;;:59;;-1:-1:-1;;6670:59:0;6719:10;6670:59;;;;;;6740:25;;:13;:25;;;;;:47;;;:65;6816:42;;:44;;;;;;:::i;:::-;;;;;;6876:165;6900:8;6923:15;6953:6;;6974;6995:10;7020;6876:165;;;;;;;;;;;;:::i;:::-;;;;;;;;6021:1028;;;;;:::o;5173:441::-;5284:10;5242:25;5270;;;:13;:25;;;;;5328:21;;;;:32;-1:-1:-1;5328:32:0;5306:109;;;;-1:-1:-1;;;5306:109:0;;11683:2:1;5306:109:0;;;11665:21:1;11722:2;11702:18;;;11695:30;11761:29;11741:18;;;11734:57;11808:18;;5306:109:0;11655:177:1;5306:109:0;5446:15;5426:35;;5472:21;;;:32;;5497:7;;5472:21;5426:17;;5472:32;;5497:7;;5472:32;:::i;:::-;;;;;;;;5540:7;5515;:21;;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;5563:43:0;;;5586:10;5105:74:1;;5210:2;5195:18;;5188:34;;;5563:43:0;;5078:18:1;5563:43:0;;;;;;;;5173:441;;:::o;20160:89::-;20201:13;20234:7;20227:14;;;;;:::i;10061:607::-;10186:16;10217:19;10251:27;10307:11;10320:14;10338:80;10374:8;10397:10;10338:21;:80::i;:::-;10306:112;;;;10434:6;10429:41;;10450:5;10457:9;;;;;;;;;;;;10468:1;10442:28;;;;;;;;;;10429:41;10503:47;10533:8;10543:6;10503:29;:47::i;:::-;10570:16;;;;:6;:16;;;;;;;;:37;;;;;;;;10561:46;;10481:69;;-1:-1:-1;10570:37:0;10561:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10626:4;10618:42;;;;10061:607;;;;;;:::o;7303:183::-;7392:4;7414:42;7424:10;7436;7448:7;7414:9;:42::i;4928:83::-;4979:24;4985:5;4992:10;4979:5;:24::i;:::-;4928:83;:::o;8193:469::-;8275:10;8238:20;8261:25;;;:13;:25;;;;;8393:12;;8409:6;;8375:30;;:15;:30;:::i;:::-;:40;;8367:71;;;;-1:-1:-1;;;8367:71:0;;9409:2:1;8367:71:0;;;9391:21:1;9448:2;9428:18;;;9421:30;-1:-1:-1;;;9467:18:1;;;9460:48;9525:18;;8367:71:0;9381:168:1;8367:71:0;8476:1;8457:2;:16;;;:20;8449:67;;;;-1:-1:-1;;;8449:67:0;;10875:2:1;8449:67:0;;;10857:21:1;10914:2;10894:18;;;10887:30;10953:34;10933:18;;;10926:62;-1:-1:-1;;;11004:18:1;;;10997:32;11046:19;;8449:67:0;10847:224:1;8449:67:0;8527:54;8545:4;8552:10;8564:2;:16;;;8527:9;:54::i;:::-;8611:1;8592:16;;;:20;8628:26;;8643:10;4846:74:1;;8628:26:0;;4834:2:1;4819:18;8628:26:0;;;;;;;8193:469;:::o;19862:183::-;20009:16;;;;:6;:16;;;;;;;;:28;;;;;;;;20002:35;;19972:12;;20009:28;20002:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19862:183;;;;:::o;1219:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3906:868::-;4007:10;3965:25;3993;;;:13;:25;;;;;;;;4033:21;;;;:25;4029:558;;4104:7;4079;:21;;;:32;4075:410;;4157:7;4132;:21;;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;4075:410:0;;-1:-1:-1;4075:410:0;;4235:171;4275:10;4320:4;4362:7;:21;;;4352:7;:31;;;;:::i;:::-;4235:13;:171::i;:::-;4205:220;;;;;;4468:1;4444:21;;;:25;4075:410;4029:558;;;4525:49;4539:10;4559:4;4566:7;4525:13;:49::i;:::-;4517:58;;;;;;4617:15;4597:35;;4688:21;;;:32;;4713:7;;4688:21;4597:17;;4688:32;;4713:7;;4688:32;:::i;:::-;;;;-1:-1:-1;;4736:30:0;;;4746:10;5105:74:1;;5210:2;5195:18;;5188:34;;;4736:30:0;;5078:18:1;4736:30:0;5060:168:1;18170:294:0;18291:7;18331:20;;;:10;:20;;;;;:27;18373:9;;;:27;;;18394:6;18386:4;:14;;18373:27;18369:41;;;18409:1;18402:8;;;;;18369:41;18428:20;;;;:10;:20;;;;;:28;;18449:6;;18428:28;;;;-1:-1:-1;;;18428:28:0;;;;;;;;;;;;;;;;;18421:35;;;18170:294;;;;:::o;2668:130::-;2740:49;2754:10;2774:4;2781:7;2740:13;:49::i;:::-;2732:58;;;;;961:47;;;;;;;;;;;;;;;;;;;;20777:381;-1:-1:-1;;;;;20908:20:0;;20900:69;;;;-1:-1:-1;;;20900:69:0;;11278:2:1;20900:69:0;;;11260:21:1;11317:2;11297:18;;;11290:30;11356:34;11336:18;;;11329:62;-1:-1:-1;;;11407:18:1;;;11400:34;11451:19;;20900:69:0;11250:226:1;20900:69:0;-1:-1:-1;;;;;20988:22:0;;20980:69;;;;-1:-1:-1;;;20980:69:0;;8648:2:1;20980:69:0;;;8630:21:1;8687:2;8667:18;;;8660:30;8726:34;8706:18;;;8699:62;-1:-1:-1;;;8777:18:1;;;8770:32;8819:19;;20980:69:0;8620:224:1;20980:69:0;-1:-1:-1;;;;;21060:19:0;;;;;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;:39;;;21115:35;;12343:25:1;;;21115:35:0;;12316:18:1;21115:35:0;;;;;;;;20777:381;;;:::o;22359:425::-;-1:-1:-1;;;;;22493:21:0;;22485:71;;;;-1:-1:-1;;;22485:71:0;;10469:2:1;22485:71:0;;;10451:21:1;10508:2;10488:18;;;10481:30;10547:34;10527:18;;;10520:62;-1:-1:-1;;;10598:18:1;;;10591:35;10643:19;;22485:71:0;10441:227:1;22485:71:0;-1:-1:-1;;;;;22576:24:0;;22567:72;;;;-1:-1:-1;;;22567:72:0;;8244:2:1;22567:72:0;;;8226:21:1;8283:2;8263:18;;;8256:30;8322:34;8302:18;;;8295:62;-1:-1:-1;;;8373:18:1;;;8366:33;8416:19;;22567:72:0;8216:225:1;22567:72:0;-1:-1:-1;;;;;22650:18:0;;;;;;:9;:18;;;;;:29;;22672:7;;22650:18;:29;;22672:7;;22650:29;:::i;:::-;;;;-1:-1:-1;;;;;;;22690:21:0;;;;;;:9;:21;;;;;:32;;22715:7;;22690:21;:32;;22715:7;;22690:32;:::i;:::-;;;;;;;;22756:10;-1:-1:-1;;;;;22738:38:0;22747:7;-1:-1:-1;;;;;22738:38:0;;22768:7;22738:38;;;;12343:25:1;;12331:2;12316:18;;12298:76;21838:273:0;-1:-1:-1;;;;;21915:22:0;;21907:66;;;;-1:-1:-1;;;21907:66:0;;12039:2:1;21907:66:0;;;12021:21:1;12078:2;12058:18;;;12051:30;12117:33;12097:18;;;12090:61;12168:18;;21907:66:0;12011:181:1;21907:66:0;22000:7;21984:12;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;22018:19:0;;;;;;:9;:19;;;;;:30;;22041:7;;22018:19;:30;;22041:7;;22018:30;:::i;:::-;;;;-1:-1:-1;;22064:39:0;;12343:25:1;;;-1:-1:-1;;;;;22064:39:0;;;22081:1;;22064:39;;12331:2:1;12316:18;22064:39:0;;;;;;;21838:273;;:::o;23105:352::-;23234:4;23251:39;23261:7;23270:10;23282:7;23251:9;:39::i;:::-;-1:-1:-1;;;;;23371:20:0;;;;;;:11;:20;;;;;;;;23400:4;23371:35;;;;;;;;23301:126;;23324:7;;23346:10;;23371:45;;23409:7;;23371:45;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:196:1;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:2;;200:1;197;190:12;215:738;;310:3;303:4;295:6;291:17;287:27;277:2;;332:5;325;318:20;277:2;372:6;359:20;398:18;435:2;431;428:10;425:2;;;441:18;;:::i;:::-;516:2;510:9;484:2;570:13;;-1:-1:-1;;566:22:1;;;590:2;562:31;558:40;546:53;;;614:18;;;634:22;;;611:46;608:2;;;660:18;;:::i;:::-;700:10;696:2;689:22;735:2;727:6;720:18;781:3;774:4;769:2;761:6;757:15;753:26;750:35;747:2;;;802:5;795;788:20;747:2;870;863:4;855:6;851:17;844:4;836:6;832:17;819:54;893:15;;;910:4;889:26;882:41;;;;-1:-1:-1;897:6:1;267:686;-1:-1:-1;;;267:686:1:o;958:196::-;;1070:2;1058:9;1049:7;1045:23;1041:32;1038:2;;;1091:6;1083;1076:22;1038:2;1119:29;1138:9;1119:29;:::i;:::-;1109:39;1028:126;-1:-1:-1;;;1028:126:1:o;1159:270::-;;;1288:2;1276:9;1267:7;1263:23;1259:32;1256:2;;;1309:6;1301;1294:22;1256:2;1337:29;1356:9;1337:29;:::i;:::-;1327:39;;1385:38;1419:2;1408:9;1404:18;1385:38;:::i;:::-;1375:48;;1246:183;;;;;:::o;1434:338::-;;;;1580:2;1568:9;1559:7;1555:23;1551:32;1548:2;;;1601:6;1593;1586:22;1548:2;1629:29;1648:9;1629:29;:::i;:::-;1619:39;;1677:38;1711:2;1700:9;1696:18;1677:38;:::i;:::-;1667:48;;1762:2;1751:9;1747:18;1734:32;1724:42;;1538:234;;;;;:::o;1777:264::-;;;1906:2;1894:9;1885:7;1881:23;1877:32;1874:2;;;1927:6;1919;1912:22;1874:2;1955:29;1974:9;1955:29;:::i;:::-;1945:39;2031:2;2016:18;;;;2003:32;;-1:-1:-1;;;1864:177:1:o;2046:190::-;;2158:2;2146:9;2137:7;2133:23;2129:32;2126:2;;;2179:6;2171;2164:22;2126:2;-1:-1:-1;2207:23:1;;2116:120;-1:-1:-1;2116:120:1:o;2241:986::-;;;;;;2432:3;2420:9;2411:7;2407:23;2403:33;2400:2;;;2454:6;2446;2439:22;2400:2;2495:9;2482:23;2472:33;;2556:2;2545:9;2541:18;2528:32;2579:18;2620:2;2612:6;2609:14;2606:2;;;2641:6;2633;2626:22;2606:2;2684:6;2673:9;2669:22;2659:32;;2729:7;2722:4;2718:2;2714:13;2710:27;2700:2;;2756:6;2748;2741:22;2700:2;2801;2788:16;2827:2;2819:6;2816:14;2813:2;;;2848:6;2840;2833:22;2813:2;2898:7;2893:2;2884:6;2880:2;2876:15;2872:24;2869:37;2866:2;;;2924:6;2916;2909:22;2866:2;2960;2956;2952:11;2942:21;;2982:6;2972:16;;;3035:2;3024:9;3020:18;3007:32;2997:42;;3092:2;3081:9;3077:18;3064:32;3048:48;;3121:2;3111:8;3108:16;3105:2;;;3142:6;3134;3127:22;3105:2;;3170:51;3213:7;3202:8;3191:9;3187:24;3170:51;:::i;:::-;3160:61;;;2390:837;;;;;;;;:::o;3232:258::-;;;3361:2;3349:9;3340:7;3336:23;3332:32;3329:2;;;3382:6;3374;3367:22;3329:2;-1:-1:-1;;3410:23:1;;;3480:2;3465:18;;;3452:32;;-1:-1:-1;3319:171:1:o;3690:475::-;;3769:5;3763:12;3796:6;3791:3;3784:19;3821:3;3833:162;3847:6;3844:1;3841:13;3833:162;;;3909:4;3965:13;;;3961:22;;3955:29;3937:11;;;3933:20;;3926:59;3862:12;3833:162;;;4013:6;4010:1;4007:13;4004:2;;;4079:3;4072:4;4063:6;4058:3;4054:16;4050:27;4043:40;4004:2;-1:-1:-1;4147:2:1;4126:15;-1:-1:-1;;4122:29:1;4113:39;;;;4154:4;4109:50;;3739:426;-1:-1:-1;;3739:426:1:o;4422:273::-;;4605:6;4597;4592:3;4579:33;4631:16;;4656:15;;;4631:16;4569:126;-1:-1:-1;4569:126:1:o;5233:635::-;5404:2;5456:21;;;5526:13;;5429:18;;;5548:22;;;5233:635;;5404:2;5627:15;;;;5601:2;5586:18;;;5233:635;5673:169;5687:6;5684:1;5681:13;5673:169;;;5748:13;;5736:26;;5817:15;;;;5782:12;;;;5709:1;5702:9;5673:169;;;-1:-1:-1;5859:3:1;;5384:484;-1:-1:-1;;;;;;5384:484:1:o;6065:369::-;;6276:6;6269:14;6262:22;6251:9;6244:41;6321:2;6316;6305:9;6301:18;6294:30;6341:44;6381:2;6370:9;6366:18;6358:6;6341:44;:::i;:::-;6333:52;;6421:6;6416:2;6405:9;6401:18;6394:34;6234:200;;;;;;:::o;6702:889::-;;7017:6;7006:9;6999:25;7060:6;7055:2;7044:9;7040:18;7033:34;7103:3;7098:2;7087:9;7083:18;7076:31;7144:6;7138:3;7127:9;7123:19;7116:35;7202:6;7194;7188:3;7177:9;7173:19;7160:49;7259:4;7253:3;7244:6;7233:9;7229:22;7225:32;7218:46;7323:2;7319:7;7314:2;7306:6;7302:15;7298:29;7287:9;7283:45;7364:6;7359:2;7348:9;7344:18;7337:34;7432:3;7420:9;7416:2;7412:18;7408:28;7402:3;7391:9;7387:19;7380:57;7454:38;7487:3;7483:2;7479:12;7471:6;7454:38;:::i;:::-;7446:46;;;-1:-1:-1;;;;;7533:6:1;7529:55;7523:3;7512:9;7508:19;7501:84;6989:602;;;;;;;;;;:::o;7596:217::-;;7743:2;7732:9;7725:21;7763:44;7803:2;7792:9;7788:18;7780:6;7763:44;:::i;13334:128::-;;13405:1;13401:6;13398:1;13395:13;13392:2;;;13411:18;;:::i;:::-;-1:-1:-1;13447:9:1;;13382:80::o;13467:217::-;;13533:1;13523:2;;-1:-1:-1;;;13558:31:1;;13612:4;13609:1;13602:15;13640:4;13565:1;13630:15;13523:2;-1:-1:-1;13669:9:1;;13513:171::o;13689:125::-;;13757:1;13754;13751:8;13748:2;;;13762:18;;:::i;:::-;-1:-1:-1;13799:9:1;;13738:76::o;13819:136::-;;13886:5;13876:2;;13895:18;;:::i;:::-;-1:-1:-1;;;13931:18:1;;13866:89::o;13960:380::-;14039:1;14035:12;;;;14082;;;14103:2;;14157:4;14149:6;14145:17;14135:27;;14103:2;14210;14202:6;14199:14;14179:18;14176:38;14173:2;;;14256:10;14251:3;14247:20;14244:1;14237:31;14291:4;14288:1;14281:15;14319:4;14316:1;14309:15;14173:2;;14015:325;;;:::o;14345:135::-;;-1:-1:-1;;14405:17:1;;14402:2;;;14425:18;;:::i;:::-;-1:-1:-1;14472:1:1;14461:13;;14392:88::o;14485:127::-;14546:10;14541:3;14537:20;14534:1;14527:31;14577:4;14574:1;14567:15;14601:4;14598:1;14591:15;14617:127;14678:10;14673:3;14669:20;14666:1;14659:31;14709:4;14706:1;14699:15;14733:4;14730:1;14723:15

Swarm Source

ipfs://f2233fa3c479dfac43a71b519542a8a0dc83f6b7f3788fccd8c715ebdd6b4182

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