Contract 0x9f6091cd579304a27cf8ab4927b1e0c242f61b4d 1

Contract Overview

Balance:
0 ETH
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe164b19579eeb6951a181b8b9eea004078d6939adc3a90a5cc8cb7b18f5d2ea80x6080604013805572022-11-17 18:47:4218 days 23 hrs ago0x4d303b4f20d55b9d0ea269b45ab5610abaf53e09 IN  Create: Autopay0 ETH0.30085697
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xe164b19579eeb6951a181b8b9eea004078d6939adc3a90a5cc8cb7b18f5d2ea813805572022-11-17 18:47:4218 days 23 hrs ago 0x9f6091cd579304a27cf8ab4927b1e0c242f61b4d 0x3251838bd813fdf6a97d32781e011cce8d225d590 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Autopay

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
Yes with 300 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan on 2022-11-17
*/

// SPDX-License-Identifier: MIT

// File: .deps/github/tellor-io/autoPay/contracts/interfaces/IQueryDataStorage.sol


pragma solidity ^0.8.0;

interface IQueryDataStorage {
  function storeData(bytes memory _queryData) external; 
  function getQueryData(bytes32 _queryId) external view returns (bytes memory);
}

// File: .deps/github/tellor-io/autoPay/contracts/interfaces/IERC20.sol


pragma solidity 0.8.3;

interface IERC20 {
  function transfer(address _to, uint256 _amount) external returns(bool);
  function transferFrom(address _from, address _to, uint256 _amount) external returns(bool);
  function approve(address _spender, uint256 _amount) external returns(bool);
}

// File: usingtellor/contracts/interface/IMappingContract.sol


pragma solidity ^0.8.0;

interface IMappingContract{
    function getTellorID(bytes32 _id) external view returns(bytes32);
}
// File: usingtellor/contracts/interface/IERC2362.sol


pragma solidity >=0.8.0;

/**
    * @dev EIP2362 Interface for pull oracles
    * https://github.com/tellor-io/EIP-2362
*/
interface IERC2362
{
	/**
	 * @dev Exposed function pertaining to EIP standards
	 * @param _id bytes32 ID of the query
	 * @return int,uint,uint returns the value, timestamp, and status code of query
	 */
	function valueFor(bytes32 _id) external view returns(int256,uint256,uint256);
}
// File: usingtellor/contracts/interface/ITellor.sol


pragma solidity >=0.8.0;

interface ITellor {
    //Controller
    function addresses(bytes32) external view returns (address);

    function uints(bytes32) external view returns (uint256);

    function burn(uint256 _amount) external;

    function changeDeity(address _newDeity) external;

    function changeOwner(address _newOwner) external;
    function changeUint(bytes32 _target, uint256 _amount) external;

    function migrate() external;

    function mint(address _reciever, uint256 _amount) external;

    function init() external;

    function getAllDisputeVars(uint256 _disputeId)
        external
        view
        returns (
            bytes32,
            bool,
            bool,
            bool,
            address,
            address,
            address,
            uint256[9] memory,
            int256
        );

    function getDisputeIdByDisputeHash(bytes32 _hash)
        external
        view
        returns (uint256);

    function getDisputeUintVars(uint256 _disputeId, bytes32 _data)
        external
        view
        returns (uint256);

    function getLastNewValueById(uint256 _requestId)
        external
        view
        returns (uint256, bool);

    function retrieveData(uint256 _requestId, uint256 _timestamp)
        external
        view
        returns (uint256);

    function getNewValueCountbyRequestId(uint256 _requestId)
        external
        view
        returns (uint256);

    function getAddressVars(bytes32 _data) external view returns (address);

    function getUintVar(bytes32 _data) external view returns (uint256);

    function totalSupply() external view returns (uint256);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function isMigrated(address _addy) external view returns (bool);

    function allowance(address _user, address _spender)
        external
        view
        returns (uint256);

    function allowedToTrade(address _user, uint256 _amount)
        external
        view
        returns (bool);

    function approve(address _spender, uint256 _amount) external returns (bool);

    function approveAndTransferFrom(
        address _from,
        address _to,
        uint256 _amount
    ) external returns (bool);

    function balanceOf(address _user) external view returns (uint256);

    function balanceOfAt(address _user, uint256 _blockNumber)
        external
        view
        returns (uint256);

    function transfer(address _to, uint256 _amount)
        external
        returns (bool success);

    function transferFrom(
        address _from,
        address _to,
        uint256 _amount
    ) external returns (bool success);

    function depositStake() external;

    function requestStakingWithdraw() external;

    function withdrawStake() external;

    function changeStakingStatus(address _reporter, uint256 _status) external;

    function slashReporter(address _reporter, address _disputer) external;

    function getStakerInfo(address _staker)
        external
        view
        returns (uint256, uint256);

    function getTimestampbyRequestIDandIndex(uint256 _requestId, uint256 _index)
        external
        view
        returns (uint256);

    function getNewCurrentVariables()
        external
        view
        returns (
            bytes32 _c,
            uint256[5] memory _r,
            uint256 _d,
            uint256 _t
        );

    function getNewValueCountbyQueryId(bytes32 _queryId)
        external
        view
        returns (uint256);

    function getTimestampbyQueryIdandIndex(bytes32 _queryId, uint256 _index)
        external
        view
        returns (uint256);

    function retrieveData(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (bytes memory);

    //Governance
    enum VoteResult {
        FAILED,
        PASSED,
        INVALID
    }

    function setApprovedFunction(bytes4 _func, bool _val) external;

    function beginDispute(bytes32 _queryId, uint256 _timestamp) external;

    function delegate(address _delegate) external;

    function delegateOfAt(address _user, uint256 _blockNumber)
        external
        view
        returns (address);

    function executeVote(uint256 _disputeId) external;

    function proposeVote(
        address _contract,
        bytes4 _function,
        bytes calldata _data,
        uint256 _timestamp
    ) external;

    function tallyVotes(uint256 _disputeId) external;

    function governance() external view returns (address);

    function updateMinDisputeFee() external;

    function verify() external pure returns (uint256);

    function vote(
        uint256 _disputeId,
        bool _supports,
        bool _invalidQuery
    ) external;

    function voteFor(
        address[] calldata _addys,
        uint256 _disputeId,
        bool _supports,
        bool _invalidQuery
    ) external;

    function getDelegateInfo(address _holder)
        external
        view
        returns (address, uint256);

    function isFunctionApproved(bytes4 _func) external view returns (bool);

    function isApprovedGovernanceContract(address _contract)
        external
        returns (bool);

    function getVoteRounds(bytes32 _hash)
        external
        view
        returns (uint256[] memory);

    function getVoteCount() external view returns (uint256);

    function getVoteInfo(uint256 _disputeId)
        external
        view
        returns (
            bytes32,
            uint256[9] memory,
            bool[2] memory,
            VoteResult,
            bytes memory,
            bytes4,
            address[2] memory
        );

    function getDisputeInfo(uint256 _disputeId)
        external
        view
        returns (
            uint256,
            uint256,
            bytes memory,
            address
        );

    function getOpenDisputesOnId(bytes32 _queryId)
        external
        view
        returns (uint256);

    function didVote(uint256 _disputeId, address _voter)
        external
        view
        returns (bool);

    //Oracle
    function getReportTimestampByIndex(bytes32 _queryId, uint256 _index)
        external
        view
        returns (uint256);

    function getValueByTimestamp(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (bytes memory);

    function getBlockNumberByTimestamp(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (uint256);

    function getReportingLock() external view returns (uint256);

    function getReporterByTimestamp(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (address);

    function reportingLock() external view returns (uint256);

    function removeValue(bytes32 _queryId, uint256 _timestamp) external;
    function getTipsByUser(address _user) external view returns(uint256);
    function tipQuery(bytes32 _queryId, uint256 _tip, bytes memory _queryData) external;
    function submitValue(bytes32 _queryId, bytes calldata _value, uint256 _nonce, bytes memory _queryData) external;
    function burnTips() external;

    function changeReportingLock(uint256 _newReportingLock) external;
    function getReportsSubmittedByAddress(address _reporter) external view returns(uint256);
    function changeTimeBasedReward(uint256 _newTimeBasedReward) external;
    function getReporterLastTimestamp(address _reporter) external view returns(uint256);
    function getTipsById(bytes32 _queryId) external view returns(uint256);
    function getTimeBasedReward() external view returns(uint256);
    function getTimestampCountById(bytes32 _queryId) external view returns(uint256);
    function getTimestampIndexByTimestamp(bytes32 _queryId, uint256 _timestamp) external view returns(uint256);
    function getCurrentReward(bytes32 _queryId) external view returns(uint256, uint256);
    function getCurrentValue(bytes32 _queryId) external view returns(bytes memory);
    function getDataBefore(bytes32 _queryId, uint256 _timestamp) external view returns(bool _ifRetrieve, bytes memory _value, uint256 _timestampRetrieved);
    function getTimeOfLastNewValue() external view returns(uint256);
    function depositStake(uint256 _amount) external;
    function requestStakingWithdraw(uint256 _amount) external;

    //Test functions
    function changeAddressVar(bytes32 _id, address _addy) external;

    //parachute functions
    function killContract() external;

    function migrateFor(address _destination, uint256 _amount) external;

    function rescue51PercentAttack(address _tokenHolder) external;

    function rescueBrokenDataReporting() external;

    function rescueFailedUpdate() external;

    //Tellor 360
    function addStakingRewards(uint256 _amount) external;

    function _sliceUint(bytes memory _b)
        external
        pure
        returns (uint256 _number);

    function claimOneTimeTip(bytes32 _queryId, uint256[] memory _timestamps)
        external;

    function claimTip(
        bytes32 _feedId,
        bytes32 _queryId,
        uint256[] memory _timestamps
    ) external;

    function fee() external view returns (uint256);

    function feedsWithFunding(uint256) external view returns (bytes32);

    function fundFeed(
        bytes32 _feedId,
        bytes32 _queryId,
        uint256 _amount
    ) external;

    function getCurrentFeeds(bytes32 _queryId)
        external
        view
        returns (bytes32[] memory);

    function getCurrentTip(bytes32 _queryId) external view returns (uint256);

    function getDataAfter(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (bytes memory _value, uint256 _timestampRetrieved);

    function getDataFeed(bytes32 _feedId)
        external
        view
        returns (Autopay.FeedDetails memory);

    function getFundedFeeds() external view returns (bytes32[] memory);

    function getFundedQueryIds() external view returns (bytes32[] memory);

    function getIndexForDataAfter(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (bool _found, uint256 _index);

    function getIndexForDataBefore(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (bool _found, uint256 _index);

    function getMultipleValuesBefore(
        bytes32 _queryId,
        uint256 _timestamp,
        uint256 _maxAge,
        uint256 _maxCount
    )
        external
        view
        returns (uint256[] memory _values, uint256[] memory _timestamps);

    function getPastTipByIndex(bytes32 _queryId, uint256 _index)
        external
        view
        returns (Autopay.Tip memory);

    function getPastTipCount(bytes32 _queryId) external view returns (uint256);

    function getPastTips(bytes32 _queryId)
        external
        view
        returns (Autopay.Tip[] memory);

    function getQueryIdFromFeedId(bytes32 _feedId)
        external
        view
        returns (bytes32);

    function getRewardAmount(
        bytes32 _feedId,
        bytes32 _queryId,
        uint256[] memory _timestamps
    ) external view returns (uint256 _cumulativeReward);

    function getRewardClaimedStatus(
        bytes32 _feedId,
        bytes32 _queryId,
        uint256 _timestamp
    ) external view returns (bool);

    function getTipsByAddress(address _user) external view returns (uint256);

    function isInDispute(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (bool);

    function queryIdFromDataFeedId(bytes32) external view returns (bytes32);

    function queryIdsWithFunding(uint256) external view returns (bytes32);

    function queryIdsWithFundingIndex(bytes32) external view returns (uint256);

    function setupDataFeed(
        bytes32 _queryId,
        uint256 _reward,
        uint256 _startTime,
        uint256 _interval,
        uint256 _window,
        uint256 _priceThreshold,
        uint256 _rewardIncreasePerSecond,
        bytes memory _queryData,
        uint256 _amount
    ) external;

    function tellor() external view returns (address);

    function tip(
        bytes32 _queryId,
        uint256 _amount,
        bytes memory _queryData
    ) external;

    function tips(bytes32, uint256)
        external
        view
        returns (uint256 amount, uint256 timestamp);

    function token() external view returns (address);

    function userTipsTotal(address) external view returns (uint256);

    function valueFor(bytes32 _id)
        external
        view
        returns (
            int256 _value,
            uint256 _timestamp,
            uint256 _statusCode
        );
}

interface IAutopay {
    struct FeedDetails {
        uint256 reward;
        uint256 balance;
        uint256 startTime;
        uint256 interval;
        uint256 window;
        uint256 priceThreshold;
        uint256 rewardIncreasePerSecond;
        uint256 feedsWithFundingIndex;
    }

    struct Tip {
        uint256 amount;
        uint256 timestamp;
    }
    function getStakeAmount() external view returns(uint256);
    function stakeAmount() external view returns(uint256);
    function token() external view returns(address);
}

// File: usingtellor/contracts/UsingTellor.sol


pragma solidity >=0.8.0;




/**
 @author Tellor Inc
 @title UsingTellor
 @dev This contract helps smart contracts read data from Tellor
 */
contract UsingTellor is IERC2362 {
    ITellor public tellor;
    IMappingContract public idMappingContract;

    /*Constructor*/
    /**
     * @dev the constructor sets the oracle address in storage
     * @param _tellor is the Tellor Oracle address
     */
    constructor(address payable _tellor) {
        tellor = ITellor(_tellor);
    }

    /*Getters*/
    /**
     * @dev Retrieves the next value for the queryId after the specified timestamp
     * @param _queryId is the queryId to look up the value for
     * @param _timestamp after which to search for next value
     * @return _value the value retrieved
     * @return _timestampRetrieved the value's timestamp
     */
    function getDataAfter(bytes32 _queryId, uint256 _timestamp)
        public
        view
        returns (bytes memory _value, uint256 _timestampRetrieved)
    {
        (bool _found, uint256 _index) = getIndexForDataAfter(
            _queryId,
            _timestamp
        );
        if (!_found) {
            return ("", 0);
        }
        _timestampRetrieved = getTimestampbyQueryIdandIndex(_queryId, _index);
        _value = retrieveData(_queryId, _timestampRetrieved);
        return (_value, _timestampRetrieved);
    }

    /**
     * @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 _value the value retrieved
     * @return _timestampRetrieved the value's timestamp
     */
    function getDataBefore(bytes32 _queryId, uint256 _timestamp)
        public
        view
        returns (bytes memory _value, uint256 _timestampRetrieved)
    {
        (, _value, _timestampRetrieved) = tellor.getDataBefore(
            _queryId,
            _timestamp
        );
    }

    /**
     * @dev Retrieves next array index of data after the specified timestamp for the queryId
     * @param _queryId is the queryId to look up the index for
     * @param _timestamp is the timestamp after which to search for the next index
     * @return _found whether the index was found
     * @return _index the next index found after the specified timestamp
     */
    function getIndexForDataAfter(bytes32 _queryId, uint256 _timestamp)
        public
        view
        returns (bool _found, uint256 _index)
    {
        (_found, _index) = tellor.getIndexForDataBefore(_queryId, _timestamp);
        if (_found) {
            _index++;
        }
        uint256 _valCount = tellor.getNewValueCountbyQueryId(_queryId);
        // no value after timestamp
        if (_valCount <= _index) {
            return (false, 0);
        }
        uint256 _timestampRetrieved = tellor.getTimestampbyQueryIdandIndex(
            _queryId,
            _index
        );
        if (_timestampRetrieved > _timestamp) {
            return (true, _index);
        }
        // if _timestampRetrieved equals _timestamp, try next value
        _index++;
        // no value after timestamp
        if (_valCount <= _index) {
            return (false, 0);
        }
        _timestampRetrieved = tellor.getTimestampbyQueryIdandIndex(
            _queryId,
            _index
        );
        return (true, _index);
    }

    /**
     * @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)
    {
        return tellor.getIndexForDataBefore(_queryId, _timestamp);
    }

    /**
     * @dev Retrieves multiple uint256 values before the specified timestamp
     * @param _queryId the unique id of the data query
     * @param _timestamp the timestamp before which to search for values
     * @param _maxAge the maximum number of seconds before the _timestamp to search for values
     * @param _maxCount the maximum number of values to return
     * @return _values the values retrieved, ordered from oldest to newest
     * @return _timestamps the timestamps of the values retrieved
     */
    function getMultipleValuesBefore(
        bytes32 _queryId,
        uint256 _timestamp,
        uint256 _maxAge,
        uint256 _maxCount
    )
        public
        view
        returns (bytes[] memory _values, uint256[] memory _timestamps)
    {
        (bool _ifRetrieve, uint256 _startIndex) = getIndexForDataAfter(
            _queryId,
            _timestamp - _maxAge
        );
        // no value within range
        if (!_ifRetrieve) {
            return (new bytes[](0), new uint256[](0));
        }
        uint256 _endIndex;
        (_ifRetrieve, _endIndex) = getIndexForDataBefore(_queryId, _timestamp);
        // no value before _timestamp
        if (!_ifRetrieve) {
            return (new bytes[](0), new uint256[](0));
        }
        uint256 _valCount = _endIndex - _startIndex + 1;
        // more than _maxCount values found within range
        if (_valCount > _maxCount) {
            _startIndex = _endIndex - _maxCount + 1;
            _valCount = _maxCount;
        }
        bytes[] memory _valuesArray = new bytes[](_valCount);
        uint256[] memory _timestampsArray = new uint256[](_valCount);
        bytes memory _valueRetrieved;
        for (uint256 _i = 0; _i < _valCount; _i++) {
            _timestampsArray[_i] = getTimestampbyQueryIdandIndex(
                _queryId,
                (_startIndex + _i)
            );
            _valueRetrieved = retrieveData(_queryId, _timestampsArray[_i]);
            _valuesArray[_i] = _valueRetrieved;
        }
        return (_valuesArray, _timestampsArray);
    }

    /**
     * @dev Counts the number of values that have been submitted for the queryId
     * @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 tellor.getNewValueCountbyQueryId(_queryId);
    }

    /**
     * @dev Returns the address of the reporter who submitted a value for a data ID at a specific time
     * @param _queryId is ID of the specific data feed
     * @param _timestamp is the timestamp to find a corresponding reporter for
     * @return address of the reporter who reported the value for the data ID at the given timestamp
     */
    function getReporterByTimestamp(bytes32 _queryId, uint256 _timestamp)
        public
        view
        returns (address)
    {
        return tellor.getReporterByTimestamp(_queryId, _timestamp);
    }

    /**
     * @dev Gets the timestamp for the value based on their index
     * @param _queryId is the id 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)
    {
        return tellor.getTimestampbyQueryIdandIndex(_queryId, _index);
    }

    /**
     * @dev Determines whether a value with a given queryId and timestamp has been disputed
     * @param _queryId is the value id to look up
     * @param _timestamp is the timestamp of the value to look up
     * @return bool true if queryId/timestamp is under dispute
     */
    function isInDispute(bytes32 _queryId, uint256 _timestamp)
        public
        view
        returns (bool)
    {
        return tellor.isInDispute(_queryId, _timestamp);
    }

    /**
     * @dev Retrieve value from oracle based on queryId/timestamp
     * @param _queryId being requested
     * @param _timestamp to retrieve data/value from
     * @return bytes value for query/timestamp submitted
     */
    function retrieveData(bytes32 _queryId, uint256 _timestamp)
        public
        view
        returns (bytes memory)
    {
        return tellor.retrieveData(_queryId, _timestamp);
    }


    /**
     * @dev allows dev to set mapping contract for valueFor (EIP2362)
     * @param _addy address of mapping contract
     */
     function setIdMappingContract(address _addy) external{
         require(address(idMappingContract) == address(0));
         idMappingContract = IMappingContract(_addy); 
     }

    /**
     * @dev Retrieve most recent int256 value from oracle based on queryId
     * @param _id being requested
     * @return _value most recent value submitted
     * @return _timestamp timestamp of most recent value
     * @return _statusCode 200 if value found, 404 if not found
     */
    function valueFor(bytes32 _id)
        external
        view
        override
        returns (
            int256 _value,
            uint256 _timestamp,
            uint256 _statusCode
        )
    {
        _id = idMappingContract.getTellorID(_id);
        uint256 _count = getNewValueCountbyQueryId(_id);
        if (_count == 0) {
            return (0, 0, 404);
        }
        _timestamp = getTimestampbyQueryIdandIndex(_id, _count - 1);
        bytes memory _valueBytes = retrieveData(_id, _timestamp);
        if (_valueBytes.length == 0) {
            return (0, 0, 404);
        }
        uint256 _valueUint = _sliceUint(_valueBytes);
        _value = int256(_valueUint);
        return (_value, _timestamp, 200);
    }

    // Internal functions
    /**
     * @dev Convert bytes to uint256
     * @param _b bytes value to convert to uint256
     * @return _number uint256 converted from bytes
     */
    function _sliceUint(bytes memory _b) internal pure returns(uint256 _number){
        for (uint256 _i = 0; _i < _b.length; _i++) {
            _number = _number * 256 + uint8(_b[_i]);
        }
    }
}

// File: .deps/github/tellor-io/autoPay/contracts/Autopay.sol


pragma solidity 0.8.3;




/**
 @author Tellor Inc.
 @title Autopay
 @dev This is a contract for automatically paying for Tellor oracle data at
 * specific time intervals, as well as one time tips.
*/
contract Autopay is UsingTellor {
    // Storage
    IERC20 public token; // TRB token address
    IQueryDataStorage public queryDataStorage; // Query data storage contract
    uint256 public fee; // 1000 is 100%, 50 is 5%, etc.

    mapping(bytes32 => bytes32[]) currentFeeds; // mapping queryId to dataFeedIds array
    mapping(bytes32 => mapping(bytes32 => Feed)) dataFeed; // mapping queryId to dataFeedId to details
    mapping(bytes32 => bytes32) public queryIdFromDataFeedId; // mapping dataFeedId to queryId
    mapping(bytes32 => uint256) public queryIdsWithFundingIndex; // mapping queryId to queryIdsWithFunding index plus one (0 if not in array)
    mapping(bytes32 => Tip[]) public tips; // mapping queryId to tips
    mapping(address => uint256) public userTipsTotal; // track user tip total per user

    bytes32[] public feedsWithFunding; // array of dataFeedIds that have funding
    bytes32[] public queryIdsWithFunding; // array of queryIds that have funding

    // Structs
    struct Feed {
        FeedDetails details;
        mapping(uint256 => bool) rewardClaimed; // tracks which tips were already paid out
    }

    struct FeedDetails {
        uint256 reward; // amount paid for each eligible data submission
        uint256 balance; // account remaining balance
        uint256 startTime; // time of first payment window
        uint256 interval; // time between pay periods
        uint256 window; // amount of time data can be submitted per interval
        uint256 priceThreshold; //change in price necessitating an update 100 = 1%
        uint256 rewardIncreasePerSecond; // amount reward increases per second within window (0 for flat rewards)
        uint256 feedsWithFundingIndex; // index plus one of dataFeedID in feedsWithFunding array (0 if not in array)
    }

    struct FeedDetailsWithQueryData {
        FeedDetails details; // feed details for feed id with funding
        bytes queryData; // query data for requested data
    }

    struct SingleTipsWithQueryData {
        bytes queryData; // query data with single tip for requested data
        uint256 tip; // reward amount for request
    }

    struct Tip {
        uint256 amount; // amount tipped
        uint256 timestamp; // time tipped
        uint256 cumulativeTips; // cumulative tips for query ID
    }

    // Events
    event DataFeedFunded(
        bytes32 indexed _queryId,
        bytes32 indexed _feedId,
        uint256 indexed _amount,
        address _feedFunder,
        FeedDetails _feedDetails
    );
    event NewDataFeed(
        bytes32 indexed _queryId,
        bytes32 indexed _feedId,
        bytes _queryData,
        address _feedCreator
    );
    event OneTimeTipClaimed(
        bytes32 indexed _queryId,
        uint256 indexed _amount,
        address indexed _reporter
    );
    event TipAdded(
        bytes32 indexed _queryId,
        uint256 indexed _amount,
        bytes _queryData,
        address _tipper
    );
    event TipClaimed(
        bytes32 indexed _feedId,
        bytes32 indexed _queryId,
        uint256 indexed _amount,
        address _reporter
    );

    // Functions
    /**
     * @dev Initializes system parameters
     * @param _tellor address of Tellor contract
     * @param _queryDataStorage address of query data storage contract
     * @param _fee percentage, 1000 is 100%, 50 is 5%, etc.
     */
    constructor(
        address payable _tellor,
        address _queryDataStorage,
        uint256 _fee
    ) UsingTellor(_tellor) {
        token = IERC20(tellor.token());
        queryDataStorage = IQueryDataStorage(_queryDataStorage);
        fee = _fee;
    }

    /**
     * @dev Function to claim singular tip
     * @param _queryId id of reported data
     * @param _timestamps[] batch of timestamps array of reported data eligible for reward
     */
    function claimOneTimeTip(bytes32 _queryId, uint256[] calldata _timestamps)
        external
    {
        require(
            tips[_queryId].length > 0,
            "no tips submitted for this queryId"
        );
        uint256 _cumulativeReward;
        for (uint256 _i = 0; _i < _timestamps.length; _i++) {
            _cumulativeReward += _getOneTimeTipAmount(
                _queryId,
                _timestamps[_i]
            );
        }
        require(
            token.transfer(
                msg.sender,
                _cumulativeReward - ((_cumulativeReward * fee) / 1000)
            )
        );
        token.approve(address(tellor), (_cumulativeReward * fee) / 1000);
        tellor.addStakingRewards((_cumulativeReward * fee) / 1000);
        if (getCurrentTip(_queryId) == 0) {
            if (queryIdsWithFundingIndex[_queryId] != 0) {
                uint256 _idx = queryIdsWithFundingIndex[_queryId] - 1;
                // Replace unfunded feed in array with last element
                queryIdsWithFunding[_idx] = queryIdsWithFunding[
                    queryIdsWithFunding.length - 1
                ];
                bytes32 _queryIdLastFunded = queryIdsWithFunding[_idx];
                queryIdsWithFundingIndex[_queryIdLastFunded] = _idx + 1;
                queryIdsWithFundingIndex[_queryId] = 0;
                queryIdsWithFunding.pop();
            }
        }
        emit OneTimeTipClaimed(_queryId, _cumulativeReward, msg.sender);
    }

    /**
     * @dev Allows Tellor reporters to claim their tips in batches
     * @param _feedId unique feed identifier
     * @param _queryId ID of reported data
     * @param _timestamps batch of timestamps array of reported data eligible for reward
     */
    function claimTip(
        bytes32 _feedId,
        bytes32 _queryId,
        uint256[] calldata _timestamps
    ) external {
        Feed storage _feed = dataFeed[_queryId][_feedId];
        uint256 _balance = _feed.details.balance;
        require(_balance > 0, "no funds available for this feed");
        uint256 _cumulativeReward;
        for (uint256 _i = 0; _i < _timestamps.length; _i++) {
            require(
                block.timestamp - _timestamps[_i] > 12 hours,
                "buffer time has not passed"
            );
            require(
                getReporterByTimestamp(_queryId, _timestamps[_i]) == msg.sender,
                "message sender not reporter for given queryId and timestamp"
            );
            _cumulativeReward += _getRewardAmount(
                _feedId,
                _queryId,
                _timestamps[_i]
            );
            if (_cumulativeReward >= _balance) {
                // Balance runs out
                require(
                    _i == _timestamps.length - 1,
                    "insufficient balance for all submitted timestamps"
                );
                _cumulativeReward = _balance;
                // Adjust currently funded feeds
                if (feedsWithFunding.length > 1) {
                    uint256 _idx = _feed.details.feedsWithFundingIndex - 1;
                    // Replace unfunded feed in array with last element
                    feedsWithFunding[_idx] = feedsWithFunding[
                        feedsWithFunding.length - 1
                    ];
                    bytes32 _feedIdLastFunded = feedsWithFunding[_idx];
                    bytes32 _queryIdLastFunded = queryIdFromDataFeedId[
                        _feedIdLastFunded
                    ];
                    dataFeed[_queryIdLastFunded][_feedIdLastFunded]
                        .details
                        .feedsWithFundingIndex = _idx + 1;
                }
                feedsWithFunding.pop();
                _feed.details.feedsWithFundingIndex = 0;
            }
            _feed.rewardClaimed[_timestamps[_i]] = true;
        }
        _feed.details.balance -= _cumulativeReward;
        require(
            token.transfer(
                msg.sender,
                _cumulativeReward - ((_cumulativeReward * fee) / 1000)
            )
        );
        token.approve(address(tellor), (_cumulativeReward * fee) / 1000);
        tellor.addStakingRewards((_cumulativeReward * fee) / 1000);
        emit TipClaimed(_feedId, _queryId, _cumulativeReward, msg.sender);
    }

    /**
     * @dev Allows dataFeed account to be filled with tokens
     * @param _feedId unique feed identifier
     * @param _queryId identifier of reported data type associated with feed
     * @param _amount quantity of tokens to fund feed
     */
    function fundFeed(
        bytes32 _feedId,
        bytes32 _queryId,
        uint256 _amount
    ) public {
        FeedDetails storage _feed = dataFeed[_queryId][_feedId].details;
        require(_feed.reward > 0, "feed not set up");
        require(_amount > 0, "must be sending an amount");
        _feed.balance += _amount;
        require(
            token.transferFrom(msg.sender, address(this), _amount),
            "ERC20: transfer amount exceeds balance"
        );
        // Add to array of feeds with funding
        if (_feed.feedsWithFundingIndex == 0 && _feed.balance > 0) {
            feedsWithFunding.push(_feedId);
            _feed.feedsWithFundingIndex = feedsWithFunding.length;
        }
        userTipsTotal[msg.sender] += _amount;
        emit DataFeedFunded(_feedId, _queryId, _amount, msg.sender, _feed);
    }

    /**
     * @dev Initializes dataFeed parameters.
     * @param _queryId unique identifier of desired data feed
     * @param _reward tip amount per eligible data submission
     * @param _startTime timestamp of first autopay window
     * @param _interval amount of time between autopay windows
     * @param _window amount of time after each new interval when reports are eligible for tips
     * @param _priceThreshold amount price must change to automate update regardless of time (negated if 0, 100 = 1%)
     * @param _rewardIncreasePerSecond amount reward increases per second within a window (0 for flat reward)
     * @param _queryData the data used by reporters to fulfill the query
     * @param _amount optional initial amount to fund it with
     */
    function setupDataFeed(
        bytes32 _queryId,
        uint256 _reward,
        uint256 _startTime,
        uint256 _interval,
        uint256 _window,
        uint256 _priceThreshold,
        uint256 _rewardIncreasePerSecond,
        bytes calldata _queryData,
        uint256 _amount
    ) external returns (bytes32 _feedId) {
        require(
            _queryId == keccak256(_queryData),
            "id must be hash of bytes data"
        );
        _feedId = keccak256(
            abi.encode(
                _queryId,
                _reward,
                _startTime,
                _interval,
                _window,
                _priceThreshold,
                _rewardIncreasePerSecond
            )
        );
        FeedDetails storage _feed = dataFeed[_queryId][_feedId].details;
        require(_feed.reward == 0, "feed must not be set up already");
        require(_reward > 0, "reward must be greater than zero");
        require(_interval > 0, "interval must be greater than zero");
        require(
            _window < _interval,
            "window must be less than interval length"
        );
        _feed.reward = _reward;
        _feed.startTime = _startTime;
        _feed.interval = _interval;
        _feed.window = _window;
        _feed.priceThreshold = _priceThreshold;
        _feed.rewardIncreasePerSecond = _rewardIncreasePerSecond;
        currentFeeds[_queryId].push(_feedId);
        queryIdFromDataFeedId[_feedId] = _queryId;
        queryDataStorage.storeData(_queryData);
        emit NewDataFeed(_queryId, _feedId, _queryData, msg.sender);
        if (_amount > 0) {
            fundFeed(_feedId, _queryId, _amount);
        }
        return _feedId;
    }

    /**
     * @dev Function to run a single tip
     * @param _queryId ID of tipped data
     * @param _amount amount to tip
     * @param _queryData the data used by reporters to fulfill the query
     */
    function tip(
        bytes32 _queryId,
        uint256 _amount,
        bytes calldata _queryData
    ) external {
        require(
            _queryId == keccak256(_queryData),
            "id must be hash of bytes data"
        );
        require(_amount > 0, "tip must be greater than zero");
        Tip[] storage _tips = tips[_queryId];
        if (_tips.length == 0) {
            _tips.push(Tip(_amount, block.timestamp, _amount));
            queryDataStorage.storeData(_queryData);
        } else {
            (, uint256 _timestampRetrieved) = _getCurrentValue(_queryId);
            if (_timestampRetrieved < _tips[_tips.length - 1].timestamp) {
                _tips[_tips.length - 1].timestamp = block.timestamp;
                _tips[_tips.length - 1].amount += _amount;
                _tips[_tips.length - 1].cumulativeTips += _amount;
            } else {
                _tips.push(
                    Tip(
                        _amount,
                        block.timestamp,
                        _tips[_tips.length - 1].cumulativeTips + _amount
                    )
                );
            }
        }
        if (
            queryIdsWithFundingIndex[_queryId] == 0 &&
            getCurrentTip(_queryId) > 0
        ) {
            queryIdsWithFunding.push(_queryId);
            queryIdsWithFundingIndex[_queryId] = queryIdsWithFunding.length;
        }
        require(
            token.transferFrom(msg.sender, address(this), _amount),
            "ERC20: transfer amount exceeds balance"
        );
        userTipsTotal[msg.sender] += _amount;
        emit TipAdded(_queryId, _amount, _queryData, msg.sender);
    }

    // Getters
    /**
     * @dev Getter function to read current data feeds
     * @param _queryId id of reported data
     * @return feedIds array for queryId
     */
    function getCurrentFeeds(bytes32 _queryId)
        external
        view
        returns (bytes32[] memory)
    {
        return currentFeeds[_queryId];
    }

    /**
     * @dev Getter function to current oneTime tip by queryId
     * @param _queryId id of reported data
     * @return amount of tip
     */
    function getCurrentTip(bytes32 _queryId) public view returns (uint256) {
        // if no tips, return 0
        if (tips[_queryId].length == 0) {
            return 0;
        }
        (, uint256 _timestampRetrieved) = _getCurrentValue(_queryId);
        Tip memory _lastTip = tips[_queryId][tips[_queryId].length - 1];
        if (_timestampRetrieved < _lastTip.timestamp) {
            return _lastTip.amount;
        } else {
            return 0;
        }
    }

    /**
     * @dev Getter function to read a specific dataFeed
     * @param _feedId unique feedId of parameters
     * @return FeedDetails details of specified feed
     */
    function getDataFeed(bytes32 _feedId)
        external
        view
        returns (FeedDetails memory)
    {
        return (dataFeed[queryIdFromDataFeedId[_feedId]][_feedId].details);
    }

    /**
     * @dev Getter function for currently funded feed details
     * @return FeedDetailsWithQueryData[] array of details for funded feeds
     */
    function getFundedFeedDetails()
        external
        view
        returns (FeedDetailsWithQueryData[] memory)
    {
        bytes32[] memory _feeds = this.getFundedFeeds();
        FeedDetailsWithQueryData[]
            memory _details = new FeedDetailsWithQueryData[](_feeds.length);
        for (uint256 i = 0; i < _feeds.length; i++) {
            FeedDetails memory _feedDetail = this.getDataFeed(_feeds[i]);
            bytes32 _queryId = this.getQueryIdFromFeedId(_feeds[i]);
            bytes memory _queryData = queryDataStorage.getQueryData(_queryId);
            _details[i].details = _feedDetail;
            _details[i].queryData = _queryData;
        }
        return _details;
    }

    /**
     * @dev Getter function for currently funded feeds
     */
    function getFundedFeeds() external view returns (bytes32[] memory) {
        return feedsWithFunding;
    }

    /**
     * @dev Getter function for queryIds with current one time tips
     */
    function getFundedQueryIds() external view returns (bytes32[] memory) {
        return queryIdsWithFunding;
    }

    /**
     * @dev Getter function for currently funded single tips with queryData
     * @return SingleTipsWithQueryData[] array of current tips
     */
    function getFundedSingleTipsInfo()
        external
        view
        returns (SingleTipsWithQueryData[] memory)
    {
        bytes32[] memory _fundedQueryIds = this.getFundedQueryIds();
        SingleTipsWithQueryData[] memory _query = new SingleTipsWithQueryData[](
            _fundedQueryIds.length
        );
        for (uint256 i = 0; i < _fundedQueryIds.length; i++) {
            bytes memory _data = queryDataStorage.getQueryData(
                _fundedQueryIds[i]
            );
            uint256 _reward = this.getCurrentTip(_fundedQueryIds[i]);
            _query[i].queryData = _data;
            _query[i].tip = _reward;
        }
        return _query;
    }

    /**
     * @dev Getter function to get number of past tips
     * @param _queryId id of reported data
     * @return count of tips available
     */
    function getPastTipCount(bytes32 _queryId) external view returns (uint256) {
        return tips[_queryId].length;
    }

    /**
     * @dev Getter function for past tips
     * @param _queryId id of reported data
     * @return Tip struct (amount/timestamp) of all past tips
     */
    function getPastTips(bytes32 _queryId)
        external
        view
        returns (Tip[] memory)
    {
        return tips[_queryId];
    }

    /**
     * @dev Getter function for past tips by index
     * @param _queryId id of reported data
     * @param _index uint index in the Tip array
     * @return amount/timestamp of specific tip
     */
    function getPastTipByIndex(bytes32 _queryId, uint256 _index)
        external
        view
        returns (Tip memory)
    {
        return tips[_queryId][_index];
    }

    /**
     * @dev Getter function to lookup query IDs from dataFeed IDs
     * @param _feedId dataFeed unique identifier
     * @return bytes32 corresponding query ID
     */
    function getQueryIdFromFeedId(bytes32 _feedId)
        external
        view
        returns (bytes32)
    {
        return queryIdFromDataFeedId[_feedId];
    }

    /**
     * @dev Getter function to read potential rewards for a set of oracle submissions
     * NOTE: Does not consider reporter address, 12-hour dispute buffer period, or duplicate timestamps
     * @param _feedId dataFeed unique identifier
     * @param _queryId unique identifier of reported data
     * @param _timestamps array of timestamps of oracle submissions
     * @return _cumulativeReward total potential reward for the set of oracle submissions
     */
    function getRewardAmount(
        bytes32 _feedId,
        bytes32 _queryId,
        uint256[] calldata _timestamps
    ) external view returns (uint256 _cumulativeReward) {
        FeedDetails storage _feed = dataFeed[_queryId][_feedId].details;
        for (uint256 _i = 0; _i < _timestamps.length; _i++) {
            _cumulativeReward += _getRewardAmount(
                _feedId,
                _queryId,
                _timestamps[_i]
            );
        }
        if (_cumulativeReward > _feed.balance) {
            _cumulativeReward = _feed.balance;
        }
        _cumulativeReward -= ((_cumulativeReward * fee) / 1000);
    }

    /**
     * @dev Getter function for reading whether a reward has been claimed
     * @param _feedId feedId of dataFeed
     * @param _queryId id of reported data
     * @param _timestamp id or reported data
     * @return bool rewardClaimed
     */
    function getRewardClaimedStatus(
        bytes32 _feedId,
        bytes32 _queryId,
        uint256 _timestamp
    ) external view returns (bool) {
        return dataFeed[_queryId][_feedId].rewardClaimed[_timestamp];
    }

    /**
     * @dev Getter function for reading whether a reward has been claimed
     * @param _feedId feedId of dataFeed
     * @param _queryId queryId of reported data
     * @param _timestamp[] list of report timestamps
     * @return bool[] list of rewardClaim status
     */
    function getRewardClaimStatusList(
        bytes32 _feedId,
        bytes32 _queryId,
        uint256[] calldata _timestamp
    ) external view returns (bool[] memory) {
        bool[] memory _status = new bool[](_timestamp.length);
        for (uint256 i = 0; i < _timestamp.length; i++) {
            _status[i] = dataFeed[_queryId][_feedId].rewardClaimed[
                _timestamp[i]
            ];
        }
        return _status;
    }

    /**
     * @dev Getter function for retrieving the total amount of tips paid by a given address
     * @param _user address of user to query
     * @return uint256 total amount of tips paid by user
     */
    function getTipsByAddress(address _user) external view returns (uint256) {
        return userTipsTotal[_user];
    }

    // Internal functions
    /**
     * @dev Internal function to read if a reward has been claimed
     * @param _b bytes value to convert to uint256
     * @return _number uint256 converted from bytes
     */
    function _bytesToUint(bytes memory _b)
        internal
        pure
        returns (uint256 _number)
    {
        for (uint256 _i = 0; _i < _b.length; _i++) {
            _number = _number * 256 + uint8(_b[_i]);
        }
    }

    /**
     ** @dev Internal function which determines tip eligibility for a given oracle submission
     * @param _queryId id of reported data
     * @param _timestamp timestamp of one time tip
     * @return _tipAmount of tip
     */
    function _getOneTimeTipAmount(bytes32 _queryId, uint256 _timestamp)
        internal
        returns (uint256 _tipAmount)
    {
        require(
            block.timestamp - _timestamp > 12 hours,
            "buffer time has not passed"
        );
        require(!isInDispute(_queryId, _timestamp), "value disputed");
        require(
            msg.sender == getReporterByTimestamp(_queryId, _timestamp),
            "msg sender must be reporter address"
        );
        Tip[] storage _tips = tips[_queryId];
        uint256 _min = 0;
        uint256 _max = _tips.length;
        uint256 _mid;
        while (_max - _min > 1) {
            _mid = (_max + _min) / 2;
            if (_tips[_mid].timestamp > _timestamp) {
                _max = _mid;
            } else {
                _min = _mid;
            }
        }
        (, uint256 _timestampBefore) = getDataBefore(_queryId, _timestamp);
        require(
            _timestampBefore < _tips[_min].timestamp,
            "tip earned by previous submission"
        );
        require(
            _timestamp >= _tips[_min].timestamp,
            "timestamp not eligible for tip"
        );
        require(_tips[_min].amount > 0, "tip already claimed");
        _tipAmount = _tips[_min].amount;
        _tips[_min].amount = 0;
        uint256 _minBackup = _min;
        // check whether eligible for previous tips in array due to disputes
        (, uint256 _indexNow) = getIndexForDataBefore(_queryId, _timestamp + 1);
        (bool _found, uint256 _indexBefore) = getIndexForDataBefore(
            _queryId,
            _timestampBefore + 1
        );
        if (_indexNow - _indexBefore > 1 || !_found) {
            if (!_found) {
                _tipAmount = _tips[_minBackup].cumulativeTips;
            } else {
                _max = _min;
                _min = 0;
                _mid;
                while (_max - _min > 1) {
                    _mid = (_max + _min) / 2;
                    if (_tips[_mid].timestamp > _timestampBefore) {
                        _max = _mid;
                    } else {
                        _min = _mid;
                    }
                }
                _min++;
                if (_min < _minBackup) {
                    _tipAmount =
                        _tips[_minBackup].cumulativeTips -
                        _tips[_min].cumulativeTips +
                        _tips[_min].amount;
                }
            }
        }
    }

    /**
     * @dev Allows the user to get the latest value for the queryId specified
     * @param _queryId is the id to look up the value for
     * @return _value the value retrieved
     * @return _timestampRetrieved the retrieved value's timestamp
     */

    function _getCurrentValue(bytes32 _queryId)
        internal
        view
        returns (bytes memory _value, uint256 _timestampRetrieved)
    {
        uint256 _count = getNewValueCountbyQueryId(_queryId);
        if (_count == 0) {
            return (bytes(""), 0);
        }
        uint256 _time;
        //loop handles for dispute (value = "" if disputed)
        while (_count > 0) {
            _count--;
            _time = getTimestampbyQueryIdandIndex(_queryId, _count);
            _value = retrieveData(_queryId, _time);
            if (_value.length > 0) {
                return (_value, _time);
            }
        }
        return (bytes(""), _time);
    }

    /**
     * @dev Internal function which determines the reward amount for a given oracle submission
     * @param _feedId id of dataFeed
     * @param _queryId id of reported data
     * @param _timestamp timestamp of reported data eligible for reward
     * @return _rewardAmount potential reward amount for the given oracle submission
     */
    function _getRewardAmount(
        bytes32 _feedId,
        bytes32 _queryId,
        uint256 _timestamp
    ) internal view returns (uint256 _rewardAmount) {
        require(
            block.timestamp - _timestamp < 4 weeks,
            "timestamp too old to claim tip"
        );
        Feed storage _feed = dataFeed[_queryId][_feedId];
        require(!_feed.rewardClaimed[_timestamp], "reward already claimed");
        uint256 _n = (_timestamp - _feed.details.startTime) /
            _feed.details.interval; // finds closest interval _n to timestamp
        uint256 _c = _feed.details.startTime + _feed.details.interval * _n; // finds start timestamp _c of interval _n
        bytes memory _valueRetrieved = retrieveData(_queryId, _timestamp);
        require(_valueRetrieved.length != 0, "no value exists at timestamp");
        (
            bytes memory _valueRetrievedBefore,
            uint256 _timestampBefore
        ) = getDataBefore(_queryId, _timestamp);
        uint256 _priceChange = 0; // price change from last value to current value
        if (_feed.details.priceThreshold != 0) {
            uint256 _v1 = _bytesToUint(_valueRetrieved);
            uint256 _v2 = _bytesToUint(_valueRetrievedBefore);
            if (_v2 == 0) {
                _priceChange = 10000;
            } else if (_v1 >= _v2) {
                _priceChange = (10000 * (_v1 - _v2)) / _v2;
            } else {
                _priceChange = (10000 * (_v2 - _v1)) / _v2;
            }
        }
        _rewardAmount = _feed.details.reward;
        uint256 _timeDiff = _timestamp - _c; // time difference between report timestamp and start of interval
        // ensure either report is first within a valid window, or price change threshold is met
        if (_timeDiff < _feed.details.window && _timestampBefore < _c) {
            // add time based rewards if applicable
            _rewardAmount += _feed.details.rewardIncreasePerSecond * _timeDiff;
        } else {
            require(
                _priceChange > _feed.details.priceThreshold,
                "price threshold not met"
            );
        }

        if (_feed.details.balance < _rewardAmount) {
            _rewardAmount = _feed.details.balance;
        }
    }
}

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_tellor","type":"address"},{"internalType":"address","name":"_queryDataStorage","type":"address"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"_feedId","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"_feedFunder","type":"address"},{"components":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"interval","type":"uint256"},{"internalType":"uint256","name":"window","type":"uint256"},{"internalType":"uint256","name":"priceThreshold","type":"uint256"},{"internalType":"uint256","name":"rewardIncreasePerSecond","type":"uint256"},{"internalType":"uint256","name":"feedsWithFundingIndex","type":"uint256"}],"indexed":false,"internalType":"struct Autopay.FeedDetails","name":"_feedDetails","type":"tuple"}],"name":"DataFeedFunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"_feedId","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"_queryData","type":"bytes"},{"indexed":false,"internalType":"address","name":"_feedCreator","type":"address"}],"name":"NewDataFeed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"_reporter","type":"address"}],"name":"OneTimeTipClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_queryData","type":"bytes"},{"indexed":false,"internalType":"address","name":"_tipper","type":"address"}],"name":"TipAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_feedId","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"_reporter","type":"address"}],"name":"TipClaimed","type":"event"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256[]","name":"_timestamps","type":"uint256[]"}],"name":"claimOneTimeTip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_feedId","type":"bytes32"},{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256[]","name":"_timestamps","type":"uint256[]"}],"name":"claimTip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feedsWithFunding","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_feedId","type":"bytes32"},{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"fundFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"}],"name":"getCurrentFeeds","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"}],"name":"getCurrentTip","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getDataAfter","outputs":[{"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":"getDataBefore","outputs":[{"internalType":"bytes","name":"_value","type":"bytes"},{"internalType":"uint256","name":"_timestampRetrieved","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_feedId","type":"bytes32"}],"name":"getDataFeed","outputs":[{"components":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"interval","type":"uint256"},{"internalType":"uint256","name":"window","type":"uint256"},{"internalType":"uint256","name":"priceThreshold","type":"uint256"},{"internalType":"uint256","name":"rewardIncreasePerSecond","type":"uint256"},{"internalType":"uint256","name":"feedsWithFundingIndex","type":"uint256"}],"internalType":"struct Autopay.FeedDetails","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFundedFeedDetails","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"interval","type":"uint256"},{"internalType":"uint256","name":"window","type":"uint256"},{"internalType":"uint256","name":"priceThreshold","type":"uint256"},{"internalType":"uint256","name":"rewardIncreasePerSecond","type":"uint256"},{"internalType":"uint256","name":"feedsWithFundingIndex","type":"uint256"}],"internalType":"struct Autopay.FeedDetails","name":"details","type":"tuple"},{"internalType":"bytes","name":"queryData","type":"bytes"}],"internalType":"struct Autopay.FeedDetailsWithQueryData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFundedFeeds","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFundedQueryIds","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFundedSingleTipsInfo","outputs":[{"components":[{"internalType":"bytes","name":"queryData","type":"bytes"},{"internalType":"uint256","name":"tip","type":"uint256"}],"internalType":"struct Autopay.SingleTipsWithQueryData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getIndexForDataAfter","outputs":[{"internalType":"bool","name":"_found","type":"bool"},{"internalType":"uint256","name":"_index","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"},{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"uint256","name":"_maxAge","type":"uint256"},{"internalType":"uint256","name":"_maxCount","type":"uint256"}],"name":"getMultipleValuesBefore","outputs":[{"internalType":"bytes[]","name":"_values","type":"bytes[]"},{"internalType":"uint256[]","name":"_timestamps","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":"_index","type":"uint256"}],"name":"getPastTipByIndex","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"cumulativeTips","type":"uint256"}],"internalType":"struct Autopay.Tip","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"}],"name":"getPastTipCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"}],"name":"getPastTips","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"cumulativeTips","type":"uint256"}],"internalType":"struct Autopay.Tip[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_feedId","type":"bytes32"}],"name":"getQueryIdFromFeedId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":[{"internalType":"bytes32","name":"_feedId","type":"bytes32"},{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256[]","name":"_timestamps","type":"uint256[]"}],"name":"getRewardAmount","outputs":[{"internalType":"uint256","name":"_cumulativeReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_feedId","type":"bytes32"},{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256[]","name":"_timestamp","type":"uint256[]"}],"name":"getRewardClaimStatusList","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_feedId","type":"bytes32"},{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getRewardClaimedStatus","outputs":[{"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":"address","name":"_user","type":"address"}],"name":"getTipsByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"idMappingContract","outputs":[{"internalType":"contract IMappingContract","name":"","type":"address"}],"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":"queryDataStorage","outputs":[{"internalType":"contract IQueryDataStorage","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"queryIdFromDataFeedId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"queryIdsWithFunding","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"queryIdsWithFundingIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"_addy","type":"address"}],"name":"setIdMappingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_reward","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_interval","type":"uint256"},{"internalType":"uint256","name":"_window","type":"uint256"},{"internalType":"uint256","name":"_priceThreshold","type":"uint256"},{"internalType":"uint256","name":"_rewardIncreasePerSecond","type":"uint256"},{"internalType":"bytes","name":"_queryData","type":"bytes"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setupDataFeed","outputs":[{"internalType":"bytes32","name":"_feedId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tellor","outputs":[{"internalType":"contract ITellor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_queryData","type":"bytes"}],"name":"tip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tips","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"cumulativeTips","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userTipsTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"valueFor","outputs":[{"internalType":"int256","name":"_value","type":"int256"},{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"uint256","name":"_statusCode","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620048f5380380620048f5833981016040819052620000349162000124565b600080546001600160a01b0319166001600160a01b03851690811790915560408051637e062a3560e11b8152905163fc0c546a91600480820192602092909190829003018186803b1580156200008957600080fd5b505afa1580156200009e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000c49190620000fe565b600280546001600160a01b039283166001600160a01b03199182161790915560038054949092169316929092179091556004555062000184565b60006020828403121562000110578081fd5b81516200011d816200016b565b9392505050565b60008060006060848603121562000139578182fd5b835162000146816200016b565b602085015190935062000159816200016b565b80925050604084015190509250925092565b6001600160a01b03811681146200018157600080fd5b50565b61476180620001946000396000f3fe608060405234801561001057600080fd5b50600436106102995760003560e01c806377b03e0d11610171578063bd05a23a116100d3578063e07c548611610097578063fc0c546a11610071578063fc0c546a146106c7578063fcd4a546146106da578063fdb9d0e2146106fb57610299565b8063e07c54861461068e578063f66f49c3146106a1578063f78eea83146106b457610299565b8063bd05a23a1461061f578063c5958af91461063f578063c7fafff81461065f578063ce5e11bf14610672578063ddca3f431461068557610299565b8063997b799011610135578063a9352c091161010f578063a9352c09146105cc578063b0e5fd07146105ec578063b7c9d376146105ff57610299565b8063997b79901461056c578063a733d2db146105a6578063a792765f146105b957610299565b806377b03e0d146104e55780637bcdfa7a146104f85780637f23d1ce14610526578063868d8b591461053957806393d539321461055957610299565b806344e87f911161021a5780634fff7099116101de57806364ee3c6d116101b857806364ee3c6d1461049157806366c1de50146104b2578063751c895c146104d257610299565b80634fff70991461043e57806357806e701461045e578063579b6d061461047157610299565b806344e87f91146103ac57806345740ccc146103cf57806345d60823146103e25780634637de0b1461040b5780634fce1e181461042b57610299565b80632af8aae0116102615780632af8aae014610347578063353d8ac91461035a57806337db4faf1461036f5780633d3fc43d1461038f57806342505164146103a457610299565b806309d6e27e1461029e578063193b505b146102bc5780631959ad5b146102d15780631af4075f146102fc578063294490851461031d575b600080fd5b6102a661070e565b6040516102b3919061431c565b60405180910390f35b6102cf6102ca366004613d59565b610a51565b005b6000546102e4906001600160a01b031681565b6040516001600160a01b0390911681526020016102b3565b61030f61030a366004613f54565b610a96565b6040519081526020016102b3565b61033061032b366004613fd0565b610b4c565b6040805192151583526020830191909152016102b3565b6001546102e4906001600160a01b031681565b610362610bdb565b6040516102b3919061424b565b61030f61037d366004613eda565b60086020526000908152604090205481565b610397610c33565b6040516102b391906143e6565b610362610f00565b6103bf6103ba366004613fd0565b610f56565b60405190151581526020016102b3565b61030f6103dd366004613eda565b610fe3565b61030f6103f0366004613d59565b6001600160a01b03166000908152600a602052604090205490565b61041e610419366004613eda565b61109d565b6040516102b3919061456d565b61030f610439366004613eda565b611162565b61030f61044c366004613eda565b60009081526007602052604090205490565b6102cf61046c366004613f54565b611183565b61048461047f366004613eda565b6117d0565b6040516102b3919061445b565b6104a461049f366004613fd0565b611860565b6040516102b3929190614505565b61030f6104c0366004613d59565b600a6020526000908152604090205481565b6102cf6104e0366004613ff1565b6118b9565b61030f6104f3366004613eda565b611d9a565b61050b610506366004613fd0565b611e17565b604080519384526020840192909252908201526060016102b3565b6102cf610534366004613fa5565b611e59565b61030f610547366004613eda565b60076020526000908152604090205481565b610362610567366004613eda565b6120c9565b6103bf61057a366004613fa5565b600091825260066020908152604080842094845293815283832091835260089091019052205460ff1690565b61030f6105b4366004614067565b61212b565b6104a46105c7366004613fd0565b61246a565b6105df6105da366004613fd0565b612500565b6040516102b391906145c5565b6003546102e4906001600160a01b031681565b61030f61060d366004613eda565b60009081526009602052604090205490565b61063261062d366004613f54565b612591565b6040516102b39190614205565b61065261064d366004613fd0565b61269f565b6040516102b391906144f2565b61030f61066d366004613eda565b612727565b61030f610680366004613fd0565b612737565b61030f60045481565b6102e461069c366004613fd0565b6127bb565b6103306106af366004613fd0565b61283f565b61050b6106c2366004613eda565b612aba565b6002546102e4906001600160a01b031681565b6106ed6106e8366004614036565b612bb9565b6040516102b3929190614283565b6102cf610709366004613f0a565b612e3b565b60606000306001600160a01b031663353d8ac96040518163ffffffff1660e01b815260040160006040518083038186803b15801561074b57600080fd5b505afa15801561075f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107879190810190613d98565b90506000815167ffffffffffffffff8111156107b357634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156107ec57816020015b6107d9613bfc565b8152602001906001900390816107d15790505b50905060005b8251811015610a4a576000306001600160a01b0316634637de0b85848151811061082c57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b815260040161085291815260200190565b6101006040518083038186803b15801561086b57600080fd5b505afa15801561087f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a3919061412d565b90506000306001600160a01b0316634fff70998685815181106108d657634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016108fc91815260200190565b60206040518083038186803b15801561091457600080fd5b505afa158015610928573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094c9190613ef2565b6003546040516341b6849f60e11b8152600481018390529192506000916001600160a01b039091169063836d093e9060240160006040518083038186803b15801561099657600080fd5b505afa1580156109aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109d291908101906140fa565b9050828585815181106109f557634e487b7160e01b600052603260045260246000fd5b60200260200101516000018190525080858581518110610a2557634e487b7160e01b600052603260045260246000fd5b6020026020010151602001819052505050508080610a42906146cc565b9150506107f2565b5091505090565b6001546001600160a01b031615610a6757600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60008381526006602090815260408083208784529091528120815b83811015610b0857610aea8787878785818110610ade57634e487b7160e01b600052603260045260246000fd5b9050602002013561325f565b610af49084614617565b925080610b00816146cc565b915050610ab1565b508060010154821115610b1d57806001015491505b6103e860045483610b2e919061464f565b610b38919061462f565b610b42908361466e565b9695505050505050565b60008054604051632944908560e01b8152600481018590526024810184905282916001600160a01b031690632944908590604401604080518083038186803b158015610b9757600080fd5b505afa158015610bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcf9190613eaf565b915091505b9250929050565b6060600b805480602002602001604051908101604052809291908181526020018280548015610c2957602002820191906000526020600020905b815481526020019060010190808311610c15575b5050505050905090565b60606000306001600160a01b031663425051646040518163ffffffff1660e01b815260040160006040518083038186803b158015610c7057600080fd5b505afa158015610c84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cac9190810190613d98565b90506000815167ffffffffffffffff811115610cd857634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610d1e57816020015b604080518082019091526060815260006020820152815260200190600190039081610cf65790505b50905060005b8251811015610a4a5760035483516000916001600160a01b03169063836d093e90869085908110610d6557634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b8152600401610d8b91815260200190565b60006040518083038186803b158015610da357600080fd5b505afa158015610db7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ddf91908101906140fa565b90506000306001600160a01b03166345740ccc868581518110610e1257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b8152600401610e3891815260200190565b60206040518083038186803b158015610e5057600080fd5b505afa158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e889190613ef2565b905081848481518110610eab57634e487b7160e01b600052603260045260246000fd5b60200260200101516000018190525080848481518110610edb57634e487b7160e01b600052603260045260246000fd5b6020026020010151602001818152505050508080610ef8906146cc565b915050610d24565b6060600c805480602002602001604051908101604052809291908181526020018280548015610c295760200282019190600052602060002090815481526020019060010190808311610c15575050505050905090565b600080546040516344e87f9160e01b815260048101859052602481018490526001600160a01b03909116906344e87f919060440160206040518083038186803b158015610fa257600080fd5b505afa158015610fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fda9190613e40565b90505b92915050565b600081815260096020526040812054610ffe57506000611098565b60006110098361353c565b600085815260096020526040812080549294509092509061102c9060019061466e565b8154811061104a57634e487b7160e01b600052603260045260246000fd5b600091825260209182902060408051606081018252600390930290910180548352600181015493830184905260020154908201529150821015611091575191506110989050565b6000925050505b919050565b6110e560405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506000818152600760208181526040808420548452600680835281852095855294825292839020835161010081018552815481526001820154928101929092526002810154938201939093526003830154606082015260048301546080820152600583015460a08201529282015460c0840152015460e082015290565b600b818154811061117257600080fd5b600091825260209091200154905081565b600083815260066020908152604080832087845290915290206001810154806111f35760405162461bcd60e51b815260206004820181905260248201527f6e6f2066756e647320617661696c61626c6520666f722074686973206665656460448201526064015b60405180910390fd5b6000805b8481101561157a5761a8c086868381811061122257634e487b7160e01b600052603260045260246000fd5b9050602002013542611234919061466e565b116112815760405162461bcd60e51b815260206004820152601a60248201527f6275666665722074696d6520686173206e6f742070617373656400000000000060448201526064016111ea565b336112b2888888858181106112a657634e487b7160e01b600052603260045260246000fd5b905060200201356127bb565b6001600160a01b03161461132e5760405162461bcd60e51b815260206004820152603b60248201527f6d6573736167652073656e646572206e6f74207265706f7274657220666f722060448201527f676976656e207175657279496420616e642074696d657374616d70000000000060648201526084016111ea565b6113538888888885818110610ade57634e487b7160e01b600052603260045260246000fd5b61135d9083614617565b91508282106115135761137160018661466e565b81146113d95760405162461bcd60e51b815260206004820152603160248201527f696e73756666696369656e742062616c616e636520666f7220616c6c207375626044820152706d69747465642074696d657374616d707360781b60648201526084016111ea565b600b54839250600110156114d45760078401546000906113fb9060019061466e565b600b80549192509061140f9060019061466e565b8154811061142d57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154600b828154811061145957634e487b7160e01b600052603260045260246000fd5b90600052602060002001819055506000600b828154811061148a57634e487b7160e01b600052603260045260246000fd5b600091825260208083209091015480835260079091526040909120549091506114b4836001614617565b600091825260066020908152604080842094845293905291902060070155505b600b8054806114f357634e487b7160e01b600052603160045260246000fd5b600082815260208120820160001990810182905590910190915560078501555b600184600801600088888581811061153b57634e487b7160e01b600052603260045260246000fd5b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611572906146cc565b9150506111f7565b5080836000016001016000828254611592919061466e565b90915550506002546004546001600160a01b039091169063a9059cbb9033906103e8906115bf908661464f565b6115c9919061462f565b6115d3908561466e565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561161957600080fd5b505af115801561162d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116519190613e40565b61165a57600080fd5b6002546000546004546001600160a01b039283169263095ea7b39216906103e890611685908661464f565b61168f919061462f565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156116d557600080fd5b505af11580156116e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170d9190613e40565b506000546004546001600160a01b039091169063d9c51cd4906103e890611734908561464f565b61173e919061462f565b6040518263ffffffff1660e01b815260040161175c91815260200190565b600060405180830381600087803b15801561177657600080fd5b505af115801561178a573d6000803e3d6000fd5b505060405133815283925088915089907fbe397b811472239aa40c62686337c1611135342d6e238e8aa16580dcd7223adf9060200160405180910390a450505050505050565b606060096000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156118555783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190611805565b505050509050919050565b60606000806000611871868661283f565b91509150816118985760006040518060200160405280600081525090935093505050610bd4565b6118a28682612737565b92506118ae868461269f565b935050509250929050565b81816040516118c99291906141f5565b6040518091039020841461191f5760405162461bcd60e51b815260206004820152601d60248201527f6964206d7573742062652068617368206f66206279746573206461746100000060448201526064016111ea565b6000831161196f5760405162461bcd60e51b815260206004820152601d60248201527f746970206d7573742062652067726561746572207468616e207a65726f00000060448201526064016111ea565b60008481526009602052604090208054611a375760408051606081018252858152426020808301918252828401888152855460018181018855600088815293909320945160039182029095019485559251918401919091555160029092019190915554905163ac5c853560e01b81526001600160a01b039091169063ac5c853590611a0090869086906004016144b1565b600060405180830381600087803b158015611a1a57600080fd5b505af1158015611a2e573d6000803e3d6000fd5b50505050611c21565b6000611a428661353c565b8354909250839150611a569060019061466e565b81548110611a7457634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160010154811015611b8357815442908390611a9f9060019061466e565b81548110611abd57634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160010181905550848260018480549050611ae5919061466e565b81548110611b0357634e487b7160e01b600052603260045260246000fd5b90600052602060002090600302016000016000828254611b239190614617565b9091555050815485908390611b3a9060019061466e565b81548110611b5857634e487b7160e01b600052603260045260246000fd5b90600052602060002090600302016002016000828254611b789190614617565b90915550611c1f9050565b816040518060600160405280878152602001428152602001878560018780549050611bae919061466e565b81548110611bcc57634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160020154611be89190614617565b9052815460018181018455600093845260209384902083516003909302019182559282015192810192909255604001516002909101555b505b600085815260086020526040902054158015611c4557506000611c4386610fe3565b115b15611c8a57600c80546001810182557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c701869055546000868152600860205260409020555b6002546040516323b872dd60e01b8152336004820152306024820152604481018690526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611cdc57600080fd5b505af1158015611cf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d149190613e40565b611d305760405162461bcd60e51b81526004016111ea90614527565b336000908152600a602052604081208054869290611d4f908490614617565b9250508190555083857ff5ab15991b2cec1142b66b2c57a205c2af5e9d8fc5056bcb33b53b193990b07e858533604051611d8b939291906144c5565b60405180910390a35050505050565b600080546040516377b03e0d60e01b8152600481018490526001600160a01b03909116906377b03e0d9060240160206040518083038186803b158015611ddf57600080fd5b505afa158015611df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdd9190613ef2565b60096020528160005260406000208181548110611e3357600080fd5b600091825260209091206003909102018054600182015460029092015490935090915083565b600082815260066020908152604080832086845290915290208054611eb25760405162461bcd60e51b815260206004820152600f60248201526e066656564206e6f742073657420757608c1b60448201526064016111ea565b60008211611f025760405162461bcd60e51b815260206004820152601960248201527f6d7573742062652073656e64696e6720616e20616d6f756e740000000000000060448201526064016111ea565b81816001016000828254611f169190614617565b90915550506002546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611f6d57600080fd5b505af1158015611f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa59190613e40565b611fc15760405162461bcd60e51b81526004016111ea90614527565b6007810154158015611fd7575060008160010154115b1561201757600b805460018101825560008290527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9018590555460078201555b336000908152600a602052604081208054849290612036908490614617565b909155505060408051338152825460208201526001830154818301526002830154606082015260038301546080820152600483015460a0820152600583015460c0820152600683015460e0820152600783015461010082015290518391859187917fdaf477f4ffa6a044c31632ac3040e483553fb75f8437629291046a833cc352af91908190036101200190a450505050565b60008181526005602090815260409182902080548351818402810184019094528084526060939283018282801561211f57602002820191906000526020600020905b81548152602001906001019080831161210b575b50505050509050919050565b6000838360405161213d9291906141f5565b60405180910390208b146121935760405162461bcd60e51b815260206004820152601d60248201527f6964206d7573742062652068617368206f66206279746573206461746100000060448201526064016111ea565b60408051602081018d90529081018b9052606081018a90526080810189905260a0810188905260c0810187905260e081018690526101000160408051601f19818403018152918152815160209283012060008e81526006845282812082825290935291208054919250901561224a5760405162461bcd60e51b815260206004820152601f60248201527f66656564206d757374206e6f742062652073657420757020616c72656164790060448201526064016111ea565b60008b1161229a5760405162461bcd60e51b815260206004820181905260248201527f726577617264206d7573742062652067726561746572207468616e207a65726f60448201526064016111ea565b600089116122f55760405162461bcd60e51b815260206004820152602260248201527f696e74657276616c206d7573742062652067726561746572207468616e207a65604482015261726f60f01b60648201526084016111ea565b8888106123555760405162461bcd60e51b815260206004820152602860248201527f77696e646f77206d757374206265206c657373207468616e20696e74657276616044820152670d840d8cadccee8d60c31b60648201526084016111ea565b8a8155600281018a905560038082018a905560048083018a905560058084018a90556006840189905560008f81526020918252604080822080546001810182559083528383200187905586825260079092528190208f90559154915163ac5c853560e01b81526001600160a01b039092169163ac5c8535916123db9189918991016144b1565b600060405180830381600087803b1580156123f557600080fd5b505af1158015612409573d6000803e3d6000fd5b50505050818c7f25b7a245f1298a141e9a73052d47515c64a19a5550bc21f5c896f2097e155efe878733604051612442939291906144c5565b60405180910390a3821561245b5761245b828d85611e59565b509a9950505050505050505050565b6000805460405163a792765f60e01b81526004810185905260248101849052606092916001600160a01b03169063a792765f9060440160006040518083038186803b1580156124b857600080fd5b505afa1580156124cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f49190810190613e5a565b90969095509350505050565b61252460405180606001604052806000815260200160008152602001600081525090565b600083815260096020526040902080548390811061255257634e487b7160e01b600052603260045260246000fd5b90600052602060002090600302016040518060600160405290816000820154815260200160018201548152602001600282015481525050905092915050565b606060008267ffffffffffffffff8111156125bc57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156125e5578160200160208202803683370190505b50905060005b838110156126955760008681526006602090815260408083208a845290915281206008019086868481811061263057634e487b7160e01b600052603260045260246000fd5b90506020020135815260200190815260200160002060009054906101000a900460ff1682828151811061267357634e487b7160e01b600052603260045260246000fd5b911515602092830291909101909101528061268d816146cc565b9150506125eb565b5095945050505050565b60005460405163c5958af960e01b815260048101849052602481018390526060916001600160a01b03169063c5958af99060440160006040518083038186803b1580156126eb57600080fd5b505afa1580156126ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fda91908101906140fa565b600c818154811061117257600080fd5b6000805460405163ce5e11bf60e01b815260048101859052602481018490526001600160a01b039091169063ce5e11bf9060440160206040518083038186803b15801561278357600080fd5b505afa158015612797573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fda9190613ef2565b6000805460405163703e2a4360e11b815260048101859052602481018490526001600160a01b039091169063e07c54869060440160206040518083038186803b15801561280757600080fd5b505afa15801561281b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fda9190613d7c565b60008054604051632944908560e01b8152600481018590526024810184905282916001600160a01b031690632944908590604401604080518083038186803b15801561288a57600080fd5b505afa15801561289e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c29190613eaf565b909250905081156128db57806128d7816146cc565b9150505b600080546040516377b03e0d60e01b8152600481018790526001600160a01b03909116906377b03e0d9060240160206040518083038186803b15801561292057600080fd5b505afa158015612934573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129589190613ef2565b905081811161296e576000809250925050610bd4565b6000805460405163ce5e11bf60e01b815260048101889052602481018590526001600160a01b039091169063ce5e11bf9060440160206040518083038186803b1580156129ba57600080fd5b505afa1580156129ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f29190613ef2565b905084811115612a0757600193505050610bd4565b82612a11816146cc565b935050828211612a2957600080935093505050610bd4565b60005460405163ce5e11bf60e01b815260048101889052602481018590526001600160a01b039091169063ce5e11bf9060440160206040518083038186803b158015612a7457600080fd5b505afa158015612a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aac9190613ef2565b506001935050509250929050565b6001546040516387a475fd60e01b815260048101839052600091829182916001600160a01b0316906387a475fd9060240160206040518083038186803b158015612b0357600080fd5b505afa158015612b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3b9190613ef2565b93506000612b4885611d9a565b905080612b615760008061019493509350935050612bb2565b612b708561068060018461466e565b92506000612b7e868561269f565b9050805160001415612b9d576000806101949450945094505050612bb2565b6000612ba8826135cb565b955060c893505050505b9193909250565b606080600080612bcd886106af888a61466e565b9150915081612c1e576040805160008082526020820190925290612c01565b6060815260200190600190039081612bec5790505b506040805160008152602081019091529094509250612e32915050565b6000612c2a8989610b4c565b909350905082612c7d576040805160008082526020820190925290612c5f565b6060815260200190600190039081612c4a5790505b506040805160008152602081019091529095509350612e3292505050565b6000612c89838361466e565b612c94906001614617565b905086811115612cb957612ca8878361466e565b612cb3906001614617565b92508690505b60008167ffffffffffffffff811115612ce257634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612d1557816020015b6060815260200190600190039081612d005790505b50905060008267ffffffffffffffff811115612d4157634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612d6a578160200160208202803683370190505b509050606060005b84811015612e2657612d888e610680838a614617565b838281518110612da857634e487b7160e01b600052603260045260246000fd5b602002602001018181525050612de58e848381518110612dd857634e487b7160e01b600052603260045260246000fd5b602002602001015161269f565b915081848281518110612e0857634e487b7160e01b600052603260045260246000fd5b60200260200101819052508080612e1e906146cc565b915050612d72565b50919750955050505050505b94509492505050565b600083815260096020526040902054612ea15760405162461bcd60e51b815260206004820152602260248201527f6e6f2074697073207375626d697474656420666f722074686973207175657279604482015261125960f21b60648201526084016111ea565b6000805b82811015612efb57612edd85858584818110612ed157634e487b7160e01b600052603260045260246000fd5b90506020020135613630565b612ee79083614617565b915080612ef3816146cc565b915050612ea5565b506002546004546001600160a01b039091169063a9059cbb9033906103e890612f24908661464f565b612f2e919061462f565b612f38908561466e565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015612f7e57600080fd5b505af1158015612f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb69190613e40565b612fbf57600080fd5b6002546000546004546001600160a01b039283169263095ea7b39216906103e890612fea908661464f565b612ff4919061462f565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561303a57600080fd5b505af115801561304e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130729190613e40565b506000546004546001600160a01b039091169063d9c51cd4906103e890613099908561464f565b6130a3919061462f565b6040518263ffffffff1660e01b81526004016130c191815260200190565b600060405180830381600087803b1580156130db57600080fd5b505af11580156130ef573d6000803e3d6000fd5b505050506130fc84610fe3565b61322a576000848152600860205260409020541561322a5760008481526008602052604081205461312f9060019061466e565b600c8054919250906131439060019061466e565b8154811061316157634e487b7160e01b600052603260045260246000fd5b9060005260206000200154600c828154811061318d57634e487b7160e01b600052603260045260246000fd5b90600052602060002001819055506000600c82815481106131be57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508160016131d89190614617565b6000828152600860205260408082209290925587815290812055600c80548061321157634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505b6040513390829086907fdff45d500502d35c7f1150acbb404c5b2e288e31a74354c8553a283dd1e806e790600090a450505050565b60006224ea0061326f834261466e565b106132bc5760405162461bcd60e51b815260206004820152601e60248201527f74696d657374616d7020746f6f206f6c6420746f20636c61696d20746970000060448201526064016111ea565b60008381526006602090815260408083208784528252808320858452600881019092529091205460ff16156133335760405162461bcd60e51b815260206004820152601660248201527f72657761726420616c726561647920636c61696d65640000000000000000000060448201526064016111ea565b600381015460028201546000919061334b908661466e565b613355919061462f565b9050600081836000016003015461336c919061464f565b600284015461337b9190614617565b90506000613389878761269f565b90508051600014156133dd5760405162461bcd60e51b815260206004820152601c60248201527f6e6f2076616c7565206578697374732061742074696d657374616d700000000060448201526064016111ea565b6000806133ea898961246a565b600588015491935091506000901561347b57600061340785613b9d565b9050600061341485613b9d565b905080613425576127109250613478565b8082106134545780613437818461466e565b6134439061271061464f565b61344d919061462f565b9250613478565b8061345f838261466e565b61346b9061271061464f565b613475919061462f565b92505b50505b86549750600061348b868b61466e565b6004890154909150811080156134a057508583105b156134c65760068801546134b590829061464f565b6134bf908a614617565b9850613519565b600588015482116135195760405162461bcd60e51b815260206004820152601760248201527f7072696365207468726573686f6c64206e6f74206d657400000000000000000060448201526064016111ea565b600188015489111561352d57600188015498505b50505050505050509392505050565b606060008061354a84611d9a565b90508061356d5760405180602001604052806000815250600092509250506135c6565b60005b81156135b15781613580816146b5565b92505061358d8583612737565b9050613599858261269f565b8051909450156135ac5791506135c69050565b613570565b60408051602081019091526000815293509150505b915091565b6000805b825181101561362a578281815181106135f857634e487b7160e01b600052603260045260246000fd5b016020015160f81c61360c8361010061464f565b6136169190614617565b915080613622816146cc565b9150506135cf565b50919050565b600061a8c061363f834261466e565b1161368c5760405162461bcd60e51b815260206004820152601a60248201527f6275666665722074696d6520686173206e6f742070617373656400000000000060448201526064016111ea565b6136968383610f56565b156136d45760405162461bcd60e51b815260206004820152600e60248201526d1d985b1d5948191a5cdc1d5d195960921b60448201526064016111ea565b6136de83836127bb565b6001600160a01b0316336001600160a01b03161461374a5760405162461bcd60e51b815260206004820152602360248201527f6d73672073656e646572206d757374206265207265706f72746572206164647260448201526265737360e81b60648201526084016111ea565b60008381526009602052604081208054909190815b600161376b848461466e565b11156137d357600261377d8484614617565b613787919061462f565b9050858482815481106137aa57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600302016001015411156137ca578091506137ce565b8092505b61375f565b60006137df888861246a565b91505084848154811061380257634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160010154811061386c5760405162461bcd60e51b815260206004820152602160248201527f746970206561726e65642062792070726576696f7573207375626d697373696f6044820152603760f91b60648201526084016111ea565b84848154811061388c57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060030201600101548710156138ed5760405162461bcd60e51b815260206004820152601e60248201527f74696d657374616d70206e6f7420656c696769626c6520666f7220746970000060448201526064016111ea565b600085858154811061390f57634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160000154116139645760405162461bcd60e51b81526020600482015260136024820152721d1a5c08185b1c9958591e4818db185a5b5959606a1b60448201526064016111ea565b84848154811061398457634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160000154955060008585815481106139ba57634e487b7160e01b600052603260045260246000fd5b6000918252602082206003909102019190915584906139de8a61032b8b6001614617565b915060009050806139f48c61032b876001614617565b90925090506001613a05828561466e565b1180613a0f575081155b15613b8e5781613a5257888481548110613a3957634e487b7160e01b600052603260045260246000fd5b9060005260206000209060030201600201549950613b8e565b60009796505b6001613a64898961466e565b1115613acc576002613a768989614617565b613a80919061462f565b955084898781548110613aa357634e487b7160e01b600052603260045260246000fd5b9060005260206000209060030201600101541115613ac357859650613ac7565b8597505b613a58565b87613ad6816146cc565b98505083881015613b8e57888881548110613b0157634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160000154898981548110613b3357634e487b7160e01b600052603260045260246000fd5b9060005260206000209060030201600201548a8681548110613b6557634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160020154613b81919061466e565b613b8b9190614617565b99505b50505050505050505092915050565b6000805b825181101561362a57828181518110613bca57634e487b7160e01b600052603260045260246000fd5b016020015160f81c613bde8361010061464f565b613be89190614617565b915080613bf4816146cc565b915050613ba1565b6040518060400160405280613c4f60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8152602001606081525090565b60008083601f840112613c6d578182fd5b50813567ffffffffffffffff811115613c84578182fd5b6020830191508360208260051b8501011115610bd457600080fd5b8051801515811461109857600080fd5b60008083601f840112613cc0578182fd5b50813567ffffffffffffffff811115613cd7578182fd5b602083019150836020828501011115610bd457600080fd5b600082601f830112613cff578081fd5b815167ffffffffffffffff811115613d1957613d196146fd565b613d2c601f8201601f19166020016145e6565b818152846020838601011115613d40578283fd5b613d51826020830160208701614685565b949350505050565b600060208284031215613d6a578081fd5b8135613d7581614713565b9392505050565b600060208284031215613d8d578081fd5b8151613d7581614713565b60006020808385031215613daa578182fd5b825167ffffffffffffffff80821115613dc1578384fd5b818501915085601f830112613dd4578384fd5b815181811115613de657613de66146fd565b8060051b9150613df78483016145e6565b8181528481019084860184860187018a1015613e11578788fd5b8795505b83861015613e33578051835260019590950194918601918601613e15565b5098975050505050505050565b600060208284031215613e51578081fd5b610fda82613c9f565b600080600060608486031215613e6e578182fd5b613e7784613c9f565b9250602084015167ffffffffffffffff811115613e92578283fd5b613e9e86828701613cef565b925050604084015190509250925092565b60008060408385031215613ec1578182fd5b613eca83613c9f565b9150602083015190509250929050565b600060208284031215613eeb578081fd5b5035919050565b600060208284031215613f03578081fd5b5051919050565b600080600060408486031215613f1e578283fd5b83359250602084013567ffffffffffffffff811115613f3b578283fd5b613f4786828701613c5c565b9497909650939450505050565b60008060008060608587031215613f69578081fd5b8435935060208501359250604085013567ffffffffffffffff811115613f8d578182fd5b613f9987828801613c5c565b95989497509550505050565b600080600060608486031215613fb9578081fd5b505081359360208301359350604090920135919050565b60008060408385031215613fe2578182fd5b50508035926020909101359150565b60008060008060608587031215614006578182fd5b8435935060208501359250604085013567ffffffffffffffff81111561402a578283fd5b613f9987828801613caf565b6000806000806080858703121561404b578182fd5b5050823594602084013594506040840135936060013592509050565b6000806000806000806000806000806101208b8d031215614086578788fd5b8a35995060208b0135985060408b0135975060608b0135965060808b0135955060a08b0135945060c08b0135935060e08b013567ffffffffffffffff8111156140cd578384fd5b6140d98d828e01613caf565b915080945050809250506101008b013590509295989b9194979a5092959850565b60006020828403121561410b578081fd5b815167ffffffffffffffff811115614121578182fd5b613d5184828501613cef565b6000610100808385031215614140578182fd5b614149816145e6565b9050825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201528091505092915050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526141e1816020860160208601614685565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b6020808252825182820181905260009190848201906040850190845b8181101561423f578351151583529284019291840191600101614221565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561423f57835183529284019291840191600101614267565b6000604082016040835280855180835260608501915060608160051b86010192506020808801855b838110156142d957605f198887030185526142c78683516141c9565b955093820193908201906001016142ab565b505085840381870152865180855287820194820193509150845b8281101561430f578451845293810193928101926001016142f3565b5091979650505050505050565b6000602080830181845280855180835260408601915060408160051b8701019250838701855b828110156143d957603f1988860301845281516101206143ac878351805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b878201519150806101008801526143c5818801836141c9565b965050509285019290850190600101614342565b5092979650505050505050565b60006020808301818452808551808352604092508286019150828160051b870101848801865b8381101561444d57888303603f1901855281518051878552614430888601826141c9565b91890151948901949094529487019492509086019060010161440c565b509098975050505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561423f5761449e8385518051825260208082015190830152604090810151910152565b9284019260609290920191600101614477565b600060208252613d5160208301848661419f565b6000604082526144d960408301858761419f565b90506001600160a01b0383166020830152949350505050565b600060208252610fda60208301846141c9565b60006040825261451860408301856141c9565b90508260208301529392505050565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b6101008101610fdd8284805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b81518152602080830151908201526040808301519082015260608101610fdd565b604051601f8201601f1916810167ffffffffffffffff8111828210171561460f5761460f6146fd565b604052919050565b6000821982111561462a5761462a6146e7565b500190565b60008261464a57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614669576146696146e7565b500290565b600082821015614680576146806146e7565b500390565b60005b838110156146a0578181015183820152602001614688565b838111156146af576000848401525b50505050565b6000816146c4576146c46146e7565b506000190190565b60006000198214156146e0576146e06146e7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461472857600080fd5b5056fea2646970667358221220387708a0ca95e450bf249883ff97776cde1a56644170f35af6cb2725c171326264736f6c634300080300330000000000000000000000003251838bd813fdf6a97d32781e011cce8d225d59000000000000000000000000fb95d77d702531e94cc6aacb46fdb97f0b5b4d700000000000000000000000000000000000000000000000000000000000000014

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000003251838bd813fdf6a97d32781e011cce8d225d59000000000000000000000000fb95d77d702531e94cc6aacb46fdb97f0b5b4d700000000000000000000000000000000000000000000000000000000000000014

-----Decoded View---------------
Arg [0] : _tellor (address): 0x3251838bd813fdf6a97d32781e011cce8d225d59
Arg [1] : _queryDataStorage (address): 0xfb95d77d702531e94cc6aacb46fdb97f0b5b4d70
Arg [2] : _fee (uint256): 20

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000003251838bd813fdf6a97d32781e011cce8d225d59
Arg [1] : 000000000000000000000000fb95d77d702531e94cc6aacb46fdb97f0b5b4d70
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000014


Deployed ByteCode Sourcemap

26004:28470:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41509:716;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24074:179;;;;;;:::i;:::-;;:::i;:::-;;15445:21;;;;;-1:-1:-1;;;;;15445:21:0;;;;;;-1:-1:-1;;;;;11233:55:1;;;11215:74;;11203:2;11188:18;15445:21:0;11170:125:1;45345:661:0;;;;;;:::i;:::-;;:::i;:::-;;;18938:25:1;;;18926:2;18911:18;45345:661:0;18893:76:1;19213:227:0;;;;;;:::i;:::-;;:::i;:::-;;;;18722:14:1;;18715:22;18697:41;;18769:2;18754:18;;18747:34;;;;18670:18;19213:227:0;18652:135:1;15473:41:0;;;;;-1:-1:-1;;;;;15473:41:0;;;42307:109;;;:::i;:::-;;;;;;;:::i;26533:59::-;;;;;;:::i;:::-;;;;;;;;;;;;;;42793:699;;;:::i;:::-;;;;;;;:::i;42511:115::-;;;:::i;23302:184::-;;;;;;:::i;:::-;;:::i;:::-;;;18502:14:1;;18495:22;18477:41;;18465:2;18450:18;23302:184:0;18432:92:1;40477:480:0;;;;;;:::i;:::-;;:::i;47477:119::-;;;;;;:::i;:::-;-1:-1:-1;;;;;47568:20:0;47541:7;47568:20;;;:13;:20;;;;;;;47477:119;41145:198;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26837:33::-;;;;;;:::i;:::-;;:::i;44691:167::-;;;;;;:::i;:::-;44788:7;44820:30;;;:21;:30;;;;;;;44691:167;31731:2636;;;;;;:::i;:::-;;:::i;43956:148::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16114:547::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;26747:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;38262:1704;;;;;;:::i;:::-;;:::i;21802:183::-;;;;;;:::i;:::-;;:::i;26676:37::-;;;;;;:::i;:::-;;:::i;:::-;;;;22172:25:1;;;22228:2;22213:18;;22206:34;;;;22256:18;;;22249:34;22160:2;22145:18;26676:37:0;22127:162:1;34634:861:0;;;;;;:::i;:::-;;:::i;26437:56::-;;;;;;:::i;:::-;;;;;;;;;;;;;;40150:164;;;;;;:::i;:::-;;:::i;46274:229::-;;;;;;:::i;:::-;46418:4;46442:18;;;:8;:18;;;;;;;;:27;;;;;;;;;:53;;;:41;;;;:53;;;;;;;46274:229;36281:1760;;;;;;:::i;:::-;;:::i;17005:296::-;;;;;;:::i;:::-;;:::i;44325:176::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26106:41::-;;;;;-1:-1:-1;;;;;26106:41:0;;;43658:122;;;;;;:::i;:::-;43724:7;43751:14;;;:4;:14;;;;;:21;;43658:122;46799:455;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;23731:194::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26919:36::-;;;;;;:::i;:::-;;:::i;22786:215::-;;;;;;:::i;:::-;;:::i;26185:18::-;;;;;;22353:209;;;;;;:::i;:::-;;:::i;17694:1072::-;;;;;;:::i;:::-;;:::i;24564:756::-;;;;;;:::i;:::-;;:::i;26059:19::-;;;;;-1:-1:-1;;;;;26059:19:0;;;19977:1596;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;29938:1519::-;;;;;;:::i;:::-;;:::i;41509:716::-;41591:33;41642:23;41668:4;-1:-1:-1;;;;;41668:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41668:21:0;;;;;;;;;;;;:::i;:::-;41642:47;;41700:55;41789:6;:13;41758:45;;;;;;-1:-1:-1;;;41758:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;41700:103;;41819:9;41814:378;41838:6;:13;41834:1;:17;41814:378;;;41873:30;41906:4;-1:-1:-1;;;;;41906:16:0;;41923:6;41930:1;41923:9;;;;;;-1:-1:-1;;;41923:9:0;;;;;;;;;;;;;;;41906:27;;;;;;;;;;;;;18938:25:1;;18926:2;18911:18;;18893:76;41906:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41873:60;;41948:16;41967:4;-1:-1:-1;;;;;41967:25:0;;41993:6;42000:1;41993:9;;;;;;-1:-1:-1;;;41993:9:0;;;;;;;;;;;;;;;41967:36;;;;;;;;;;;;;18938:25:1;;18926:2;18911:18;;18893:76;41967:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42044:16;;:39;;-1:-1:-1;;;42044:39:0;;;;;18938:25:1;;;41948:55:0;;-1:-1:-1;42018:23:0;;-1:-1:-1;;;;;42044:16:0;;;;:29;;18911:18:1;;42044:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42044:39:0;;;;;;;;;;;;:::i;:::-;42018:65;;42120:11;42098:8;42107:1;42098:11;;;;;;-1:-1:-1;;;42098:11:0;;;;;;;;;;;;;;;:19;;:33;;;;42170:10;42146:8;42155:1;42146:11;;;;;;-1:-1:-1;;;42146:11:0;;;;;;;;;;;;;;;:21;;:34;;;;41814:378;;;41853:3;;;;;:::i;:::-;;;;41814:378;;;-1:-1:-1;42209:8:0;-1:-1:-1;;41509:716:0;:::o;24074:179::-;24155:17;;-1:-1:-1;;;;;24155:17:0;24147:40;24139:49;;;;;;24200:17;:43;;-1:-1:-1;;24200:43:0;-1:-1:-1;;;;;24200:43:0;;;;;;;;;;24074:179::o;45345:661::-;45494:25;45560:18;;;:8;:18;;;;;;;;:27;;;;;;;;45494:25;45606:218;45627:23;;;45606:218;;;45694:118;45729:7;45755:8;45782:11;;45794:2;45782:15;;;;;-1:-1:-1;;;45782:15:0;;;;;;;;;;;;;;;45694:16;:118::i;:::-;45673:139;;;;:::i;:::-;;-1:-1:-1;45652:4:0;;;;:::i;:::-;;;;45606:218;;;;45858:5;:13;;;45838:17;:33;45834:99;;;45908:5;:13;;;45888:33;;45834:99;45993:4;45986:3;;45966:17;:23;;;;:::i;:::-;45965:32;;;;:::i;:::-;45943:55;;;;:::i;:::-;;45345:661;-1:-1:-1;;;;;;45345:661:0:o;19213:227::-;19330:11;19382:6;;:50;;-1:-1:-1;;;19382:50:0;;;;;19148:25:1;;;19189:18;;;19182:34;;;19330:11:0;;-1:-1:-1;;;;;19382:6:0;;:28;;19121:18:1;;19382:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19375:57;;;;19213:227;;;;;;:::o;42307:109::-;42356:16;42392;42385:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42307:109;:::o;42793:699::-;42878:32;42928;42963:4;-1:-1:-1;;;;;42963:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42963:24:0;;;;;;;;;;;;:::i;:::-;42928:59;;42998:39;43084:15;:22;43040:77;;;;;;-1:-1:-1;;;43040:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;43040:77:0;;;;;;;;;;;;;;;;42998:119;;43133:9;43128:333;43152:15;:22;43148:1;:26;43128:333;;;43217:16;;43265:18;;43196;;-1:-1:-1;;;;;43217:16:0;;:29;;43265:15;;43281:1;;43265:18;;;;-1:-1:-1;;;43265:18:0;;;;;;;;;;;;;;;43217:81;;;;;;;;;;;;;18938:25:1;;18926:2;18911:18;;18893:76;43217:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43217:81:0;;;;;;;;;;;;:::i;:::-;43196:102;;43313:15;43331:4;-1:-1:-1;;;;;43331:18:0;;43350:15;43366:1;43350:18;;;;;;-1:-1:-1;;;43350:18:0;;;;;;;;;;;;;;;43331:38;;;;;;;;;;;;;18938:25:1;;18926:2;18911:18;;18893:76;43331:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43313:56;;43406:5;43384:6;43391:1;43384:9;;;;;;-1:-1:-1;;;43384:9:0;;;;;;;;;;;;;;;:19;;:27;;;;43442:7;43426:6;43433:1;43426:9;;;;;;-1:-1:-1;;;43426:9:0;;;;;;;;;;;;;;;:13;;:23;;;;;43128:333;;43176:3;;;;;:::i;:::-;;;;43128:333;;42511:115;42563:16;42599:19;42592:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42511:115;:::o;23302:184::-;23409:4;23438:6;;:40;;-1:-1:-1;;;23438:40:0;;;;;19148:25:1;;;19189:18;;;19182:34;;;-1:-1:-1;;;;;23438:6:0;;;;:18;;19121::1;;23438:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23431:47;;23302:184;;;;;:::o;40477:480::-;40539:7;40596:14;;;:4;:14;;;;;:21;40592:67;;-1:-1:-1;40646:1:0;40639:8;;40592:67;40672:27;40703:26;40720:8;40703:16;:26::i;:::-;40740:19;40762:14;;;:4;:14;;;;;40777:21;;40669:60;;-1:-1:-1;40740:19:0;;-1:-1:-1;40762:14:0;40777:25;;40801:1;;40777:25;:::i;:::-;40762:41;;;;;;-1:-1:-1;;;40762:41:0;;;;;;;;;;;;;;;;;;40740:63;;;;;;;;40762:41;;;;;;;40740:63;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40818:40:0;;40814:136;;;40882:15;;-1:-1:-1;40875:22:0;;-1:-1:-1;40875:22:0;40814:136;40937:1;40930:8;;;;40477:480;;;;:::o;41145:198::-;41233:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41233:18:0;-1:-1:-1;41277:40:0;41286:30;;;:21;:30;;;;;;;;;41277:40;;:8;:40;;;;;;:49;;;;;;;;;;41269:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41145:198::o;26837:33::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26837:33:0;:::o;31731:2636::-;31870:18;31891;;;:8;:18;;;;;;;;:27;;;;;;;;31948:21;;;;31988:12;31980:57;;;;-1:-1:-1;;;31980:57:0;;30370:2:1;31980:57:0;;;30352:21:1;;;30389:18;;;30382:30;30448:34;30428:18;;;30421:62;30500:18;;31980:57:0;;;;;;;;;32048:25;;32084:1828;32105:23;;;32084:1828;;;32213:8;32195:11;;32207:2;32195:15;;;;;-1:-1:-1;;;32195:15:0;;;;;;;;;;;;;;;32177;:33;;;;:::i;:::-;:44;32151:132;;;;-1:-1:-1;;;32151:132:0;;23993:2:1;32151:132:0;;;23975:21:1;24032:2;24012:18;;;24005:30;24071:28;24051:18;;;24044:56;24117:18;;32151:132:0;23965:176:1;32151:132:0;32377:10;32324:49;32347:8;32357:11;;32369:2;32357:15;;;;;-1:-1:-1;;;32357:15:0;;;;;;;;;;;;;;;32324:22;:49::i;:::-;-1:-1:-1;;;;;32324:63:0;;32298:184;;;;-1:-1:-1;;;32298:184:0;;27004:2:1;32298:184:0;;;26986:21:1;27043:2;27023:18;;;27016:30;27082:34;27062:18;;;27055:62;27153:29;27133:18;;;27126:57;27200:19;;32298:184:0;26976:249:1;32298:184:0;32518:118;32553:7;32579:8;32606:11;;32618:2;32606:15;;;;;-1:-1:-1;;;32606:15:0;;;;;;;;32518:118;32497:139;;;;:::i;:::-;;;32676:8;32655:17;:29;32651:1192;;32778:22;32799:1;32778:11;:22;:::i;:::-;32772:2;:28;32742:151;;;;-1:-1:-1;;;32742:151:0;;28144:2:1;32742:151:0;;;28126:21:1;28183:2;28163:18;;;28156:30;28222:34;28202:18;;;28195:62;-1:-1:-1;;;28273:18:1;;;28266:47;28330:19;;32742:151:0;28116:239:1;32742:151:0;33013:16;:23;32932:8;;-1:-1:-1;33039:1:0;-1:-1:-1;33009:720:0;;;33080:35;;;;33065:12;;33080:39;;33118:1;;33080:39;:::i;:::-;33240:16;33283:23;;33065:54;;-1:-1:-1;33240:16:0;33283:27;;33309:1;;33283:27;:::i;:::-;33240:93;;;;;;-1:-1:-1;;;33240:93:0;;;;;;;;;;;;;;;;;33215:16;33232:4;33215:22;;;;;;-1:-1:-1;;;33215:22:0;;;;;;;;;;;;;;;;:118;;;;33356:25;33384:16;33401:4;33384:22;;;;;;-1:-1:-1;;;33384:22:0;;;;;;;;;;;;;;;;;;;;;33458:88;;;:21;:88;;;;;;;;33384:22;;-1:-1:-1;33701:8:0;:4;33708:1;33701:8;:::i;:::-;33569:28;;;;:8;:28;;;;;;;;:47;;;;;;;;;:129;;:140;-1:-1:-1;33009:720:0;33747:16;:22;;;;;-1:-1:-1;;;33747:22:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;33747:22:0;;;;;;;;;;;;33788:35;;;:39;32651:1192;33896:4;33857:5;:19;;:36;33877:11;;33889:2;33877:15;;;;;-1:-1:-1;;;33877:15:0;;;;;;;;;;;;;;;33857:36;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;32130:4;;;;;:::i;:::-;;;;32084:1828;;;;33947:17;33922:5;:13;;:21;;;:42;;;;;;;:::i;:::-;;;;-1:-1:-1;;33997:5:0;;34101:3;;-1:-1:-1;;;;;33997:5:0;;;;:14;;34030:10;;34108:4;;34081:23;;:17;:23;:::i;:::-;34080:32;;;;:::i;:::-;34059:54;;:17;:54;:::i;:::-;33997:131;;-1:-1:-1;;;;;;33997:131:0;;;;;;;-1:-1:-1;;;;;12696:55:1;;;33997:131:0;;;12678:74:1;12768:18;;;12761:34;12651:18;;33997:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33975:164;;;;;;34150:5;;;34172:6;34202:3;;-1:-1:-1;;;;;34150:5:0;;;;:13;;34172:6;;34209:4;;34182:23;;:17;:23;:::i;:::-;34181:32;;;;:::i;:::-;34150:64;;-1:-1:-1;;;;;;34150:64:0;;;;;;;-1:-1:-1;;;;;12696:55:1;;;34150:64:0;;;12678:74:1;12768:18;;;12761:34;12651:18;;34150:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;34225:6:0;;34271:3;;-1:-1:-1;;;;;34225:6:0;;;;:24;;34278:4;;34251:23;;:17;:23;:::i;:::-;34250:32;;;;:::i;:::-;34225:58;;;;;;;;;;;;;18938:25:1;;18926:2;18911:18;;18893:76;34225:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34299:60:0;;34348:10;11215:74:1;;34329:17:0;;-1:-1:-1;34319:8:0;;-1:-1:-1;34310:7:0;;34299:60;;11203:2:1;11188:18;34299:60:0;;;;;;;31731:2636;;;;;;;:::o;43956:148::-;44045:12;44082:4;:14;44087:8;44082:14;;;;;;;;;;;44075:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43956:148;;;:::o;16114:547::-;16222:19;16243:27;16289:11;16302:14;16320:79;16355:8;16378:10;16320:20;:79::i;:::-;16288:111;;;;16415:6;16410:54;;16450:1;16438:14;;;;;;;;;;;;;;;;;;;;;16410:54;16496:47;16526:8;16536:6;16496:29;:47::i;:::-;16474:69;;16563:43;16576:8;16586:19;16563:12;:43::i;:::-;16554:52;;16617:36;;16114:547;;;;;:::o;38262:1704::-;38435:10;;38425:21;;;;;;;:::i;:::-;;;;;;;;38413:8;:33;38391:112;;;;-1:-1:-1;;;38391:112:0;;25111:2:1;38391:112:0;;;25093:21:1;25150:2;25130:18;;;25123:30;25189:31;25169:18;;;25162:59;25238:18;;38391:112:0;25083:179:1;38391:112:0;38532:1;38522:7;:11;38514:53;;;;-1:-1:-1;;;38514:53:0;;27786:2:1;38514:53:0;;;27768:21:1;27825:2;27805:18;;;27798:30;27864:31;27844:18;;;27837:59;27913:18;;38514:53:0;27758:179:1;38514:53:0;38578:19;38600:14;;;:4;:14;;;;;38629:12;;38625:805;;38674:38;;;;;;;;;;;38687:15;38674:38;;;;;;;;;;;;;38663:50;;;;;;;;-1:-1:-1;38663:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38728:16;:38;;-1:-1:-1;;;38728:38:0;;-1:-1:-1;;;;;38728:16:0;;;;:26;;:38;;38755:10;;;;38728:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38625:805;;;38802:27;38833:26;38850:8;38833:16;:26::i;:::-;38906:12;;38799:60;;-1:-1:-1;38900:5:0;;-1:-1:-1;38906:16:0;;38921:1;;38906:16;:::i;:::-;38900:23;;;;;;-1:-1:-1;;;38900:23:0;;;;;;;;;;;;;;;;;;;:33;;;38878:19;:55;38874:545;;;38960:12;;38990:15;;38954:5;;38960:16;;38975:1;;38960:16;:::i;:::-;38954:23;;;;;;-1:-1:-1;;;38954:23:0;;;;;;;;;;;;;;;;;;;:33;;:51;;;;39058:7;39024:5;39045:1;39030:5;:12;;;;:16;;;;:::i;:::-;39024:23;;;;;;-1:-1:-1;;;39024:23:0;;;;;;;;;;;;;;;;;;;:30;;;:41;;;;;;;:::i;:::-;;;;-1:-1:-1;;39090:12:0;;39126:7;;39084:5;;39090:16;;39105:1;;39090:16;:::i;:::-;39084:23;;;;;;-1:-1:-1;;;39084:23:0;;;;;;;;;;;;;;;;;;;:38;;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;38874:545:0;;-1:-1:-1;38874:545:0;;39174:5;39207:177;;;;;;;;39237:7;39207:177;;;;39271:15;39207:177;;;;39354:7;39313:5;39334:1;39319:5;:12;;;;:16;;;;:::i;:::-;39313:23;;;;;;-1:-1:-1;;;39313:23:0;;;;;;;;;;;;;;;;;;;:38;;;:48;;;;:::i;:::-;39207:177;;39174:229;;;;;;;;-1:-1:-1;39174:229:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38874:545;38625:805;;39458:34;;;;:24;:34;;;;;;:39;:83;;;;;39540:1;39514:23;39528:8;39514:13;:23::i;:::-;:27;39458:83;39440:252;;;39568:19;:34;;;;;;;;;;;;39654:26;-1:-1:-1;39617:34:0;;;:24;39568:34;39617;;;;:63;39440:252;39724:5;;:54;;-1:-1:-1;;;39724:54:0;;39743:10;39724:54;;;11563:34:1;39763:4:0;11613:18:1;;;11606:43;11665:18;;;11658:34;;;-1:-1:-1;;;;;39724:5:0;;;;:18;;11475::1;;39724:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39702:142;;;;-1:-1:-1;;;39702:142:0;;;;;;;:::i;:::-;39869:10;39855:25;;;;:13;:25;;;;;:36;;39884:7;;39855:25;:36;;39884:7;;39855:36;:::i;:::-;;;;;;;;39926:7;39916:8;39907:51;39935:10;;39947;39907:51;;;;;;;;:::i;:::-;;;;;;;;38262:1704;;;;;:::o;21802:183::-;21903:7;21935:6;;:42;;-1:-1:-1;;;21935:42:0;;;;;18938:25:1;;;-1:-1:-1;;;;;21935:6:0;;;;:32;;18911:18:1;;21935:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26676:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26676:37:0;;-1:-1:-1;26676:37:0;:::o;34634:861::-;34756:25;34784:18;;;:8;:18;;;;;;;;:27;;;;;;;;34838:12;;34830:44;;;;-1:-1:-1;;;34830:44:0;;29323:2:1;34830:44:0;;;29305:21:1;29362:2;29342:18;;;29335:30;-1:-1:-1;;;29381:18:1;;;29374:45;29436:18;;34830:44:0;29295:165:1;34830:44:0;34903:1;34893:7;:11;34885:49;;;;-1:-1:-1;;;34885:49:0;;27432:2:1;34885:49:0;;;27414:21:1;27471:2;27451:18;;;27444:30;27510:27;27490:18;;;27483:55;27555:18;;34885:49:0;27404:175:1;34885:49:0;34962:7;34945:5;:13;;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;35002:5:0;;:54;;-1:-1:-1;;;35002:54:0;;35021:10;35002:54;;;11563:34:1;35041:4:0;11613:18:1;;;11606:43;11665:18;;;11658:34;;;-1:-1:-1;;;;;35002:5:0;;;;:18;;11475::1;;35002:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34980:142;;;;-1:-1:-1;;;34980:142:0;;;;;;;:::i;:::-;35184:27;;;;:32;:53;;;;;35236:1;35220:5;:13;;;:17;35184:53;35180:184;;;35254:16;:30;;;;;;;-1:-1:-1;35254:30:0;;;;;;;;35329:23;35299:27;;;:53;35180:184;35388:10;35374:25;;;;:13;:25;;;;;:36;;35403:7;;35374:25;:36;;35403:7;;35374:36;:::i;:::-;;;;-1:-1:-1;;35426:61:0;;;35469:10;11937:74:1;;12047:13;;12042:2;12027:18;;12020:41;12115:4;12103:17;;12097:24;12077:18;;;12070:52;12176:4;12164:17;;12158:24;12153:2;12138:18;;12131:52;12238:4;12226:17;;12220:24;12214:3;12199:19;;12192:53;12300:4;12288:17;;12282:24;12276:3;12261:19;;12254:53;12362:4;12350:17;;12344:24;12338:3;12323:19;;12316:53;12424:4;12412:17;;12406:24;12400:3;12385:19;;12378:53;12486:4;12474:17;;12468:24;12462:3;12447:19;;12440:53;35426:61:0;;35460:7;;35450:8;;35441:7;;35426:61;;;;;;11924:3:1;35426:61:0;;;34634:861;;;;:::o;40150:164::-;40284:22;;;;:12;:22;;;;;;;;;40277:29;;;;;;;;;;;;;;;;;40243:16;;40277:29;;;40284:22;40277:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40150:164;;;:::o;36281:1760::-;36604:15;36676:10;;36666:21;;;;;;;:::i;:::-;;;;;;;;36654:8;:33;36632:112;;;;-1:-1:-1;;;36632:112:0;;25111:2:1;36632:112:0;;;25093:21:1;25150:2;25130:18;;;25123:30;25189:31;25169:18;;;25162:59;25238:18;;36632:112:0;25083:179:1;36632:112:0;36789:238;;;;;;19542:25:1;;;19583:18;;;19576:34;;;19626:18;;;19619:34;;;19669:18;;;19662:34;;;19712:19;;;19705:35;;;19756:19;;;19749:35;;;19800:19;;;19793:35;;;19514:19;;36789:238:0;;;-1:-1:-1;;36789:238:0;;;;;;;;;36765:273;;36789:238;36765:273;;;;37049:25;37077:18;;;:8;:18;;;;;:27;;;;;;;;37131:12;;36765:273;;-1:-1:-1;37077:27:0;37131:17;37123:61;;;;-1:-1:-1;;;37123:61:0;;26644:2:1;37123:61:0;;;26626:21:1;26683:2;26663:18;;;26656:30;26722:33;26702:18;;;26695:61;26773:18;;37123:61:0;26616:181:1;37123:61:0;37213:1;37203:7;:11;37195:56;;;;-1:-1:-1;;;37195:56:0;;24750:2:1;37195:56:0;;;24732:21:1;;;24769:18;;;24762:30;24828:34;24808:18;;;24801:62;24880:18;;37195:56:0;24722:182:1;37195:56:0;37282:1;37270:9;:13;37262:60;;;;-1:-1:-1;;;37262:60:0;;22899:2:1;37262:60:0;;;22881:21:1;22938:2;22918:18;;;22911:30;22977:34;22957:18;;;22950:62;-1:-1:-1;;;23028:18:1;;;23021:32;23070:19;;37262:60:0;22871:224:1;37262:60:0;37365:9;37355:7;:19;37333:109;;;;-1:-1:-1;;;37333:109:0;;26235:2:1;37333:109:0;;;26217:21:1;26274:2;26254:18;;;26247:30;26313:34;26293:18;;;26286:62;-1:-1:-1;;;26364:18:1;;;26357:38;26412:19;;37333:109:0;26207:230:1;37333:109:0;37453:22;;;37486:15;;;:28;;;37525:14;;;;:26;;;37562:12;;;;:22;;;37595:20;;;;:38;;;37644:29;;;:56;;;37453:12;37711:22;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;37758:30;;;:21;:30;;;;;;:41;;;37810:16;;:38;;-1:-1:-1;;;37810:38:0;;-1:-1:-1;;;;;37810:16:0;;;;:26;;:38;;37837:10;;;;37810:38;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37886:7;37876:8;37864:54;37895:10;;37907;37864:54;;;;;;;;:::i;:::-;;;;;;;;37933:11;;37929:80;;37961:36;37970:7;37979:8;37989:7;37961:8;:36::i;:::-;38019:14;36281:1760;;;;;;;;;;;;:::o;17005:296::-;17135:27;17214:6;;:79;;-1:-1:-1;;;17214:79:0;;;;;19148:25:1;;;19189:18;;;19182:34;;;17114:19:0;;17135:27;-1:-1:-1;;;;;17214:6:0;;:20;;19121:18:1;;17214:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17214:79:0;;;;;;;;;;;;:::i;:::-;17180:113;;;;-1:-1:-1;17005:296:0;-1:-1:-1;;;;17005:296:0:o;44325:176::-;44436:10;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;44436:10:0;44471:14;;;;:4;:14;;;;;:22;;44486:6;;44471:22;;;;-1:-1:-1;;;44471:22:0;;;;;;;;;;;;;;;;;;;44464:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44325:176;;;;:::o;46799:455::-;46956:13;46982:21;47017:10;47006:29;;;;;;-1:-1:-1;;;47006:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47006:29:0;;46982:53;;47051:9;47046:176;47066:21;;;47046:176;;;47122:18;;;;:8;:18;;;;;;;;:27;;;;;;;;:41;;;47182:10;;47193:1;47182:13;;;;;-1:-1:-1;;;47182:13:0;;;;;;;;;;;;;;;47122:88;;;;;;;;;;;;;;;;;;;;;47109:7;47117:1;47109:10;;;;;;-1:-1:-1;;;47109:10:0;;;;;;;;;:101;;;:10;;;;;;;;;;;:101;47089:3;;;;:::i;:::-;;;;47046:176;;;-1:-1:-1;47239:7:0;46799:455;-1:-1:-1;;;;;46799:455:0:o;23731:194::-;23876:6;;:41;;-1:-1:-1;;;23876:41:0;;;;;19148:25:1;;;19189:18;;;19182:34;;;23839:12:0;;-1:-1:-1;;;;;23876:6:0;;:19;;19121:18:1;;23876:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23876:41:0;;;;;;;;;;;;:::i;26919:36::-;;;;;;;;;;;;22786:215;22907:7;22939:6;;:54;;-1:-1:-1;;;22939:54:0;;;;;19148:25:1;;;19189:18;;;19182:34;;;-1:-1:-1;;;;;22939:6:0;;;;:36;;19121:18:1;;22939:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22353:209::-;22471:7;22503:6;;:51;;-1:-1:-1;;;22503:51:0;;;;;19148:25:1;;;19189:18;;;19182:34;;;-1:-1:-1;;;;;22503:6:0;;;;:29;;19121:18:1;;22503:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17694:1072::-;17810:11;17874:6;;:50;;-1:-1:-1;;;17874:50:0;;;;;19148:25:1;;;19189:18;;;19182:34;;;17810:11:0;;-1:-1:-1;;;;;17874:6:0;;:28;;19121:18:1;;17874:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17855:69;;-1:-1:-1;17855:69:0;-1:-1:-1;17935:47:0;;;;17962:8;;;;:::i;:::-;;;;17935:47;17992:17;18012:6;;:42;;-1:-1:-1;;;18012:42:0;;;;;18938:25:1;;;-1:-1:-1;;;;;18012:6:0;;;;:32;;18911:18:1;;18012:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17992:62;;18119:6;18106:9;:19;18102:69;;18150:5;18157:1;18142:17;;;;;;;18102:69;18181:27;18211:6;;:91;;-1:-1:-1;;;18211:91:0;;;;;19148:25:1;;;19189:18;;;19182:34;;;-1:-1:-1;;;;;18211:6:0;;;;:36;;19121:18:1;;18211:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18181:121;;18339:10;18317:19;:32;18313:86;;;18374:4;18366:21;;;;;;18313:86;18478:8;;;;:::i;:::-;;;;18551:6;18538:9;:19;18534:69;;18582:5;18589:1;18574:17;;;;;;;;18534:69;18635:6;;:91;;-1:-1:-1;;;18635:91:0;;;;;19148:25:1;;;19189:18;;;19182:34;;;-1:-1:-1;;;;;18635:6:0;;;;:36;;19121:18:1;;18635:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18745:4:0;;-1:-1:-1;;;17694:1072:0;;;;;:::o;24564:756::-;24791:17;;:34;;-1:-1:-1;;;24791:34:0;;;;;18938:25:1;;;24677:13:0;;;;;;-1:-1:-1;;;;;24791:17:0;;:29;;18911:18:1;;24791:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24785:40;;24836:14;24853:30;24879:3;24853:25;:30::i;:::-;24836:47;-1:-1:-1;24898:11:0;24894:62;;24934:1;24937;24940:3;24926:18;;;;;;;;;24894:62;24979:46;25009:3;25014:10;25023:1;25014:6;:10;:::i;24979:46::-;24966:59;;25036:24;25063:29;25076:3;25081:10;25063:12;:29::i;:::-;25036:56;;25107:11;:18;25129:1;25107:23;25103:74;;;25155:1;25158;25161:3;25147:18;;;;;;;;;;25103:74;25187:18;25208:23;25219:11;25208:10;:23::i;:::-;25187:44;-1:-1:-1;25308:3:0;;-1:-1:-1;;;;24564:756:0;;;;;;:::o;19977:1596::-;20175:22;;20246:16;;20287:89;20322:8;20345:20;20358:7;20345:10;:20;:::i;20287:89::-;20245:131;;;;20426:11;20421:86;;20462:14;;;20474:1;20462:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20478:16:0;;;20492:1;20478:16;;;;;;;;20454:41;;-1:-1:-1;20478:16:0;-1:-1:-1;20454:41:0;;-1:-1:-1;;20454:41:0;20421:86;20517:17;20572:43;20594:8;20604:10;20572:21;:43::i;:::-;20545:70;;-1:-1:-1;20545:70:0;-1:-1:-1;20545:70:0;20665:86;;20706:14;;;20718:1;20706:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20722:16:0;;;20736:1;20722:16;;;;;;;;20698:41;;-1:-1:-1;20722:16:0;-1:-1:-1;20698:41:0;;-1:-1:-1;;;20698:41:0;20665:86;20761:17;20781:23;20793:11;20781:9;:23;:::i;:::-;:27;;20807:1;20781:27;:::i;:::-;20761:47;;20893:9;20881;:21;20877:129;;;20933:21;20945:9;20933;:21;:::i;:::-;:25;;20957:1;20933:25;:::i;:::-;20919:39;;20985:9;20973:21;;20877:129;21016:27;21058:9;21046:22;;;;;;-1:-1:-1;;;21046:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21016:52;;21079:33;21129:9;21115:24;;;;;;-1:-1:-1;;;21115:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21115:24:0;;21079:60;;21150:28;21194:10;21189:327;21215:9;21210:2;:14;21189:327;;;21270:108;21318:8;21346:16;21360:2;21346:11;:16;:::i;21270:108::-;21247:16;21264:2;21247:20;;;;;;-1:-1:-1;;;21247:20:0;;;;;;;;;;;;;;:131;;;;;21411:44;21424:8;21434:16;21451:2;21434:20;;;;;;-1:-1:-1;;;21434:20:0;;;;;;;;;;;;;;;21411:12;:44::i;:::-;21393:62;;21489:15;21470:12;21483:2;21470:16;;;;;;-1:-1:-1;;;21470:16:0;;;;;;;;;;;;;;:34;;;;21226:4;;;;;:::i;:::-;;;;21189:327;;;-1:-1:-1;21534:12:0;;-1:-1:-1;21548:16:0;-1:-1:-1;;;;;;19977:1596:0;;;;;;;;:::o;29938:1519::-;30093:1;30069:14;;;:4;:14;;;;;:21;30047:109;;;;-1:-1:-1;;;30047:109:0;;22496:2:1;30047:109:0;;;22478:21:1;22535:2;22515:18;;;22508:30;22574:34;22554:18;;;22547:62;-1:-1:-1;;;22625:18:1;;;22618:32;22667:19;;30047:109:0;22468:224:1;30047:109:0;30167:25;;30203:196;30224:23;;;30203:196;;;30291:96;30330:8;30357:11;;30369:2;30357:15;;;;;-1:-1:-1;;;30357:15:0;;;;;;;;;;;;;;;30291:20;:96::i;:::-;30270:117;;;;:::i;:::-;;-1:-1:-1;30249:4:0;;;;:::i;:::-;;;;30203:196;;;-1:-1:-1;30431:5:0;;30535:3;;-1:-1:-1;;;;;30431:5:0;;;;:14;;30464:10;;30542:4;;30515:23;;:17;:23;:::i;:::-;30514:32;;;;:::i;:::-;30493:54;;:17;:54;:::i;:::-;30431:131;;-1:-1:-1;;;;;;30431:131:0;;;;;;;-1:-1:-1;;;;;12696:55:1;;;30431:131:0;;;12678:74:1;12768:18;;;12761:34;12651:18;;30431:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30409:164;;;;;;30584:5;;;30606:6;30636:3;;-1:-1:-1;;;;;30584:5:0;;;;:13;;30606:6;;30643:4;;30616:23;;:17;:23;:::i;:::-;30615:32;;;;:::i;:::-;30584:64;;-1:-1:-1;;;;;;30584:64:0;;;;;;;-1:-1:-1;;;;;12696:55:1;;;30584:64:0;;;12678:74:1;12768:18;;;12761:34;12651:18;;30584:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30659:6:0;;30705:3;;-1:-1:-1;;;;;30659:6:0;;;;:24;;30712:4;;30685:23;;:17;:23;:::i;:::-;30684:32;;;;:::i;:::-;30659:58;;;;;;;;;;;;;18938:25:1;;18926:2;18911:18;;18893:76;30659:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30732:23;30746:8;30732:13;:23::i;:::-;30728:648;;30781:34;;;;:24;:34;;;;;;:39;30777:588;;30841:12;30856:34;;;:24;:34;;;;;;:38;;30893:1;;30856:38;:::i;:::-;31010:19;31052:26;;30841:53;;-1:-1:-1;31010:19:0;31052:30;;31081:1;;31052:30;:::i;:::-;31010:91;;;;;;-1:-1:-1;;;31010:91:0;;;;;;;;;;;;;;;;;30982:19;31002:4;30982:25;;;;;;-1:-1:-1;;;30982:25:0;;;;;;;;;;;;;;;;:119;;;;31120:26;31149:19;31169:4;31149:25;;;;;;-1:-1:-1;;;31149:25:0;;;;;;;;;;;;;;;;;31120:54;;31240:4;31247:1;31240:8;;;;:::i;:::-;31193:44;;;;:24;:44;;;;;;:55;;;;31267:34;;;;;;:38;31324:19;:25;;;;;-1:-1:-1;;;31324:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;30777:588;;;31391:58;;31438:10;;31419:17;;31409:8;;31391:58;;;;;29938:1519;;;;:::o;52183:2288::-;52321:21;52408:7;52377:28;52395:10;52377:15;:28;:::i;:::-;:38;52355:118;;;;-1:-1:-1;;;52355:118:0;;30731:2:1;52355:118:0;;;30713:21:1;30770:2;30750:18;;;30743:30;30809:32;30789:18;;;30782:60;30859:18;;52355:118:0;30703:180:1;52355:118:0;52484:18;52505;;;:8;:18;;;;;;;;:27;;;;;;;;52552:31;;;:19;;;:31;;;;;;;;;52551:32;52543:67;;;;-1:-1:-1;;;52543:67:0;;30019:2:1;52543:67:0;;;30001:21:1;30058:2;30038:18;;;30031:30;30097:24;30077:18;;;30070:52;30139:18;;52543:67:0;29991:172:1;52543:67:0;52688:22;;;;52648:23;;;;52621:10;;52688:22;52635:36;;:10;:36;:::i;:::-;52634:76;;;;:::i;:::-;52621:89;;52763:10;52827:2;52802:5;:13;;:22;;;:27;;;;:::i;:::-;52776:23;;;;:53;;;;:::i;:::-;52763:66;;52883:28;52914:34;52927:8;52937:10;52914:12;:34::i;:::-;52883:65;;52967:15;:22;52993:1;52967:27;;52959:68;;;;-1:-1:-1;;;52959:68:0;;28562:2:1;52959:68:0;;;28544:21:1;28601:2;28581:18;;;28574:30;28640;28620:18;;;28613:58;28688:18;;52959:68:0;28534:178:1;52959:68:0;53053:34;53102:24;53140:35;53154:8;53164:10;53140:13;:35::i;:::-;53274:28;;;;53038:137;;-1:-1:-1;53038:137:0;-1:-1:-1;53186:20:0;;53274:33;53270:438;;53324:11;53338:29;53351:15;53338:12;:29::i;:::-;53324:43;;53382:11;53396:35;53409:21;53396:12;:35::i;:::-;53382:49;-1:-1:-1;53450:8:0;53446:251;;53494:5;53479:20;;53446:251;;;53532:3;53525;:10;53521:176;;53595:3;53581:9;53595:3;53581;:9;:::i;:::-;53572:19;;:5;:19;:::i;:::-;53571:27;;;;:::i;:::-;53556:42;;53521:176;;;53678:3;53664:9;53670:3;53678;53664:9;:::i;:::-;53655:19;;:5;:19;:::i;:::-;53654:27;;;;:::i;:::-;53639:42;;53521:176;53270:438;;;53734:20;;;-1:-1:-1;53734:13:0;53785:15;53798:2;53785:10;:15;:::i;:::-;53991:20;;;;53765:35;;-1:-1:-1;53979:32:0;;:57;;;;;54034:2;54015:16;:21;53979:57;53975:370;;;54123:37;;;;:49;;54163:9;;54123:49;:::i;:::-;54106:66;;;;:::i;:::-;;;53975:370;;;54246:28;;;;54231:43;;54205:128;;;;-1:-1:-1;;;54205:128:0;;29667:2:1;54205:128:0;;;29649:21:1;29706:2;29686:18;;;29679:30;29745:25;29725:18;;;29718:53;29788:18;;54205:128:0;29639:173:1;54205:128:0;54361:21;;;;:37;-1:-1:-1;54357:107:0;;;54431:21;;;;;-1:-1:-1;54357:107:0;52183:2288;;;;;;;;;;;;;:::o;51123:697::-;51217:19;51238:27;51283:14;51300:35;51326:8;51300:25;:35::i;:::-;51283:52;-1:-1:-1;51350:11:0;51346:65;;51386:9;;;;;;;;;;;;51397:1;51378:21;;;;;;;51346:65;51421:13;51506:271;51513:10;;51506:271;;51540:8;;;;:::i;:::-;;;;51571:47;51601:8;51611:6;51571:29;:47::i;:::-;51563:55;;51642:29;51655:8;51665:5;51642:12;:29::i;:::-;51690:13;;51633:38;;-1:-1:-1;51690:17:0;51686:80;;51744:5;-1:-1:-1;51728:22:0;;-1:-1:-1;51728:22:0;51686:80;51506:271;;;51795:9;;;;;;;;;-1:-1:-1;51795:9:0;;;-1:-1:-1;51806:5:0;-1:-1:-1;;51123:697:0;;;;:::o;25516:202::-;25575:15;;25602:109;25628:2;:9;25623:2;:14;25602:109;;;25692:2;25695;25692:6;;;;;;-1:-1:-1;;;25692:6:0;;;;;;;;;;;;;;;25670:13;:7;25680:3;25670:13;:::i;:::-;:29;;;;:::i;:::-;25660:39;-1:-1:-1;25639:4:0;;;;:::i;:::-;;;;25602:109;;;;25516:202;;;:::o;48311:2535::-;48415:18;48504:8;48473:28;48491:10;48473:15;:28;:::i;:::-;:39;48451:115;;;;-1:-1:-1;;;48451:115:0;;23993:2:1;48451:115:0;;;23975:21:1;24032:2;24012:18;;;24005:30;24071:28;24051:18;;;24044:56;24117:18;;48451:115:0;23965:176:1;48451:115:0;48586:33;48598:8;48608:10;48586:11;:33::i;:::-;48585:34;48577:61;;;;-1:-1:-1;;;48577:61:0;;23302:2:1;48577:61:0;;;23284:21:1;23341:2;23321:18;;;23314:30;-1:-1:-1;;;23360:18:1;;;23353:44;23414:18;;48577:61:0;23274:164:1;48577:61:0;48685:44;48708:8;48718:10;48685:22;:44::i;:::-;-1:-1:-1;;;;;48671:58:0;:10;-1:-1:-1;;;;;48671:58:0;;48649:143;;;;-1:-1:-1;;;48649:143:0;;28919:2:1;48649:143:0;;;28901:21:1;28958:2;28938:18;;;28931:30;28997:34;28977:18;;;28970:62;-1:-1:-1;;;29048:18:1;;;29041:33;29091:19;;48649:143:0;28891:225:1;48649:143:0;48803:19;48825:14;;;:4;:14;;;;;48892:12;;48825:14;;48803:19;;48938:227;48959:1;48945:11;48952:4;48945;:11;:::i;:::-;:15;48938:227;;;49000:1;48985:11;48992:4;48985;:11;:::i;:::-;48984:17;;;;:::i;:::-;48977:24;;49044:10;49020:5;49026:4;49020:11;;;;;;-1:-1:-1;;;49020:11:0;;;;;;;;;;;;;;;;;;;:21;;;:34;49016:138;;;49082:4;49075:11;;49016:138;;;49134:4;49127:11;;49016:138;48938:227;;;49178:24;49206:35;49220:8;49230:10;49206:13;:35::i;:::-;49175:66;;;49293:5;49299:4;49293:11;;;;;;-1:-1:-1;;;49293:11:0;;;;;;;;;;;;;;;;;;;:21;;;49274:16;:40;49252:123;;;;-1:-1:-1;;;49252:123:0;;24348:2:1;49252:123:0;;;24330:21:1;24387:2;24367:18;;;24360:30;24426:34;24406:18;;;24399:62;-1:-1:-1;;;24477:18:1;;;24470:31;24518:19;;49252:123:0;24320:223:1;49252:123:0;49422:5;49428:4;49422:11;;;;;;-1:-1:-1;;;49422:11:0;;;;;;;;;;;;;;;;;;;:21;;;49408:10;:35;;49386:115;;;;-1:-1:-1;;;49386:115:0;;25469:2:1;49386:115:0;;;25451:21:1;25508:2;25488:18;;;25481:30;25547:32;25527:18;;;25520:60;25597:18;;49386:115:0;25441:180:1;49386:115:0;49541:1;49520:5;49526:4;49520:11;;;;;;-1:-1:-1;;;49520:11:0;;;;;;;;;;;;;;;;;;;:18;;;:22;49512:54;;;;-1:-1:-1;;;49512:54:0;;23645:2:1;49512:54:0;;;23627:21:1;23684:2;23664:18;;;23657:30;-1:-1:-1;;;23703:18:1;;;23696:49;23762:18;;49512:54:0;23617:169:1;49512:54:0;49590:5;49596:4;49590:11;;;;;;-1:-1:-1;;;49590:11:0;;;;;;;;;;;;;;;;;;;:18;;;49577:31;;49640:1;49619:5;49625:4;49619:11;;;;;;-1:-1:-1;;;49619:11:0;;;;;;;;;;;;;;;;;;;;;:22;;;;49673:4;;49790:47;49812:8;49822:14;:10;49835:1;49822:14;:::i;49790:47::-;49766:71;-1:-1:-1;49849:11:0;;-1:-1:-1;49849:11:0;49886:90;49922:8;49945:20;:16;49964:1;49945:20;:::i;49886:90::-;49848:128;;-1:-1:-1;49848:128:0;-1:-1:-1;50018:1:0;49991:24;49848:128;49991:9;:24;:::i;:::-;:28;:39;;;;50024:6;50023:7;49991:39;49987:852;;;50052:6;50047:781;;50092:5;50098:10;50092:17;;;;;;-1:-1:-1;;;50092:17:0;;;;;;;;;;;;;;;;;;;:32;;;50079:45;;50047:781;;;50202:1;;50172:4;-1:-1:-1;50245:289:0;50266:1;50252:11;50259:4;50252;:11;:::i;:::-;:15;50245:289;;;50315:1;50300:11;50307:4;50300;:11;:::i;:::-;50299:17;;;;:::i;:::-;50292:24;;50367:16;50343:5;50349:4;50343:11;;;;;;-1:-1:-1;;;50343:11:0;;;;;;;;;;;;;;;;;;;:21;;;:40;50339:176;;;50419:4;50412:11;;50339:176;;;50487:4;50480:11;;50339:176;50245:289;;;50552:6;;;;:::i;:::-;;;;50588:10;50581:4;:17;50577:236;;;50775:5;50781:4;50775:11;;;;;;-1:-1:-1;;;50775:11:0;;;;;;;;;;;;;;;;;;;:18;;;50721:5;50727:4;50721:11;;;;;;-1:-1:-1;;;50721:11:0;;;;;;;;;;;;;;;;;;;:26;;;50661:5;50667:10;50661:17;;;;;;-1:-1:-1;;;50661:17:0;;;;;;;;;;;;;;;;;;;:32;;;:86;;;;:::i;:::-;:132;;;;:::i;:::-;50623:170;;50577:236;48311:2535;;;;;;;;;;;;;:::o;47822:238::-;47911:15;;47944:109;47970:2;:9;47965:2;:14;47944:109;;;48034:2;48037;48034:6;;;;;;-1:-1:-1;;;48034:6:0;;;;;;;;;;;;;;;48012:13;:7;48022:3;48012:13;:::i;:::-;:29;;;;:::i;:::-;48002:39;-1:-1:-1;47981:4:0;;;;:::i;:::-;;;;47944:109;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:395:1:-;;;141:3;134:4;126:6;122:17;118:27;108:2;;166:8;156;149:26;108:2;-1:-1:-1;196:20:1;;239:18;228:30;;225:2;;;278:8;268;261:26;225:2;322:4;314:6;310:17;298:29;;382:3;375:4;365:6;362:1;358:14;350:6;346:27;342:38;339:47;336:2;;;399:1;396;389:12;414:164;490:13;;539;;532:21;522:32;;512:2;;568:1;565;558:12;583:375;;;698:3;691:4;683:6;679:17;675:27;665:2;;723:8;713;706:26;665:2;-1:-1:-1;753:20:1;;796:18;785:30;;782:2;;;835:8;825;818:26;782:2;879:4;871:6;867:17;855:29;;931:3;924:4;915:6;907;903:19;899:30;896:39;893:2;;;948:1;945;938:12;963:512;;1069:3;1062:4;1054:6;1050:17;1046:27;1036:2;;1091:5;1084;1077:20;1036:2;1124:6;1118:13;1150:18;1146:2;1143:26;1140:2;;;1172:18;;:::i;:::-;1216:55;1259:2;1240:13;;-1:-1:-1;;1236:27:1;1265:4;1232:38;1216:55;:::i;:::-;1296:2;1287:7;1280:19;1342:3;1335:4;1330:2;1322:6;1318:15;1314:26;1311:35;1308:2;;;1363:5;1356;1349:20;1308:2;1380:64;1441:2;1434:4;1425:7;1421:18;1414:4;1406:6;1402:17;1380:64;:::i;:::-;1462:7;1026:449;-1:-1:-1;;;;1026:449:1:o;1480:257::-;;1592:2;1580:9;1571:7;1567:23;1563:32;1560:2;;;1613:6;1605;1598:22;1560:2;1657:9;1644:23;1676:31;1701:5;1676:31;:::i;:::-;1726:5;1550:187;-1:-1:-1;;;1550:187:1:o;1742:261::-;;1865:2;1853:9;1844:7;1840:23;1836:32;1833:2;;;1886:6;1878;1871:22;1833:2;1923:9;1917:16;1942:31;1967:5;1942:31;:::i;2008:992::-;;2134:2;2177;2165:9;2156:7;2152:23;2148:32;2145:2;;;2198:6;2190;2183:22;2145:2;2236:9;2230:16;2265:18;2306:2;2298:6;2295:14;2292:2;;;2327:6;2319;2312:22;2292:2;2370:6;2359:9;2355:22;2345:32;;2415:7;2408:4;2404:2;2400:13;2396:27;2386:2;;2442:6;2434;2427:22;2386:2;2476;2470:9;2498:2;2494;2491:10;2488:2;;;2504:18;;:::i;:::-;2550:2;2547:1;2543:10;2533:20;;2573:28;2597:2;2593;2589:11;2573:28;:::i;:::-;2635:15;;;2666:12;;;;2698:11;;;2728;;;2724:20;;2721:33;-1:-1:-1;2718:2:1;;;2772:6;2764;2757:22;2718:2;2799:6;2790:15;;2814:156;2828:2;2825:1;2822:9;2814:156;;;2885:10;;2873:23;;2846:1;2839:9;;;;;2916:12;;;;2948;;2814:156;;;-1:-1:-1;2989:5:1;2114:886;-1:-1:-1;;;;;;;;2114:886:1:o;3005:212::-;;3125:2;3113:9;3104:7;3100:23;3096:32;3093:2;;;3146:6;3138;3131:22;3093:2;3174:37;3201:9;3174:37;:::i;3222:495::-;;;;3385:2;3373:9;3364:7;3360:23;3356:32;3353:2;;;3406:6;3398;3391:22;3353:2;3434:37;3461:9;3434:37;:::i;:::-;3424:47;;3515:2;3504:9;3500:18;3494:25;3542:18;3534:6;3531:30;3528:2;;;3579:6;3571;3564:22;3528:2;3607:60;3659:7;3650:6;3639:9;3635:22;3607:60;:::i;:::-;3597:70;;;3707:2;3696:9;3692:18;3686:25;3676:35;;3343:374;;;;;:::o;3722:273::-;;;3859:2;3847:9;3838:7;3834:23;3830:32;3827:2;;;3880:6;3872;3865:22;3827:2;3908:37;3935:9;3908:37;:::i;:::-;3898:47;;3985:2;3974:9;3970:18;3964:25;3954:35;;3817:178;;;;;:::o;4000:190::-;;4112:2;4100:9;4091:7;4087:23;4083:32;4080:2;;;4133:6;4125;4118:22;4080:2;-1:-1:-1;4161:23:1;;4070:120;-1:-1:-1;4070:120:1:o;4195:194::-;;4318:2;4306:9;4297:7;4293:23;4289:32;4286:2;;;4339:6;4331;4324:22;4286:2;-1:-1:-1;4367:16:1;;4276:113;-1:-1:-1;4276:113:1:o;4394:525::-;;;;4558:2;4546:9;4537:7;4533:23;4529:32;4526:2;;;4579:6;4571;4564:22;4526:2;4620:9;4607:23;4597:33;;4681:2;4670:9;4666:18;4653:32;4708:18;4700:6;4697:30;4694:2;;;4745:6;4737;4730:22;4694:2;4789:70;4851:7;4842:6;4831:9;4827:22;4789:70;:::i;:::-;4516:403;;4878:8;;-1:-1:-1;4763:96:1;;-1:-1:-1;;;;4516:403:1:o;4924:593::-;;;;;5105:2;5093:9;5084:7;5080:23;5076:32;5073:2;;;5126:6;5118;5111:22;5073:2;5167:9;5154:23;5144:33;;5224:2;5213:9;5209:18;5196:32;5186:42;;5279:2;5268:9;5264:18;5251:32;5306:18;5298:6;5295:30;5292:2;;;5343:6;5335;5328:22;5292:2;5387:70;5449:7;5440:6;5429:9;5425:22;5387:70;:::i;:::-;5063:454;;;;-1:-1:-1;5476:8:1;-1:-1:-1;;;;5063:454:1:o;5522:326::-;;;;5668:2;5656:9;5647:7;5643:23;5639:32;5636:2;;;5689:6;5681;5674:22;5636:2;-1:-1:-1;;5717:23:1;;;5787:2;5772:18;;5759:32;;-1:-1:-1;5838:2:1;5823:18;;;5810:32;;5626:222;-1:-1:-1;5626:222:1:o;5853:258::-;;;5982:2;5970:9;5961:7;5957:23;5953:32;5950:2;;;6003:6;5995;5988:22;5950:2;-1:-1:-1;;6031:23:1;;;6101:2;6086:18;;;6073:32;;-1:-1:-1;5940:171:1:o;6116:565::-;;;;;6281:2;6269:9;6260:7;6256:23;6252:32;6249:2;;;6302:6;6294;6287:22;6249:2;6343:9;6330:23;6320:33;;6400:2;6389:9;6385:18;6372:32;6362:42;;6455:2;6444:9;6440:18;6427:32;6482:18;6474:6;6471:30;6468:2;;;6519:6;6511;6504:22;6468:2;6563:58;6613:7;6604:6;6593:9;6589:22;6563:58;:::i;6686:395::-;;;;;6849:3;6837:9;6828:7;6824:23;6820:33;6817:2;;;6871:6;6863;6856:22;6817:2;-1:-1:-1;;6899:23:1;;;6969:2;6954:18;;6941:32;;-1:-1:-1;7020:2:1;7005:18;;6992:32;;7071:2;7056:18;7043:32;;-1:-1:-1;6807:274:1;-1:-1:-1;6807:274:1:o;7086:979::-;;;;;;;;;;;7353:3;7341:9;7332:7;7328:23;7324:33;7321:2;;;7375:6;7367;7360:22;7321:2;7416:9;7403:23;7393:33;;7473:2;7462:9;7458:18;7445:32;7435:42;;7524:2;7513:9;7509:18;7496:32;7486:42;;7575:2;7564:9;7560:18;7547:32;7537:42;;7626:3;7615:9;7611:19;7598:33;7588:43;;7678:3;7667:9;7663:19;7650:33;7640:43;;7730:3;7719:9;7715:19;7702:33;7692:43;;7786:3;7775:9;7771:19;7758:33;7814:18;7806:6;7803:30;7800:2;;;7851:6;7843;7836:22;7800:2;7895:58;7945:7;7936:6;7925:9;7921:22;7895:58;:::i;:::-;7869:84;;7972:8;7962:18;;;7999:8;7989:18;;;8054:3;8043:9;8039:19;8026:33;8016:43;;7311:754;;;;;;;;;;;;;:::o;8070:355::-;;8202:2;8190:9;8181:7;8177:23;8173:32;8170:2;;;8223:6;8215;8208:22;8170:2;8261:9;8255:16;8294:18;8286:6;8283:30;8280:2;;;8331:6;8323;8316:22;8280:2;8359:60;8411:7;8402:6;8391:9;8387:22;8359:60;:::i;8430:729::-;;8560:3;8604:2;8592:9;8583:7;8579:23;8575:32;8572:2;;;8625:6;8617;8610:22;8572:2;8656:19;8672:2;8656:19;:::i;:::-;8643:32;;8704:9;8698:16;8691:5;8684:31;8768:2;8757:9;8753:18;8747:25;8742:2;8735:5;8731:14;8724:49;8826:2;8815:9;8811:18;8805:25;8800:2;8793:5;8789:14;8782:49;8884:2;8873:9;8869:18;8863:25;8858:2;8851:5;8847:14;8840:49;8943:3;8932:9;8928:19;8922:26;8916:3;8909:5;8905:15;8898:51;9003:3;8992:9;8988:19;8982:26;8976:3;8969:5;8965:15;8958:51;9063:3;9052:9;9048:19;9042:26;9036:3;9029:5;9025:15;9018:51;9123:3;9112:9;9108:19;9102:26;9096:3;9089:5;9085:15;9078:51;9148:5;9138:15;;;8540:619;;;;:::o;9558:268::-;;9646:6;9641:3;9634:19;9698:6;9691:5;9684:4;9679:3;9675:14;9662:43;9750:3;9743:4;9734:6;9729:3;9725:16;9721:27;9714:40;9815:4;9808:2;9804:7;9799:2;9791:6;9787:15;9783:29;9778:3;9774:39;9770:50;9763:57;;9624:202;;;;;:::o;9831:257::-;;9910:5;9904:12;9937:6;9932:3;9925:19;9953:63;10009:6;10002:4;9997:3;9993:14;9986:4;9979:5;9975:16;9953:63;:::i;:::-;10070:2;10049:15;-1:-1:-1;;10045:29:1;10036:39;;;;10077:4;10032:50;;9880:208;-1:-1:-1;;9880:208:1:o;10791:273::-;;10974:6;10966;10961:3;10948:33;11000:16;;11025:15;;;11000:16;10938:126;-1:-1:-1;10938:126:1:o;12806:645::-;12971:2;13023:21;;;13093:13;;12996:18;;;13115:22;;;12806:645;;12971:2;13194:15;;;;13168:2;13153:18;;;12806:645;13240:185;13254:6;13251:1;13248:13;13240:185;;;13329:13;;13322:21;13315:29;13303:42;;13400:15;;;;13365:12;;;;13276:1;13269:9;13240:185;;;-1:-1:-1;13442:3:1;;12951:500;-1:-1:-1;;;;;;12951:500:1:o;13456:635::-;13627:2;13679:21;;;13749:13;;13652:18;;;13771:22;;;13456:635;;13627:2;13850:15;;;;13824:2;13809:18;;;13456:635;13896:169;13910:6;13907:1;13904:13;13896:169;;;13971:13;;13959:26;;14040:15;;;;14005:12;;;;13932:1;13925:9;13896:169;;14096:1335;;14382:2;14371:9;14367:18;14412:2;14401:9;14394:21;14435:6;14470;14464:13;14501:6;14493;14486:22;14539:2;14528:9;14524:18;14517:25;;14601:2;14591:6;14588:1;14584:14;14573:9;14569:30;14565:39;14551:53;;14623:4;14662:2;14654:6;14650:15;14683:4;14696:254;14710:6;14707:1;14704:13;14696:254;;;14803:2;14799:7;14787:9;14779:6;14775:22;14771:36;14766:3;14759:49;14831:39;14863:6;14854;14848:13;14831:39;:::i;:::-;14821:49;-1:-1:-1;14928:12:1;;;;14893:15;;;;14732:1;14725:9;14696:254;;;-1:-1:-1;;14986:22:1;;;14966:18;;;14959:50;15062:13;;15084:24;;;15166:15;;;;15126;;;-1:-1:-1;15062:13:1;-1:-1:-1;15201:4:1;15214:189;15230:8;15225:3;15222:17;15214:189;;;15299:15;;15285:30;;15376:17;;;;15337:14;;;;15258:1;15249:11;15214:189;;;-1:-1:-1;15420:5:1;;14343:1088;-1:-1:-1;;;;;;;14343:1088:1:o;15436:1098::-;;15691:2;15731;15720:9;15716:18;15761:2;15750:9;15743:21;15784:6;15819;15813:13;15850:6;15842;15835:22;15888:2;15877:9;15873:18;15866:25;;15950:2;15940:6;15937:1;15933:14;15922:9;15918:30;15914:39;15900:53;;15988:2;15980:6;15976:15;16009:4;16022:483;16036:6;16033:1;16030:13;16022:483;;;16129:2;16125:7;16113:9;16105:6;16101:22;16097:36;16092:3;16085:49;16163:6;16157:13;16193:6;16212:48;16253:6;16248:2;16242:9;10176:5;10170:12;10165:3;10158:25;10232:4;10225:5;10221:16;10215:23;10208:4;10203:3;10199:14;10192:47;10288:4;10281:5;10277:16;10271:23;10264:4;10259:3;10255:14;10248:47;10344:4;10337:5;10333:16;10327:23;10320:4;10315:3;10311:14;10304:47;10400:4;10393:5;10389:16;10383:23;10376:4;10371:3;10367:14;10360:47;10456:4;10449:5;10445:16;10439:23;10432:4;10427:3;10423:14;10416:47;10512:4;10505:5;10501:16;10495:23;10488:4;10483:3;10479:14;10472:47;10568:4;10561:5;10557:16;10551:23;10544:4;10539:3;10535:14;10528:47;10148:433;;;16212:48;16307:2;16303;16299:11;16293:18;16273:38;;16352:2;16343:6;16335;16331:19;16324:31;16378:47;16421:2;16413:6;16409:15;16395:12;16378:47;:::i;:::-;16368:57;-1:-1:-1;;;16483:12:1;;;;16448:15;;;;16058:1;16051:9;16022:483;;;-1:-1:-1;16522:6:1;;15671:863;-1:-1:-1;;;;;;;15671:863:1:o;16539:1094::-;;16792:2;16832;16821:9;16817:18;16862:2;16851:9;16844:21;16885:6;16920;16914:13;16951:6;16943;16936:22;16977:2;16967:12;;17010:2;16999:9;16995:18;16988:25;;17072:2;17062:6;17059:1;17055:14;17044:9;17040:30;17036:39;17110:2;17102:6;17098:15;17131:4;17144:460;17158:6;17155:1;17152:13;17144:460;;;17223:22;;;-1:-1:-1;;17219:36:1;17207:49;;17279:13;;17325:9;;17347:18;;;17392:47;17423:15;;;17325:9;17392:47;:::i;:::-;17482:11;;;17476:18;17459:15;;;17452:43;;;;17582:12;;;;17378:61;-1:-1:-1;17547:15:1;;;;17180:1;17173:9;17144:460;;;-1:-1:-1;17621:6:1;;16772:861;-1:-1:-1;;;;;;;;16772:861:1:o;17638:694::-;17851:2;17903:21;;;17973:13;;17876:18;;;17995:22;;;17638:694;;17851:2;18074:15;;;;18048:2;18033:18;;;17638:694;18120:186;18134:6;18131:1;18128:13;18120:186;;;18183:41;18220:3;18211:6;18205:13;10655:12;;10643:25;;10717:4;10706:16;;;10700:23;10684:14;;;10677:47;10773:4;10762:16;;;10756:23;10740:14;;10733:47;10633:153;18183:41;18281:15;;;;18253:4;18244:14;;;;;18156:1;18149:9;18120:186;;19839:244;;19996:2;19985:9;19978:21;20016:61;20073:2;20062:9;20058:18;20050:6;20042;20016:61;:::i;20088:364::-;;20273:2;20262:9;20255:21;20293:61;20350:2;20339:9;20335:18;20327:6;20319;20293:61;:::i;:::-;20285:69;;-1:-1:-1;;;;;20394:6:1;20390:55;20385:2;20374:9;20370:18;20363:83;20245:207;;;;;;:::o;20457:217::-;;20604:2;20593:9;20586:21;20624:44;20664:2;20653:9;20649:18;20641:6;20624:44;:::i;20679:288::-;;20854:2;20843:9;20836:21;20874:44;20914:2;20903:9;20899:18;20891:6;20874:44;:::i;:::-;20866:52;;20954:6;20949:2;20938:9;20934:18;20927:34;20826:141;;;;;:::o;25626:402::-;25828:2;25810:21;;;25867:2;25847:18;;;25840:30;25906:34;25901:2;25886:18;;25879:62;-1:-1:-1;;;25972:2:1;25957:18;;25950:36;26018:3;26003:19;;25800:228::o;30888:259::-;31080:3;31065:19;;31093:48;31069:9;31123:6;10176:5;10170:12;10165:3;10158:25;10232:4;10225:5;10221:16;10215:23;10208:4;10203:3;10199:14;10192:47;10288:4;10281:5;10277:16;10271:23;10264:4;10259:3;10255:14;10248:47;10344:4;10337:5;10333:16;10327:23;10320:4;10315:3;10311:14;10304:47;10400:4;10393:5;10389:16;10383:23;10376:4;10371:3;10367:14;10360:47;10456:4;10449:5;10445:16;10439:23;10432:4;10427:3;10423:14;10416:47;10512:4;10505:5;10501:16;10495:23;10488:4;10483:3;10479:14;10472:47;10568:4;10561:5;10557:16;10551:23;10544:4;10539:3;10535:14;10528:47;10148:433;;;31152:234;10655:12;;10643:25;;10717:4;10706:16;;;10700:23;10684:14;;;10677:47;10773:4;10762:16;;;10756:23;10740:14;;;10733:47;31328:2;31313:18;;31340:40;10633:153;31897:275;31968:2;31962:9;32033:2;32014:13;;-1:-1:-1;;32010:27:1;31998:40;;32068:18;32053:34;;32089:22;;;32050:62;32047:2;;;32115:18;;:::i;:::-;32151:2;32144:22;31942:230;;-1:-1:-1;31942:230:1:o;32177:128::-;;32248:1;32244:6;32241:1;32238:13;32235:2;;;32254:18;;:::i;:::-;-1:-1:-1;32290:9:1;;32225:80::o;32310:217::-;;32376:1;32366:2;;-1:-1:-1;;;32401:31:1;;32455:4;32452:1;32445:15;32483:4;32408:1;32473:15;32366:2;-1:-1:-1;32512:9:1;;32356:171::o;32532:168::-;;32638:1;32634;32630:6;32626:14;32623:1;32620:21;32615:1;32608:9;32601:17;32597:45;32594:2;;;32645:18;;:::i;:::-;-1:-1:-1;32685:9:1;;32584:116::o;32705:125::-;;32773:1;32770;32767:8;32764:2;;;32778:18;;:::i;:::-;-1:-1:-1;32815:9:1;;32754:76::o;32835:258::-;32907:1;32917:113;32931:6;32928:1;32925:13;32917:113;;;33007:11;;;33001:18;32988:11;;;32981:39;32953:2;32946:10;32917:113;;;33048:6;33045:1;33042:13;33039:2;;;33083:1;33074:6;33069:3;33065:16;33058:27;33039:2;;32888:205;;;:::o;33098:136::-;;33165:5;33155:2;;33174:18;;:::i;:::-;-1:-1:-1;;;33210:18:1;;33145:89::o;33239:135::-;;-1:-1:-1;;33299:17:1;;33296:2;;;33319:18;;:::i;:::-;-1:-1:-1;33366:1:1;33355:13;;33286:88::o;33379:127::-;33440:10;33435:3;33431:20;33428:1;33421:31;33471:4;33468:1;33461:15;33495:4;33492:1;33485:15;33511:127;33572:10;33567:3;33563:20;33560:1;33553:31;33603:4;33600:1;33593:15;33627:4;33624:1;33617:15;33643:154;-1:-1:-1;;;;;33722:5:1;33718:54;33711:5;33708:65;33698:2;;33787:1;33784;33777:12;33698:2;33688:109;:::o

Metadata Hash

387708a0ca95e450bf249883ff97776cde1a56644170f35af6cb2725c1713262
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading