Contract 0xcbedee9c29e92d61add691de46bc6d4f4bb070a7 5

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xacfaa6b32ba142d3fa78491f6cbfdac7641285461f6c551cf9b619e6828a9dcdSet Price Feed743023582023-03-27 18:19:50339 days 14 hrs ago0x11314c0b1bb3844eb43ff05d1e877d36cc1a134b IN  0xcbedee9c29e92d61add691de46bc6d4f4bb070a70 ETH0.00017974 0.1
0x410439d5408713a687e105429f555320efa7abe604cd8756e8e65f569a436b29Set Price Feed742279582023-03-27 13:12:06339 days 19 hrs ago0x11314c0b1bb3844eb43ff05d1e877d36cc1a134b IN  0xcbedee9c29e92d61add691de46bc6d4f4bb070a70 ETH0.000106 0.1
0xd431dc965d29c4af24116df811337c98683565186582148f8df155838843345bSet Direct Price403284742022-11-22 18:41:15464 days 13 hrs ago0x11314c0b1bb3844eb43ff05d1e877d36cc1a134b IN  0xcbedee9c29e92d61add691de46bc6d4f4bb070a70 ETH0.00010724 0.1
0xeec9e6fb84e16ec527f5ac1aa3c393c887b40c43ad84e5b426ee5beb9c38e00eSet Price Feed310159592022-10-19 13:39:04498 days 18 hrs ago0x11314c0b1bb3844eb43ff05d1e877d36cc1a134b IN  0xcbedee9c29e92d61add691de46bc6d4f4bb070a70 ETH0.00007577 0.1
0x4f49d1d2a759e1525d25e4a0f5fd2c4b8691a93de17d119c19c38e5c35abe008Set Price Feed310157012022-10-19 13:37:56498 days 18 hrs ago0x11314c0b1bb3844eb43ff05d1e877d36cc1a134b IN  0xcbedee9c29e92d61add691de46bc6d4f4bb070a70 ETH0.0000747 0.1
0x9f7e5d21a3d1339ee8f4260b0b357fcb3f78f4066c293972602d676990590370Initialize Owner...310119902022-10-19 13:22:10498 days 19 hrs ago0x24bd16b990f3a376712f4fce6c5fcb05a3db3745 IN  0xcbedee9c29e92d61add691de46bc6d4f4bb070a70 ETH0.0000582 0.1
0xd08568651abfa91bb0751c7e0fe9074020c5794ff9921af843647a2d8ad0f28d0x60806040310095412022-10-19 13:11:46498 days 19 hrs ago0x24bd16b990f3a376712f4fce6c5fcb05a3db3745 IN  Create: OkseCardPriceOracle0 ETH0.00111503 0.1
[ Download CSV Export 
Latest 23 internal transactions
Parent Txn Hash Block From To Value
0x387fce901652b7e71545cffa49421518813153a2e2c19741c3251dd9c2dc8e16404214912022-11-23 2:46:47464 days 5 hrs ago 0xcbedee9c29e92d61add691de46bc6d4f4bb070a7 0x4313dda7bc940f3f2b2dddacf568300165c878ca0 ETH
0x387fce901652b7e71545cffa49421518813153a2e2c19741c3251dd9c2dc8e16404214912022-11-23 2:46:47464 days 5 hrs ago 0xfa3e7d864cf426381af1a990fd2e19d56b03df33 0xcbedee9c29e92d61add691de46bc6d4f4bb070a70 ETH
0x387fce901652b7e71545cffa49421518813153a2e2c19741c3251dd9c2dc8e16404214912022-11-23 2:46:47464 days 5 hrs ago 0xcbedee9c29e92d61add691de46bc6d4f4bb070a7 Wrapped Ether0 ETH
0x387fce901652b7e71545cffa49421518813153a2e2c19741c3251dd9c2dc8e16404214912022-11-23 2:46:47464 days 5 hrs ago 0xcbedee9c29e92d61add691de46bc6d4f4bb070a7 0x639fe6ab55c921f74e7fac1ee960c0b6293ba6120 ETH
0x387fce901652b7e71545cffa49421518813153a2e2c19741c3251dd9c2dc8e16404214912022-11-23 2:46:47464 days 5 hrs ago 0x41f5391b474bfb3688aca4ea3e6bebd8abe7838c 0xcbedee9c29e92d61add691de46bc6d4f4bb070a70 ETH
0x387fce901652b7e71545cffa49421518813153a2e2c19741c3251dd9c2dc8e16404214912022-11-23 2:46:47464 days 5 hrs ago 0xcbedee9c29e92d61add691de46bc6d4f4bb070a7 Arbitrum: USDC Token0 ETH
0x387fce901652b7e71545cffa49421518813153a2e2c19741c3251dd9c2dc8e16404214912022-11-23 2:46:47464 days 5 hrs ago 0xcbedee9c29e92d61add691de46bc6d4f4bb070a7 0x50834f3163758fcc1df9973b6e91f0f0f0434ad30 ETH
0x387fce901652b7e71545cffa49421518813153a2e2c19741c3251dd9c2dc8e16404214912022-11-23 2:46:47464 days 5 hrs ago 0x41f5391b474bfb3688aca4ea3e6bebd8abe7838c 0xcbedee9c29e92d61add691de46bc6d4f4bb070a70 ETH
0x387fce901652b7e71545cffa49421518813153a2e2c19741c3251dd9c2dc8e16404214912022-11-23 2:46:47464 days 5 hrs ago 0xcbedee9c29e92d61add691de46bc6d4f4bb070a7 Wrapped Ether0 ETH
0x387fce901652b7e71545cffa49421518813153a2e2c19741c3251dd9c2dc8e16404214912022-11-23 2:46:47464 days 5 hrs ago 0xcbedee9c29e92d61add691de46bc6d4f4bb070a7 0x639fe6ab55c921f74e7fac1ee960c0b6293ba6120 ETH
0x387fce901652b7e71545cffa49421518813153a2e2c19741c3251dd9c2dc8e16404214912022-11-23 2:46:47464 days 5 hrs ago 0xfa3e7d864cf426381af1a990fd2e19d56b03df33 0xcbedee9c29e92d61add691de46bc6d4f4bb070a70 ETH
0xe86ff3770a1118c392a042ed8d595dad70d909fb39ea67b35808d5d1abfede98404208632022-11-23 2:43:23464 days 5 hrs ago 0xcbedee9c29e92d61add691de46bc6d4f4bb070a7 Wrapped Ether0 ETH
0xe86ff3770a1118c392a042ed8d595dad70d909fb39ea67b35808d5d1abfede98404208632022-11-23 2:43:23464 days 5 hrs ago 0xcbedee9c29e92d61add691de46bc6d4f4bb070a7 0x639fe6ab55c921f74e7fac1ee960c0b6293ba6120 ETH
0xe86ff3770a1118c392a042ed8d595dad70d909fb39ea67b35808d5d1abfede98404208632022-11-23 2:43:23464 days 5 hrs ago 0x41f5391b474bfb3688aca4ea3e6bebd8abe7838c 0xcbedee9c29e92d61add691de46bc6d4f4bb070a70 ETH
0xe86ff3770a1118c392a042ed8d595dad70d909fb39ea67b35808d5d1abfede98404208632022-11-23 2:43:23464 days 5 hrs ago 0xcbedee9c29e92d61add691de46bc6d4f4bb070a7 Arbitrum: USDC Token0 ETH
0xe86ff3770a1118c392a042ed8d595dad70d909fb39ea67b35808d5d1abfede98404208632022-11-23 2:43:23464 days 5 hrs ago 0xcbedee9c29e92d61add691de46bc6d4f4bb070a7 0x50834f3163758fcc1df9973b6e91f0f0f0434ad30 ETH
0xe86ff3770a1118c392a042ed8d595dad70d909fb39ea67b35808d5d1abfede98404208632022-11-23 2:43:23464 days 5 hrs ago 0x41f5391b474bfb3688aca4ea3e6bebd8abe7838c 0xcbedee9c29e92d61add691de46bc6d4f4bb070a70 ETH
0xe86ff3770a1118c392a042ed8d595dad70d909fb39ea67b35808d5d1abfede98404208632022-11-23 2:43:23464 days 5 hrs ago 0xcbedee9c29e92d61add691de46bc6d4f4bb070a7 Wrapped Ether0 ETH
0xe86ff3770a1118c392a042ed8d595dad70d909fb39ea67b35808d5d1abfede98404208632022-11-23 2:43:23464 days 5 hrs ago 0xcbedee9c29e92d61add691de46bc6d4f4bb070a7 0x639fe6ab55c921f74e7fac1ee960c0b6293ba6120 ETH
0xe86ff3770a1118c392a042ed8d595dad70d909fb39ea67b35808d5d1abfede98404208632022-11-23 2:43:23464 days 5 hrs ago 0xfa3e7d864cf426381af1a990fd2e19d56b03df33 0xcbedee9c29e92d61add691de46bc6d4f4bb070a70 ETH
0xd431dc965d29c4af24116df811337c98683565186582148f8df155838843345b403284742022-11-22 18:41:15464 days 13 hrs ago 0xcbedee9c29e92d61add691de46bc6d4f4bb070a70x00000000000000000000000000000000000000010 ETH
0xeec9e6fb84e16ec527f5ac1aa3c393c887b40c43ad84e5b426ee5beb9c38e00e310159592022-10-19 13:39:04498 days 18 hrs ago 0xcbedee9c29e92d61add691de46bc6d4f4bb070a70x00000000000000000000000000000000000000010 ETH
0x4f49d1d2a759e1525d25e4a0f5fd2c4b8691a93de17d119c19c38e5c35abe008310157012022-10-19 13:37:56498 days 18 hrs ago 0xcbedee9c29e92d61add691de46bc6d4f4bb070a70x00000000000000000000000000000000000000010 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OkseCardPriceOracle

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2022-10-19
*/

// Sources flattened with hardhat v2.9.6 https://hardhat.org

// File contracts/interfaces/ERC20Interface.sol

//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.7.0;

interface ERC20Interface {
  /**
   * @dev Returns the amount of tokens in existence.
   */
  function totalSupply() external view returns (uint256);

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view returns (uint8);

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view returns (string memory);

  /**
  * @dev Returns the token name.
  */
  function name() external view returns (string memory);

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

  /**
   * @dev Returns the amount of tokens owned by `account`.
   */
  function balanceOf(address account) external view returns (uint256);

  /**
   * @dev Moves `amount` tokens from the caller's account to `recipient`.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transfer(address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Returns the remaining number of tokens that `spender` will be
   * allowed to spend on behalf of `owner` through {transferFrom}. This is
   * zero by default.
   *
   * This value changes when {approve} or {transferFrom} are called.
   */
  function allowance(address _owner, address spender) external view returns (uint256);

  /**
   * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * IMPORTANT: Beware that changing an allowance with this method brings the risk
   * that someone may use both the old and the new allowance by unfortunate
   * transaction ordering. One possible solution to mitigate this race
   * condition is to first reduce the spender's allowance to 0 and set the
   * desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   *
   * Emits an {Approval} event.
   */
  function approve(address spender, uint256 amount) external returns (bool);

  /**
   * @dev Moves `amount` tokens from `sender` to `recipient` using the
   * allowance mechanism. `amount` is then deducted from the caller's
   * allowance.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Emitted when `value` tokens are moved from one account (`from`) to
   * another (`to`).
   *
   * Note that `value` may be zero.
   */
  event Transfer(address indexed from, address indexed to, uint256 value);

  /**
   * @dev Emitted when the allowance of a `spender` for an `owner` is set by
   * a call to {approve}. `value` is the new allowance.
   */
  event Approval(address indexed owner, address indexed spender, uint256 value);
}


// File contracts/libraries/SafeMath.sol

pragma solidity ^0.7.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
  /**
   * @dev Returns the addition of two unsigned integers, reverting on
   * overflow.
   *
   * Counterpart to Solidity's `+` operator.
   *
   * Requirements:
   * - Addition cannot overflow.
   */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    return add(a, b, "SafeMath: addition overflow");
  }

  /**
   * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
   * overflow (when the result is negative).
   *
   * Counterpart to Solidity's `-` operator.
   *
   * Requirements:
   * - Subtraction cannot overflow.
   */
  function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a, errorMessage);

    return c;
  }

  /**
   * @dev Returns the subtraction of two unsigned integers, reverting on
   * overflow (when the result is negative).
   *
   * Counterpart to Solidity's `-` operator.
   *
   * Requirements:
   * - Subtraction cannot overflow.
   */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    return sub(a, b, "SafeMath: subtraction overflow");
  }

  /**
   * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
   * overflow (when the result is negative).
   *
   * Counterpart to Solidity's `-` operator.
   *
   * Requirements:
   * - Subtraction cannot overflow.
   */
  function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    require(b <= a, errorMessage);
    uint256 c = a - b;

    return c;
  }

  /**
   * @dev Returns the multiplication of two unsigned integers, reverting on
   * overflow.
   *
   * Counterpart to Solidity's `*` operator.
   *
   * Requirements:
   * - Multiplication cannot overflow.
   */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
    if (a == 0) {
      return 0;
    }

    uint256 c = a * b;
    require(c / a == b, "SafeMath: multiplication overflow");

    return c;
  }

  /**
   * @dev Returns the integer division of two unsigned integers. Reverts on
   * division by zero. The result is rounded towards zero.
   *
   * Counterpart to Solidity's `/` operator. Note: this function uses a
   * `revert` opcode (which leaves remaining gas untouched) while Solidity
   * uses an invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    return div(a, b, "SafeMath: division by zero");
  }

  /**
   * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
   * division by zero. The result is rounded towards zero.
   *
   * Counterpart to Solidity's `/` operator. Note: this function uses a
   * `revert` opcode (which leaves remaining gas untouched) while Solidity
   * uses an invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    // Solidity only automatically asserts when dividing by 0
    require(b > 0, errorMessage);
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold

    return c;
  }

  /**
   * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
   * Reverts when dividing by zero.
   *
   * Counterpart to Solidity's `%` operator. This function uses a `revert`
   * opcode (which leaves remaining gas untouched) while Solidity uses an
   * invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    return mod(a, b, "SafeMath: modulo by zero");
  }

  /**
   * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
   * Reverts with custom message when dividing by zero.
   *
   * Counterpart to Solidity's `%` operator. This function uses a `revert`
   * opcode (which leaves remaining gas untouched) while Solidity uses an
   * invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    require(b != 0, errorMessage);
    return a % b;
  }
}


// File contracts/interfaces/PriceOracle.sol

pragma solidity ^0.7.0;

abstract contract PriceOracle {
    /// @notice Indicator that this is a PriceOracle contract (for inspection)
    bool public constant isPriceOracle = true;

    /**
      * @notice Get the underlying price of a cToken asset
      * @param market The cToken to get the underlying price of
      * @return The underlying asset price mantissa (scaled by 1e18).
      *  Zero means the price is unavailable.
      */
    function getUnderlyingPrice(address market) external virtual view returns (uint);

}


// File contracts/interfaces/AggregatorV3Interface.sol

pragma solidity ^0.7.0;

interface AggregatorV3Interface {

  function decimals() external view returns (uint8);
  function description() external view returns (string memory);
  function version() external view returns (uint256);

  // getRoundData and latestRoundData should both raise "No data present"
  // if they do not have data to report, instead of returning unset values
  // which could be misinterpreted as actual reported values.
  function getRoundData(uint80 _roundId)
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );
  function latestRoundData()
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );

}


// File contracts/MultiSigOwner.sol

pragma solidity ^0.7.0;
pragma abicoder v2;

// 2/3 Multi Sig Owner
contract MultiSigOwner {
    address[] public owners;
    mapping(uint256 => bool) public signatureId;
    bool private initialized;
    // events
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );
    event SignValidTimeChanged(uint256 newValue);
    modifier validSignOfOwner(
        bytes calldata signData,
        bytes calldata keys,
        string memory functionName
    ) {
        require(isOwner(msg.sender), "on");
        address signer = getSigner(signData, keys);
        require(
            signer != msg.sender && isOwner(signer) && signer != address(0),
            "is"
        );
        (bytes4 method, uint256 id, uint256 validTime, ) = abi.decode(
            signData,
            (bytes4, uint256, uint256, bytes)
        );
        require(
            signatureId[id] == false &&
                method == bytes4(keccak256(bytes(functionName))),
            "sru"
        );
        require(validTime > block.timestamp, "ep");
        signatureId[id] = true;
        _;
    }

    function isOwner(address addr) public view returns (bool) {
        bool _isOwner = false;
        for (uint256 i = 0; i < owners.length; i++) {
            if (owners[i] == addr) {
                _isOwner = true;
            }
        }
        return _isOwner;
    }

    constructor() {}

    function initializeOwners(address[3] memory _owners) public {
        require(
            !initialized &&
                _owners[0] != address(0) &&
                _owners[1] != address(0) &&
                _owners[2] != address(0),
            "ai"
        );
        owners = [_owners[0], _owners[1], _owners[2]];
        initialized = true;
    }

    function getSigner(bytes calldata _data, bytes calldata keys)
        public
        view
        returns (address)
    {
        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        (uint8 v, bytes32 r, bytes32 s) = abi.decode(
            keys,
            (uint8, bytes32, bytes32)
        );
        return
            ecrecover(
                toEthSignedMessageHash(
                    keccak256(abi.encodePacked(this, chainId, _data))
                ),
                v,
                r,
                s
            );
    }

    function encodePackedData(bytes calldata _data)
        public
        view
        returns (bytes32)
    {
        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        return keccak256(abi.encodePacked(this, chainId, _data));
    }

    function toEthSignedMessageHash(bytes32 hash)
        internal
        pure
        returns (bytes32)
    {
        return
            keccak256(
                abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)
            );
    }

    // Set functions
    // verified
    function transferOwnership(bytes calldata signData, bytes calldata keys)
        public
        validSignOfOwner(signData, keys, "transferOwnership")
    {
        (, , , bytes memory params) = abi.decode(
            signData,
            (bytes4, uint256, uint256, bytes)
        );
        address newOwner = abi.decode(params, (address));
        uint256 index;
        for (uint256 i = 0; i < owners.length; i++) {
            if (owners[i] == msg.sender) {
                index = i;
            }
        }
        address oldOwner = owners[index];
        owners[index] = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// File contracts/OkseCardPriceOracle.sol

pragma solidity ^0.7.0;
pragma experimental ABIEncoderV2;
contract OkseCardPriceOracle is PriceOracle, MultiSigOwner {
    using SafeMath for uint256;

    mapping(address => uint256) prices;
    event PricePosted(
        address asset,
        uint256 previousPriceMantissa,
        uint256 requestedPriceMantissa,
        uint256 newPriceMantissa
    );

    mapping(address => address) priceFeeds;
    event PriceFeedChanged(
        address asset,
        address previousPriceFeed,
        address newPriceFeed
    );

    constructor() {
        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        //////bsc///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        if (chainId == 56) {
            priceFeeds[
                0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c
            ] = 0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE; // BNB/USD
            priceFeeds[
                0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d
            ] = 0x51597f405303C4377E36123cBc172b13269EA163; // USDC/USD
            priceFeeds[
                0x55d398326f99059fF775485246999027B3197955
            ] = 0xB97Ad0E74fa7d920791E90258A6E2085088b4320; // USDT/USD
            priceFeeds[
                0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56
            ] = 0xcBb98864Ef56E9042e7d2efef76141f15731B82f; // BUSD/USD
            priceFeeds[
                0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c
            ] = 0x264990fbd0A4796A3E3d8E37C4d5F87a3aCa5Ebf; // WBTC/USD
            priceFeeds[
                0x2170Ed0880ac9A755fd29B2688956BD959F933F8
            ] = 0x9ef1B8c0E4F7dc8bF5719Ea496883DC6401d5b2e; // ETH/USD
        }
        //// matic //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        if (chainId == 137) {
            priceFeeds[
                0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270
            ] = 0xAB594600376Ec9fD91F8e885dADF0CE036862dE0; // MATIC/USD
            priceFeeds[
                0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174
            ] = 0xfE4A8cc5b5B2366C1B58Bea3858e81843581b2F7; // USDC/USD
            priceFeeds[
                0xc2132D05D31c914a87C6611C10748AEb04B58e8F
            ] = 0x0A6513e40db6EB1b165753AD52E80663aeA50545; // USDT/USD
            priceFeeds[
                0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6
            ] = 0xDE31F8bFBD8c84b5360CFACCa3539B938dd78ae6; // WBTC/USD
            priceFeeds[
                0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619
            ] = 0xF9680D99D6C9589e2a93a78A04A279e509205945; // ETH/USD
            priceFeeds[
                0x0b3F868E0BE5597D5DB7fEB59E1CADBb0fdDa50a
            ] = 0x49B0c695039243BBfEb8EcD054EB70061fd54aa0; // SUSHI/USD
            priceFeeds[
                0xa3Fa99A148fA48D14Ed51d610c367C61876997F1
            ] = 0xd8d483d813547CfB624b8Dc33a00F2fcbCd2D428; // MIMATIC/USD
        }
        //// fantom //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        if (chainId == 250) {
            priceFeeds[
                0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83
            ] = 0xf4766552D15AE4d256Ad41B6cf2933482B0680dc; // FTM/USD
            priceFeeds[
                0x04068DA6C83AFCFA0e13ba15A6696662335D5B75
            ] = 0x2553f4eeb82d5A26427b8d1106C51499CBa5D99c; // USDC/USD
            priceFeeds[
                0x049d68029688eAbF473097a2fC38ef61633A3C7A
            ] = 0xF64b636c5dFe1d3555A847341cDC449f612307d0; // fUSDT/USD
            priceFeeds[
                0x321162Cd933E2Be498Cd2267a90534A804051b11
            ] = 0x8e94C22142F4A64b99022ccDd994f4e9EC86E4B4; // WBTC/USD
            priceFeeds[
                0x74b23882a30290451A17c44f4F05243b6b58C76d
            ] = 0x11DdD3d147E5b83D01cee7070027092397d63658; // WETH/USD
            priceFeeds[
                0xae75A438b2E0cB8Bb01Ec1E1e376De11D44477CC
            ] = 0xCcc059a1a17577676c8673952Dc02070D29e5a66; // SUSHI/USD
        }
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    }

    //return usd price of asset , decimal is 8
    function getUnderlyingPrice(address market)
        public
        view
        override
        returns (uint256)
    {
        uint80 roundID;
        int256 price;
        uint256 startedAt;
        uint256 timeStamp;
        uint80 answeredInRound;

        uint256 resultPrice;

        if (prices[market] != 0) {
            resultPrice = prices[market];
        } else {
            if (priceFeeds[market] != address(0)) {
                (
                    roundID,
                    price,
                    startedAt,
                    timeStamp,
                    answeredInRound
                ) = AggregatorV3Interface(priceFeeds[market]).latestRoundData();
            } else {
                price = 0;
            }
            resultPrice = uint256(price);
        }
        uint256 defaultDecimal = 18;
        ERC20Interface token = ERC20Interface(market);
        uint256 tokenDecimal = uint256(token.decimals());
        if (defaultDecimal == tokenDecimal) {
            return resultPrice;
        } else if (defaultDecimal > tokenDecimal) {
            return resultPrice.mul(10**(defaultDecimal.sub(tokenDecimal)));
        } else {
            return resultPrice.div(10**(tokenDecimal.sub(defaultDecimal)));
        }
    }

    function assetPrices(address asset) external view returns (uint256) {
        return prices[asset];
    }

    function setDirectPrice(bytes calldata signData, bytes calldata keys)
        external
        validSignOfOwner(signData, keys, "setDirectPrice")
    {
        (, , , bytes memory params) = abi.decode(
            signData,
            (bytes4, uint256, uint256, bytes)
        );
        (address asset, uint256 price) = abi.decode(params, (address, uint256));
        setDirectPriceInternal(asset, price);
    }

    function setBatchDirectPrice(bytes calldata signData, bytes calldata keys)
        external
        validSignOfOwner(signData, keys, "setBatchDirectPrice")
    {
        (, , , bytes memory params) = abi.decode(
            signData,
            (bytes4, uint256, uint256, bytes)
        );
        (address[] memory _assets, uint256[] memory _prices) = abi.decode(
            params,
            (address[], uint256[])
        );
        require(_assets.length == _prices.length, "le");
        for (uint256 i = 0; i < _assets.length; i++) {
            setDirectPriceInternal(_assets[i], _prices[i]);
        }
    }

    function setDirectPriceInternal(address asset, uint256 price) internal {
        emit PricePosted(asset, prices[asset], price, price);
        prices[asset] = price;
    }

    function setPriceFeed(bytes calldata signData, bytes calldata keys)
        external
        validSignOfOwner(signData, keys, "setPriceFeed")
    {
        (, , , bytes memory params) = abi.decode(
            signData,
            (bytes4, uint256, uint256, bytes)
        );
        (address asset, address priceFeed) = abi.decode(
            params,
            (address, address)
        );
        emit PriceFeedChanged(asset, priceFeeds[asset], priceFeed);
        priceFeeds[asset] = priceFeed;
    }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"address","name":"previousPriceFeed","type":"address"},{"indexed":false,"internalType":"address","name":"newPriceFeed","type":"address"}],"name":"PriceFeedChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousPriceMantissa","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requestedPriceMantissa","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPriceMantissa","type":"uint256"}],"name":"PricePosted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"SignValidTimeChanged","type":"event"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"assetPrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"encodePackedData","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"getSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"market","type":"address"}],"name":"getUnderlyingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[3]","name":"_owners","type":"address[3]"}],"name":"initializeOwners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPriceOracle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"setBatchDirectPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"setDirectPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"setPriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"signatureId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b504660388114156101b35760046020527f1acf883629f7ed31fc27a2a0d2390e0929c545d19e7d64611602179e5f371fc380546001600160a01b0319908116730567f2323251f0aab15c8dfb1967e4e8a7d42aee179091557fe7531ef9abb867ffffe9c0dc73f8bc2e15cf41f7bf2ce99fbae639d4d5c15951805482167351597f405303c4377e36123cbc172b13269ea1631790557f7ef95397d98fffb4a12a466d73a89d3cf49fa95ff4ba0aa1db6aaf272b7982158054821673b97ad0e74fa7d920791e90258a6e2085088b43201790557fa385b31964328f61c2cdab127c54249f573b192161d52b1f3d552db32224bd428054821673cbb98864ef56e9042e7d2efef76141f15731b82f1790557f020d60ee64c79b1375e5b7d880a4827df313abb64d06701957dd261da203f45e8054821673264990fbd0a4796a3e3d8e37c4d5f87a3aca5ebf179055732170ed0880ac9a755fd29b2688956bd959f933f86000527fc6506420c2e525e11abab334c5da9ffdfef09d269838135bdaff4ded0cbdcfbe8054909116739ef1b8c0e4f7dc8bf5719ea496883dc6401d5b2e1790555b80608914156103915760046020527f3e73a25e817bd097e8eaf0ac0076d088e058dae47a20d23b0f0cc945791a958880546001600160a01b031990811673ab594600376ec9fd91f8e885dadf0ce036862de0179091557f3d6c902089d5053230afb20d03add215c708a8333f93f9395a50fea0c3493a618054821673fe4a8cc5b5b2366c1b58bea3858e81843581b2f71790557fb19cf2e52982b41c5e63c8d2b213089d6b958993eb55c34ad5b9543558dda2fa80548216730a6513e40db6eb1b165753ad52e80663aea505451790557f4655629ab7fde6a4c7d505e4f879f599cb39edaf37d2017a04c0c67e011b69f98054821673de31f8bfbd8c84b5360cfacca3539b938dd78ae61790557f69bc9a80c51a557b6c5a4b7c71ffdcd97cc91b2bda5dc1b0da50dd9e6ab212398054821673f9680d99d6c9589e2a93a78a04a279e5092059451790557f8f67c9166672753481b743e70d49ed1e0464ddaeb739a5cd718076f135074cc6805482167349b0c695039243bbfeb8ecd054eb70061fd54aa017905573a3fa99a148fa48d14ed51d610c367c61876997f16000527f20e02f917f07e17fb180b6093b6423142e105bf752801ba208c36be43824768b805490911673d8d483d813547cfb624b8dc33a00f2fcbcd2d4281790555b8060fa14156105325760046020527f0b9faaabb35afcb5b88fd7f020fd7dfd8a958e160264ae061d1e9bb4e5d6675180546001600160a01b031990811673f4766552d15ae4d256ad41b6cf2933482b0680dc179091557f3b7092b3eb898e18f44882f95a8634f1ba4b032c0d87f900d85e0f87543b6bd980548216732553f4eeb82d5a26427b8d1106c51499cba5d99c1790557f637dbce3a8159991551711c7adbf6bfe1abbe71372e794a5ba29e20a3ea920c28054821673f64b636c5dfe1d3555a847341cdc449f612307d01790557f0369097c5e974ef9a3fc85f421fd301a694a7c2e04ac79523a86359c300542ad80548216738e94c22142f4a64b99022ccdd994f4e9ec86e4b41790557f581cbbe5fc00e4850b1816bf3ebe10fc9d4faf709e3aeb25b014f03aea5ecd6c805482167311ddd3d147e5b83d01cee7070027092397d6365817905573ae75a438b2e0cb8bb01ec1e1e376de11d44477cc6000527f47b0a9bccdd4e05f323849d9b69a2807df6d3d074c44cc985561ddaac7fce297805490911673ccc059a1a17577676c8673952dc02070d29e5a661790555b506117fa806105426000396000f3fe608060405234801561001057600080fd5b50600436106100bf5760003560e01c806368af81e61161007c57806368af81e61461015d5780636f9e4f0b1461017057806371340e471461018357806375e16b1714610196578063b2b9f0ed146101a9578063d1f21f4f146101bc578063fc57d4df146101cf576100bf565b8063025e7c27146100c45780632f54bf6e146100ed57806333a80e7f1461010d5780635e9a523c14610122578063656503ca1461014257806366331bba14610155575b600080fd5b6100d76100d2366004611476565b6101e2565b6040516100e49190611591565b60405180910390f35b6101006100fb366004611132565b61020c565b6040516100e491906115ee565b61012061011b36600461140e565b610263565b005b610135610130366004611132565b610478565b6040516100e491906115f9565b61012061015036600461140e565b610493565b610100610628565b61013561016b3660046113cf565b61062d565b61012061017e3660046111d0565b610669565b61012061019136600461140e565b610721565b6100d76101a436600461140e565b610917565b6101006101b7366004611476565b6109c0565b6101206101ca36600461140e565b6109d5565b6101356101dd366004611132565b610c34565b600081815481106101f257600080fd5b6000918252602090912001546001600160a01b0316905081565b600080805b60005481101561025a57836001600160a01b03166000828154811061023257fe5b6000918252602090912001546001600160a01b0316141561025257600191505b600101610211565b5090505b919050565b838383836040518060400160405280600c81526020016b1cd95d141c9a58d95199595960a21b8152506102953361020c565b6102ba5760405162461bcd60e51b81526004016102b19061168f565b60405180910390fd5b60006102c886868686610917565b90506001600160a01b03811633148015906102e757506102e78161020c565b80156102fb57506001600160a01b03811615155b6103175760405162461bcd60e51b81526004016102b1906116c7565b60008080610327888a018a611317565b50600082815260016020526040902054929550909350915060ff161580156103615750845160208601206001600160e01b03198481169116145b61037d5760405162461bcd60e51b81526004016102b190611740565b42811161039c5760405162461bcd60e51b81526004016102b1906116ab565b60008281526001602081905260408220805460ff191690911790556103c38d8f018f611317565b9350505050600080828060200190518101906103df919061116a565b6001600160a01b03808316600090815260046020526040908190205490519395509193507fe1fa38e9855b53a19aafc2f021c7981bc99455513b8684a8ec1f5233e7c123d892610434928692169085906115a5565b60405180910390a16001600160a01b03918216600090815260046020526040902080546001600160a01b031916919092161790555050505050505050505050505050565b6001600160a01b031660009081526003602052604090205490565b838383836040518060400160405280600e81526020016d736574446972656374507269636560901b8152506104c73361020c565b6104e35760405162461bcd60e51b81526004016102b19061168f565b60006104f186868686610917565b90506001600160a01b038116331480159061051057506105108161020c565b801561052457506001600160a01b03811615155b6105405760405162461bcd60e51b81526004016102b1906116c7565b60008080610550888a018a611317565b50600082815260016020526040902054929550909350915060ff1615801561058a5750845160208601206001600160e01b03198481169116145b6105a65760405162461bcd60e51b81526004016102b190611740565b4281116105c55760405162461bcd60e51b81526004016102b1906116ab565b60008281526001602081905260408220805460ff191690911790556105ec8d8f018f611317565b93505050506000808280602001905181019061060891906111a3565b915091506106168282610e21565b50505050505050505050505050505050565b600181565b604051600090469061064990309083908790879060200161152d565b604051602081830303815290604052805190602001209150505b92915050565b60025460ff16158015610685575080516001600160a01b031615155b801561069d575060208101516001600160a01b031615155b80156106b5575060408101516001600160a01b031615155b6106d15760405162461bcd60e51b81526004016102b190611724565b6040805160608101825282516001600160a01b039081168252602080850151821690830152838301511691810191909152610710906000906003610fec565b50506002805460ff19166001179055565b83838383604051806040016040528060138152602001727365744261746368446972656374507269636560681b81525061075a3361020c565b6107765760405162461bcd60e51b81526004016102b19061168f565b600061078486868686610917565b90506001600160a01b03811633148015906107a357506107a38161020c565b80156107b757506001600160a01b03811615155b6107d35760405162461bcd60e51b81526004016102b1906116c7565b600080806107e3888a018a611317565b50600082815260016020526040902054929550909350915060ff1615801561081d5750845160208601206001600160e01b03198481169116145b6108395760405162461bcd60e51b81526004016102b190611740565b4281116108585760405162461bcd60e51b81526004016102b1906116ab565b60008281526001602081905260408220805460ff1916909117905561087f8d8f018f611317565b93505050506000808280602001905181019061089b9190611255565b9150915080518251146108c05760405162461bcd60e51b81526004016102b190611673565b60005b8251811015610904576108fc8382815181106108db57fe5b60200260200101518383815181106108ef57fe5b6020026020010151610e21565b6001016108c3565b5050505050505050505050505050505050565b600046818080610929868801886114f9565b925092509250600161096630868c8c60405160200161094b949392919061152d565b60405160208183030381529060405280519060200120610e94565b848484604051600081526020016040526040516109869493929190611602565b6020604051602081039080840390855afa1580156109a8573d6000803e3d6000fd5b5050604051601f1901519a9950505050505050505050565b60016020526000908152604090205460ff1681565b838383836040518060400160405280601181526020017007472616e736665724f776e65727368697607c1b815250610a0c3361020c565b610a285760405162461bcd60e51b81526004016102b19061168f565b6000610a3686868686610917565b90506001600160a01b0381163314801590610a555750610a558161020c565b8015610a6957506001600160a01b03811615155b610a855760405162461bcd60e51b81526004016102b1906116c7565b60008080610a95888a018a611317565b50600082815260016020526040902054929550909350915060ff16158015610acf5750845160208601206001600160e01b03198481169116145b610aeb5760405162461bcd60e51b81526004016102b190611740565b428111610b0a5760405162461bcd60e51b81526004016102b1906116ab565b60008281526001602081905260408220805460ff19169091179055610b318d8f018f611317565b9350505050600081806020019051810190610b4c919061114e565b90506000805b600054811015610b9a57336001600160a01b031660008281548110610b7357fe5b6000918252602090912001546001600160a01b03161415610b92578091505b600101610b52565b506000808281548110610ba957fe5b600091825260208220015481546001600160a01b03909116925084919084908110610bd057fe5b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051858316928416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050505050505050505050505050505050565b6001600160a01b03811660009081526003602052604081205481908190819081908190819015610c7d57506001600160a01b038716600090815260036020526040902054610d3f565b6001600160a01b038881166000908152600460205260409020541615610d37576001600160a01b03808916600090815260046020819052604091829020548251633fabe5a360e21b8152925193169263feaf968c928083019260a09291829003018186803b158015610cee57600080fd5b505afa158015610d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d26919061148e565b939950919750955093509150610d3c565b600094505b50835b60006012905060008990506000816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8557600080fd5b505afa158015610d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbd91906114dd565b60ff16905080831415610ddb5783995050505050505050505061025e565b80831115610e0a57610dfa610df08483610ec4565b8590600a0a610f0d565b995050505050505050505061025e565b610dfa610e178285610ec4565b8590600a0a610f47565b6001600160a01b038216600090815260036020526040908190205490517fdd71a1d19fcba687442a1d5c58578f1e409af71a79d10fd95a4d66efd8fa9ae791610e7091859190859081906115c8565b60405180910390a16001600160a01b03909116600090815260036020526040902055565b600081604051602001610ea79190611560565b604051602081830303815290604052805190602001209050919050565b6000610f0683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f89565b9392505050565b600082610f1c57506000610663565b82820282848281610f2957fe5b0414610f065760405162461bcd60e51b81526004016102b1906116e3565b6000610f0683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610fb5565b60008184841115610fad5760405162461bcd60e51b81526004016102b19190611620565b505050900390565b60008183610fd65760405162461bcd60e51b81526004016102b19190611620565b506000838581610fe257fe5b0495945050505050565b828054828255906000526020600020908101928215611041579160200282015b8281111561104157825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061100c565b5061104d929150611051565b5090565b5b8082111561104d5760008155600101611052565b600082601f830112611076578081fd5b8151602061108b61108683611780565b61175d565b82815281810190858301838502870184018810156110a7578586fd5b855b858110156110c5578151845292840192908401906001016110a9565b5090979650505050505050565b60008083601f8401126110e3578182fd5b5081356001600160401b038111156110f9578182fd5b60208301915083602082850101111561111157600080fd5b9250929050565b805169ffffffffffffffffffff8116811461025e57600080fd5b600060208284031215611143578081fd5b8135610f068161179d565b60006020828403121561115f578081fd5b8151610f068161179d565b6000806040838503121561117c578081fd5b82516111878161179d565b60208401519092506111988161179d565b809150509250929050565b600080604083850312156111b5578182fd5b82516111c08161179d565b6020939093015192949293505050565b6000606082840312156111e1578081fd5b82601f8301126111ef578081fd5b604051606081018181106001600160401b038211171561120b57fe5b60405280836060810186101561121f578384fd5b835b600381101561124a5781356112358161179d565b83526020928301929190910190600101611221565b509195945050505050565b60008060408385031215611267578182fd5b82516001600160401b038082111561127d578384fd5b818501915085601f830112611290578384fd5b815160206112a061108683611780565b82815281810190858301838502870184018b10156112bc578889fd5b8896505b848710156112e75780516112d38161179d565b8352600196909601959183019183016112c0565b5091880151919650909350505080821115611300578283fd5b5061130d85828601611066565b9150509250929050565b6000806000806080858703121561132c578182fd5b84356001600160e01b031981168114611343578283fd5b935060208581013593506040860135925060608601356001600160401b038082111561136d578384fd5b818801915088601f830112611380578384fd5b81358181111561138c57fe5b61139e601f8201601f1916850161175d565b915080825289848285010111156113b3578485fd5b8084840185840137810190920192909252939692955090935050565b600080602083850312156113e1578182fd5b82356001600160401b038111156113f6578283fd5b611402858286016110d2565b90969095509350505050565b60008060008060408587031215611423578182fd5b84356001600160401b0380821115611439578384fd5b611445888389016110d2565b9096509450602087013591508082111561145d578384fd5b5061146a878288016110d2565b95989497509550505050565b600060208284031215611487578081fd5b5035919050565b600080600080600060a086880312156114a5578283fd5b6114ae86611118565b94506020860151935060408601519250606086015191506114d160808701611118565b90509295509295909350565b6000602082840312156114ee578081fd5b8151610f06816117b5565b60008060006060848603121561150d578081fd5b8335611518816117b5565b95602085013595506040909401359392505050565b60006bffffffffffffffffffffffff198660601b1682528460148301528284603484013791016034019081529392505050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b901515815260200190565b90815260200190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b8181101561164c57858101830151858201604001528201611630565b8181111561165d5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600290820152616c6560f01b604082015260600190565b60208082526002908201526137b760f11b604082015260600190565b602080825260029082015261065760f41b604082015260600190565b602080825260029082015261697360f01b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b602080825260029082015261616960f01b604082015260600190565b60208082526003908201526273727560e81b604082015260600190565b6040518181016001600160401b038111828210171561177857fe5b604052919050565b60006001600160401b0382111561179357fe5b5060209081020190565b6001600160a01b03811681146117b257600080fd5b50565b60ff811681146117b257600080fdfea2646970667358221220c3f668a455fc3a249371830b2efa8f8063ca9d6752e38a50802f94634dfcd5c364736f6c63430007060033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100bf5760003560e01c806368af81e61161007c57806368af81e61461015d5780636f9e4f0b1461017057806371340e471461018357806375e16b1714610196578063b2b9f0ed146101a9578063d1f21f4f146101bc578063fc57d4df146101cf576100bf565b8063025e7c27146100c45780632f54bf6e146100ed57806333a80e7f1461010d5780635e9a523c14610122578063656503ca1461014257806366331bba14610155575b600080fd5b6100d76100d2366004611476565b6101e2565b6040516100e49190611591565b60405180910390f35b6101006100fb366004611132565b61020c565b6040516100e491906115ee565b61012061011b36600461140e565b610263565b005b610135610130366004611132565b610478565b6040516100e491906115f9565b61012061015036600461140e565b610493565b610100610628565b61013561016b3660046113cf565b61062d565b61012061017e3660046111d0565b610669565b61012061019136600461140e565b610721565b6100d76101a436600461140e565b610917565b6101006101b7366004611476565b6109c0565b6101206101ca36600461140e565b6109d5565b6101356101dd366004611132565b610c34565b600081815481106101f257600080fd5b6000918252602090912001546001600160a01b0316905081565b600080805b60005481101561025a57836001600160a01b03166000828154811061023257fe5b6000918252602090912001546001600160a01b0316141561025257600191505b600101610211565b5090505b919050565b838383836040518060400160405280600c81526020016b1cd95d141c9a58d95199595960a21b8152506102953361020c565b6102ba5760405162461bcd60e51b81526004016102b19061168f565b60405180910390fd5b60006102c886868686610917565b90506001600160a01b03811633148015906102e757506102e78161020c565b80156102fb57506001600160a01b03811615155b6103175760405162461bcd60e51b81526004016102b1906116c7565b60008080610327888a018a611317565b50600082815260016020526040902054929550909350915060ff161580156103615750845160208601206001600160e01b03198481169116145b61037d5760405162461bcd60e51b81526004016102b190611740565b42811161039c5760405162461bcd60e51b81526004016102b1906116ab565b60008281526001602081905260408220805460ff191690911790556103c38d8f018f611317565b9350505050600080828060200190518101906103df919061116a565b6001600160a01b03808316600090815260046020526040908190205490519395509193507fe1fa38e9855b53a19aafc2f021c7981bc99455513b8684a8ec1f5233e7c123d892610434928692169085906115a5565b60405180910390a16001600160a01b03918216600090815260046020526040902080546001600160a01b031916919092161790555050505050505050505050505050565b6001600160a01b031660009081526003602052604090205490565b838383836040518060400160405280600e81526020016d736574446972656374507269636560901b8152506104c73361020c565b6104e35760405162461bcd60e51b81526004016102b19061168f565b60006104f186868686610917565b90506001600160a01b038116331480159061051057506105108161020c565b801561052457506001600160a01b03811615155b6105405760405162461bcd60e51b81526004016102b1906116c7565b60008080610550888a018a611317565b50600082815260016020526040902054929550909350915060ff1615801561058a5750845160208601206001600160e01b03198481169116145b6105a65760405162461bcd60e51b81526004016102b190611740565b4281116105c55760405162461bcd60e51b81526004016102b1906116ab565b60008281526001602081905260408220805460ff191690911790556105ec8d8f018f611317565b93505050506000808280602001905181019061060891906111a3565b915091506106168282610e21565b50505050505050505050505050505050565b600181565b604051600090469061064990309083908790879060200161152d565b604051602081830303815290604052805190602001209150505b92915050565b60025460ff16158015610685575080516001600160a01b031615155b801561069d575060208101516001600160a01b031615155b80156106b5575060408101516001600160a01b031615155b6106d15760405162461bcd60e51b81526004016102b190611724565b6040805160608101825282516001600160a01b039081168252602080850151821690830152838301511691810191909152610710906000906003610fec565b50506002805460ff19166001179055565b83838383604051806040016040528060138152602001727365744261746368446972656374507269636560681b81525061075a3361020c565b6107765760405162461bcd60e51b81526004016102b19061168f565b600061078486868686610917565b90506001600160a01b03811633148015906107a357506107a38161020c565b80156107b757506001600160a01b03811615155b6107d35760405162461bcd60e51b81526004016102b1906116c7565b600080806107e3888a018a611317565b50600082815260016020526040902054929550909350915060ff1615801561081d5750845160208601206001600160e01b03198481169116145b6108395760405162461bcd60e51b81526004016102b190611740565b4281116108585760405162461bcd60e51b81526004016102b1906116ab565b60008281526001602081905260408220805460ff1916909117905561087f8d8f018f611317565b93505050506000808280602001905181019061089b9190611255565b9150915080518251146108c05760405162461bcd60e51b81526004016102b190611673565b60005b8251811015610904576108fc8382815181106108db57fe5b60200260200101518383815181106108ef57fe5b6020026020010151610e21565b6001016108c3565b5050505050505050505050505050505050565b600046818080610929868801886114f9565b925092509250600161096630868c8c60405160200161094b949392919061152d565b60405160208183030381529060405280519060200120610e94565b848484604051600081526020016040526040516109869493929190611602565b6020604051602081039080840390855afa1580156109a8573d6000803e3d6000fd5b5050604051601f1901519a9950505050505050505050565b60016020526000908152604090205460ff1681565b838383836040518060400160405280601181526020017007472616e736665724f776e65727368697607c1b815250610a0c3361020c565b610a285760405162461bcd60e51b81526004016102b19061168f565b6000610a3686868686610917565b90506001600160a01b0381163314801590610a555750610a558161020c565b8015610a6957506001600160a01b03811615155b610a855760405162461bcd60e51b81526004016102b1906116c7565b60008080610a95888a018a611317565b50600082815260016020526040902054929550909350915060ff16158015610acf5750845160208601206001600160e01b03198481169116145b610aeb5760405162461bcd60e51b81526004016102b190611740565b428111610b0a5760405162461bcd60e51b81526004016102b1906116ab565b60008281526001602081905260408220805460ff19169091179055610b318d8f018f611317565b9350505050600081806020019051810190610b4c919061114e565b90506000805b600054811015610b9a57336001600160a01b031660008281548110610b7357fe5b6000918252602090912001546001600160a01b03161415610b92578091505b600101610b52565b506000808281548110610ba957fe5b600091825260208220015481546001600160a01b03909116925084919084908110610bd057fe5b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051858316928416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050505050505050505050505050505050565b6001600160a01b03811660009081526003602052604081205481908190819081908190819015610c7d57506001600160a01b038716600090815260036020526040902054610d3f565b6001600160a01b038881166000908152600460205260409020541615610d37576001600160a01b03808916600090815260046020819052604091829020548251633fabe5a360e21b8152925193169263feaf968c928083019260a09291829003018186803b158015610cee57600080fd5b505afa158015610d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d26919061148e565b939950919750955093509150610d3c565b600094505b50835b60006012905060008990506000816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8557600080fd5b505afa158015610d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbd91906114dd565b60ff16905080831415610ddb5783995050505050505050505061025e565b80831115610e0a57610dfa610df08483610ec4565b8590600a0a610f0d565b995050505050505050505061025e565b610dfa610e178285610ec4565b8590600a0a610f47565b6001600160a01b038216600090815260036020526040908190205490517fdd71a1d19fcba687442a1d5c58578f1e409af71a79d10fd95a4d66efd8fa9ae791610e7091859190859081906115c8565b60405180910390a16001600160a01b03909116600090815260036020526040902055565b600081604051602001610ea79190611560565b604051602081830303815290604052805190602001209050919050565b6000610f0683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f89565b9392505050565b600082610f1c57506000610663565b82820282848281610f2957fe5b0414610f065760405162461bcd60e51b81526004016102b1906116e3565b6000610f0683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610fb5565b60008184841115610fad5760405162461bcd60e51b81526004016102b19190611620565b505050900390565b60008183610fd65760405162461bcd60e51b81526004016102b19190611620565b506000838581610fe257fe5b0495945050505050565b828054828255906000526020600020908101928215611041579160200282015b8281111561104157825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061100c565b5061104d929150611051565b5090565b5b8082111561104d5760008155600101611052565b600082601f830112611076578081fd5b8151602061108b61108683611780565b61175d565b82815281810190858301838502870184018810156110a7578586fd5b855b858110156110c5578151845292840192908401906001016110a9565b5090979650505050505050565b60008083601f8401126110e3578182fd5b5081356001600160401b038111156110f9578182fd5b60208301915083602082850101111561111157600080fd5b9250929050565b805169ffffffffffffffffffff8116811461025e57600080fd5b600060208284031215611143578081fd5b8135610f068161179d565b60006020828403121561115f578081fd5b8151610f068161179d565b6000806040838503121561117c578081fd5b82516111878161179d565b60208401519092506111988161179d565b809150509250929050565b600080604083850312156111b5578182fd5b82516111c08161179d565b6020939093015192949293505050565b6000606082840312156111e1578081fd5b82601f8301126111ef578081fd5b604051606081018181106001600160401b038211171561120b57fe5b60405280836060810186101561121f578384fd5b835b600381101561124a5781356112358161179d565b83526020928301929190910190600101611221565b509195945050505050565b60008060408385031215611267578182fd5b82516001600160401b038082111561127d578384fd5b818501915085601f830112611290578384fd5b815160206112a061108683611780565b82815281810190858301838502870184018b10156112bc578889fd5b8896505b848710156112e75780516112d38161179d565b8352600196909601959183019183016112c0565b5091880151919650909350505080821115611300578283fd5b5061130d85828601611066565b9150509250929050565b6000806000806080858703121561132c578182fd5b84356001600160e01b031981168114611343578283fd5b935060208581013593506040860135925060608601356001600160401b038082111561136d578384fd5b818801915088601f830112611380578384fd5b81358181111561138c57fe5b61139e601f8201601f1916850161175d565b915080825289848285010111156113b3578485fd5b8084840185840137810190920192909252939692955090935050565b600080602083850312156113e1578182fd5b82356001600160401b038111156113f6578283fd5b611402858286016110d2565b90969095509350505050565b60008060008060408587031215611423578182fd5b84356001600160401b0380821115611439578384fd5b611445888389016110d2565b9096509450602087013591508082111561145d578384fd5b5061146a878288016110d2565b95989497509550505050565b600060208284031215611487578081fd5b5035919050565b600080600080600060a086880312156114a5578283fd5b6114ae86611118565b94506020860151935060408601519250606086015191506114d160808701611118565b90509295509295909350565b6000602082840312156114ee578081fd5b8151610f06816117b5565b60008060006060848603121561150d578081fd5b8335611518816117b5565b95602085013595506040909401359392505050565b60006bffffffffffffffffffffffff198660601b1682528460148301528284603484013791016034019081529392505050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b901515815260200190565b90815260200190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b8181101561164c57858101830151858201604001528201611630565b8181111561165d5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600290820152616c6560f01b604082015260600190565b60208082526002908201526137b760f11b604082015260600190565b602080825260029082015261065760f41b604082015260600190565b602080825260029082015261697360f01b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b602080825260029082015261616960f01b604082015260600190565b60208082526003908201526273727560e81b604082015260600190565b6040518181016001600160401b038111828210171561177857fe5b604052919050565b60006001600160401b0382111561179357fe5b5060209081020190565b6001600160a01b03811681146117b257600080fd5b50565b60ff811681146117b257600080fdfea2646970667358221220c3f668a455fc3a249371830b2efa8f8063ca9d6752e38a50802f94634dfcd5c364736f6c63430007060033

Deployed ByteCode Sourcemap

14044:7542:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10323:23;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11398:277;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21061:522::-;;;;;;:::i;:::-;;:::i;:::-;;19690:107;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19805:423::-;;;;;;:::i;:::-;;:::i;8837:41::-;;;:::i;12681:276::-;;;;;;:::i;:::-;;:::i;11707:363::-;;;;;;:::i;:::-;;:::i;20236:635::-;;;;;;:::i;:::-;;:::i;12078:595::-;;;;;;:::i;:::-;;:::i;10353:43::-;;;;;;:::i;:::-;;:::i;13262:668::-;;;;;;:::i;:::-;;:::i;18381:1301::-;;;;;;:::i;:::-;;:::i;10323:23::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10323:23:0;;-1:-1:-1;10323:23:0;:::o;11398:277::-;11450:4;;;11499:143;11523:6;:13;11519:17;;11499:143;;;11575:4;-1:-1:-1;;;;;11562:17:0;:6;11569:1;11562:9;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11562:9:0;:17;11558:73;;;11611:4;11600:15;;11558:73;11538:3;;11499:143;;;-1:-1:-1;11659:8:0;-1:-1:-1;11398:277:0;;;;:::o;21061:522::-;21173:8;;21183:4;;10615:775;;;;;;;;;;;;;-1:-1:-1;;;10615:775:0;;;10768:19;10776:10;10768:7;:19::i;:::-;10760:34;;;;-1:-1:-1;;;10760:34:0;;;;;;;:::i;:::-;;;;;;;;;10805:14;10822:25;10832:8;;10842:4;;10822:9;:25::i;:::-;10805:42;-1:-1:-1;;;;;;10880:20:0;;10890:10;10880:20;;;;:39;;;10904:15;10912:6;10904:7;:15::i;:::-;10880:63;;;;-1:-1:-1;;;;;;10923:20:0;;;;10880:63;10858:115;;;;-1:-1:-1;;;10858:115:0;;;;;;;:::i;:::-;10985:13;;;11035:92;;;;11060:8;11035:92;:::i;:::-;-1:-1:-1;11160:15:0;;;;:11;:15;;;;;;10984:143;;-1:-1:-1;10984:143:0;;-1:-1:-1;10984:143:0;-1:-1:-1;11160:15:0;;:24;;;:93;;-1:-1:-1;11222:30:0;;;;;;-1:-1:-1;;;;;;11205:48:0;;;;;;11160:93;11138:146;;;;-1:-1:-1;;;11138:146:0;;;;;;;:::i;:::-;11315:15;11303:9;:27;11295:42;;;;-1:-1:-1;;;11295:42:0;;;;;;;:::i;:::-;11348:15;;;;11366:4;11348:15;;;;;;;:22;;-1:-1:-1;;11348:22:0;;;;;;21251:92:::1;::::0;;::::1;21276:8:::0;21251:92:::1;:::i;:::-;21221:122;;;;;21355:13;21370:17:::0;21416:6:::1;21391:75;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21506:17:0;;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;21482:53;;21354:112;;-1:-1:-1;21354:112:0;;-1:-1:-1;21482:53:0::1;::::0;::::1;::::0;21354:112;;21506:17:::1;::::0;21354:112;;21482:53:::1;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;21546:17:0;;::::1;;::::0;;;:10:::1;:17;::::0;;;;:29;;-1:-1:-1;;;;;;21546:29:0::1;::::0;;;::::1;;::::0;;-1:-1:-1;;;;;;;;;;;;;;21061:522:0:o;19690:107::-;-1:-1:-1;;;;;19776:13:0;19749:7;19776:13;;;:6;:13;;;;;;;19690:107::o;19805:423::-;19919:8;;19929:4;;10615:775;;;;;;;;;;;;;-1:-1:-1;;;10615:775:0;;;10768:19;10776:10;10768:7;:19::i;:::-;10760:34;;;;-1:-1:-1;;;10760:34:0;;;;;;;:::i;:::-;10805:14;10822:25;10832:8;;10842:4;;10822:9;:25::i;:::-;10805:42;-1:-1:-1;;;;;;10880:20:0;;10890:10;10880:20;;;;:39;;;10904:15;10912:6;10904:7;:15::i;:::-;10880:63;;;;-1:-1:-1;;;;;;10923:20:0;;;;10880:63;10858:115;;;;-1:-1:-1;;;10858:115:0;;;;;;;:::i;:::-;10985:13;;;11035:92;;;;11060:8;11035:92;:::i;:::-;-1:-1:-1;11160:15:0;;;;:11;:15;;;;;;10984:143;;-1:-1:-1;10984:143:0;;-1:-1:-1;10984:143:0;-1:-1:-1;11160:15:0;;:24;;;:93;;-1:-1:-1;11222:30:0;;;;;;-1:-1:-1;;;;;;11205:48:0;;;;;;11160:93;11138:146;;;;-1:-1:-1;;;11138:146:0;;;;;;;:::i;:::-;11315:15;11303:9;:27;11295:42;;;;-1:-1:-1;;;11295:42:0;;;;;;;:::i;:::-;11348:15;;;;11366:4;11348:15;;;;;;;:22;;-1:-1:-1;;11348:22:0;;;;;;19999:92:::1;::::0;;::::1;20024:8:::0;19999:92:::1;:::i;:::-;19969:122;;;;;20103:13;20118::::0;20146:6:::1;20135:38;;;;;;;;;;;;:::i;:::-;20102:71;;;;20184:36;20207:5;20214;20184:22;:36::i;:::-;11381:1;;;19805:423:::0;;;;;;;;;;;;;:::o;8837:41::-;8874:4;8837:41;:::o;12681:276::-;12910:38;;12777:7;;12863:9;;12910:38;;12927:4;;12863:9;;12942:5;;;;12910:38;;;:::i;:::-;;;;;;;;;;;;;12900:49;;;;;;12893:56;;;12681:276;;;;;:::o;11707:363::-;11801:11;;;;11800:12;:57;;;;-1:-1:-1;11833:10:0;;-1:-1:-1;;;;;11833:24:0;;;11800:57;:102;;;;-1:-1:-1;11878:10:0;;;;-1:-1:-1;;;;;11878:24:0;;;11800:102;:147;;;;-1:-1:-1;11923:10:0;;;;-1:-1:-1;;;;;11923:24:0;;;11800:147;11778:199;;;;-1:-1:-1;;;11778:199:0;;;;;;;:::i;:::-;11988:45;;;;;;;;11998:10;;-1:-1:-1;;;;;11988:45:0;;;;;11998:10;12010;;;;11988:45;;;;;;12022:10;;;;11988:45;;;;;;;;;;-1:-1:-1;;11988:45:0;;:::i;:::-;-1:-1:-1;;12044:11:0;:18;;-1:-1:-1;;12044:18:0;12058:4;12044:18;;;11707:363::o;20236:635::-;20355:8;;20365:4;;10615:775;;;;;;;;;;;;;-1:-1:-1;;;10615:775:0;;;10768:19;10776:10;10768:7;:19::i;:::-;10760:34;;;;-1:-1:-1;;;10760:34:0;;;;;;;:::i;:::-;10805:14;10822:25;10832:8;;10842:4;;10822:9;:25::i;:::-;10805:42;-1:-1:-1;;;;;;10880:20:0;;10890:10;10880:20;;;;:39;;;10904:15;10912:6;10904:7;:15::i;:::-;10880:63;;;;-1:-1:-1;;;;;;10923:20:0;;;;10880:63;10858:115;;;;-1:-1:-1;;;10858:115:0;;;;;;;:::i;:::-;10985:13;;;11035:92;;;;11060:8;11035:92;:::i;:::-;-1:-1:-1;11160:15:0;;;;:11;:15;;;;;;10984:143;;-1:-1:-1;10984:143:0;;-1:-1:-1;10984:143:0;-1:-1:-1;11160:15:0;;:24;;;:93;;-1:-1:-1;11222:30:0;;;;;;-1:-1:-1;;;;;;11205:48:0;;;;;;11160:93;11138:146;;;;-1:-1:-1;;;11138:146:0;;;;;;;:::i;:::-;11315:15;11303:9;:27;11295:42;;;;-1:-1:-1;;;11295:42:0;;;;;;;:::i;:::-;11348:15;;;;11366:4;11348:15;;;;;;;:22;;-1:-1:-1;;11348:22:0;;;;;;20440:92:::1;::::0;;::::1;20465:8:::0;20440:92:::1;:::i;:::-;20410:122;;;;;20544:24;20570::::0;20623:6:::1;20598:79;;;;;;;;;;;;:::i;:::-;20543:134;;;;20714:7;:14;20696:7;:14;:32;20688:47;;;;-1:-1:-1::0;;;20688:47:0::1;;;;;;;:::i;:::-;20751:9;20746:118;20770:7;:14;20766:1;:18;20746:118;;;20806:46;20829:7;20837:1;20829:10;;;;;;;;;;;;;;20841:7;20849:1;20841:10;;;;;;;;;;;;;;20806:22;:46::i;:::-;20786:3;;20746:118;;;;11381:1;;;20236:635:::0;;;;;;;;;;;;;:::o;12078:595::-;12188:7;12274:9;12188:7;;;12338:80;;;;12363:4;12338:80;:::i;:::-;12304:114;;;;;;12449:216;12477:113;12549:4;12555:7;12564:5;;12532:38;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12522:49;;;;;;12477:22;:113::i;:::-;12609:1;12629;12649;12449:216;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12449:216:0;;-1:-1:-1;;12449:216:0;;;12078:595;-1:-1:-1;;;;;;;;;;12078:595:0:o;10353:43::-;;;;;;;;;;;;;;;:::o;13262:668::-;13377:8;;13387:4;;10615:775;;;;;;;;;;;;;-1:-1:-1;;;10615:775:0;;;10768:19;10776:10;10768:7;:19::i;:::-;10760:34;;;;-1:-1:-1;;;10760:34:0;;;;;;;:::i;:::-;10805:14;10822:25;10832:8;;10842:4;;10822:9;:25::i;:::-;10805:42;-1:-1:-1;;;;;;10880:20:0;;10890:10;10880:20;;;;:39;;;10904:15;10912:6;10904:7;:15::i;:::-;10880:63;;;;-1:-1:-1;;;;;;10923:20:0;;;;10880:63;10858:115;;;;-1:-1:-1;;;10858:115:0;;;;;;;:::i;:::-;10985:13;;;11035:92;;;;11060:8;11035:92;:::i;:::-;-1:-1:-1;11160:15:0;;;;:11;:15;;;;;;10984:143;;-1:-1:-1;10984:143:0;;-1:-1:-1;10984:143:0;-1:-1:-1;11160:15:0;;:24;;;:93;;-1:-1:-1;11222:30:0;;;;;;-1:-1:-1;;;;;;11205:48:0;;;;;;11160:93;11138:146;;;;-1:-1:-1;;;11138:146:0;;;;;;;:::i;:::-;11315:15;11303:9;:27;11295:42;;;;-1:-1:-1;;;11295:42:0;;;;;;;:::i;:::-;11348:15;;;;11366:4;11348:15;;;;;;;:22;;-1:-1:-1;;11348:22:0;;;;;;13460:92:::1;::::0;;::::1;13485:8:::0;13460:92:::1;:::i;:::-;13430:122;;;;;13563:16;13593:6;13582:29;;;;;;;;;;;;:::i;:::-;13563:48:::0;-1:-1:-1;13622:13:0::1;::::0;13646:143:::1;13670:6;:13:::0;13666:17;::::1;13646:143;;;13722:10;-1:-1:-1::0;;;;;13709:23:0::1;:6;13716:1;13709:9;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;13709:9:0::1;:23;13705:73;;;13761:1;13753:9;;13705:73;13685:3;;13646:143;;;;13799:16;13818:6:::0;13825:5:::1;13818:13;;;;;;;;;::::0;;;::::1;::::0;;::::1;::::0;13842;;-1:-1:-1;;;;;13818:13:0;;::::1;::::0;-1:-1:-1;13858:8:0;;13818:13;13849:5;;13842:13;::::1;;;;;;::::0;;;::::1;::::0;;::::1;:24:::0;;-1:-1:-1;;;;;;13842:24:0::1;-1:-1:-1::0;;;;;13842:24:0;;::::1;;::::0;;13882:40:::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;11381:1;;;;13262:668:::0;;;;;;;;;;;;;:::o;18381:1301::-;-1:-1:-1;;;;;18691:14:0;;18491:7;18691:14;;;:6;:14;;;;;;18491:7;;;;;;;;;;;;18691:19;18687:519;;-1:-1:-1;;;;;;18741:14:0;;;;;;:6;:14;;;;;;18687:519;;;-1:-1:-1;;;;;18792:18:0;;;18822:1;18792:18;;;:10;:18;;;;;;;:32;18788:364;;-1:-1:-1;;;;;19049:18:0;;;;;;;:10;:18;;;;;;;;;;19027:59;;-1:-1:-1;;;19027:59:0;;;;19049:18;;;19027:57;;:59;;;;;;;;;;;;19049:18;19027:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18845:241;;-1:-1:-1;18845:241:0;;-1:-1:-1;18845:241:0;-1:-1:-1;18845:241:0;-1:-1:-1;18845:241:0;-1:-1:-1;18788:364:0;;;19135:1;19127:9;;18788:364;-1:-1:-1;19188:5:0;18687:519;19216:22;19241:2;19216:27;;19254:20;19292:6;19254:45;;19310:20;19341:5;-1:-1:-1;;;;;19341:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19333:25;;19310:48;;19391:12;19373:14;:30;19369:306;;;19427:11;19420:18;;;;;;;;;;;;;19369:306;19477:12;19460:14;:29;19456:219;;;19513:55;19534:32;:14;19553:12;19534:18;:32::i;:::-;19513:11;;19529:2;:38;19513:15;:55::i;:::-;19506:62;;;;;;;;;;;;;19456:219;19608:55;19629:32;:12;19646:14;19629:16;:32::i;:::-;19608:11;;19624:2;:38;19608:15;:55::i;20879:174::-;-1:-1:-1;;;;;20985:13:0;;;;;;:6;:13;;;;;;;;20966:47;;;;;;20978:5;;20985:13;21000:5;;;;20966:47;:::i;:::-;;;;;;;;-1:-1:-1;;;;;21024:13:0;;;;;;;:6;:13;;;;;:21;20879:174::o;12965:250::-;13061:7;13187:4;13134:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;13106:101;;;;;;13086:121;;12965:250;;;:::o;4868:130::-;4926:7;4949:43;4953:1;4956;4949:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4942:50;4868:130;-1:-1:-1;;;4868:130:0:o;5682:431::-;5740:7;5969:6;5965:37;;-1:-1:-1;5993:1:0;5986:8;;5965:37;6022:5;;;6026:1;6022;:5;:1;6042:5;;;;;:10;6034:56;;;;-1:-1:-1;;;6034:56:0;;;;;;;:::i;6557:126::-;6615:7;6638:39;6642:1;6645;6638:39;;;;;;;;;;;;;;;;;:3;:39::i;5273:178::-;5359:7;5391:12;5383:6;;;;5375:29;;;;-1:-1:-1;;;5375:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;5423:5:0;;;5273:178::o;7147:323::-;7233:7;7327:12;7320:5;7312:28;;;;-1:-1:-1;;;7312:28:0;;;;;;;;:::i;:::-;;7347:9;7363:1;7359;:5;;;;;;;7147:323;-1:-1:-1;;;;;7147:323:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:702:1;;138:3;131:4;123:6;119:17;115:27;105:2;;160:5;153;146:20;105:2;193:6;187:13;219:4;243:65;258:49;304:2;258:49;:::i;:::-;243:65;:::i;:::-;342:15;;;373:12;;;;405:15;;;451:11;;;439:24;;435:33;;432:42;-1:-1:-1;429:2:1;;;491:5;484;477:20;429:2;517:5;531:156;545:2;542:1;539:9;531:156;;;602:10;;590:23;;633:12;;;;665;;;;563:1;556:9;531:156;;;-1:-1:-1;705:5:1;;95:621;-1:-1:-1;;;;;;;95:621:1:o;721:377::-;;;838:3;831:4;823:6;819:17;815:27;805:2;;863:8;853;846:26;805:2;-1:-1:-1;893:20:1;;-1:-1:-1;;;;;925:30:1;;922:2;;;975:8;965;958:26;922:2;1019:4;1011:6;1007:17;995:29;;1071:3;1064:4;1055:6;1047;1043:19;1039:30;1036:39;1033:2;;;1088:1;1085;1078:12;1033:2;795:303;;;;;:::o;1103:181::-;1183:13;;1236:22;1225:34;;1215:45;;1205:2;;1274:1;1271;1264:12;1289:259;;1401:2;1389:9;1380:7;1376:23;1372:32;1369:2;;;1422:6;1414;1407:22;1369:2;1466:9;1453:23;1485:33;1512:5;1485:33;:::i;1553:271::-;;1684:2;1672:9;1663:7;1659:23;1655:32;1652:2;;;1705:6;1697;1690:22;1652:2;1742:9;1736:16;1761:33;1788:5;1761:33;:::i;1829:415::-;;;1985:2;1973:9;1964:7;1960:23;1956:32;1953:2;;;2006:6;1998;1991:22;1953:2;2043:9;2037:16;2062:33;2089:5;2062:33;:::i;:::-;2164:2;2149:18;;2143:25;2114:5;;-1:-1:-1;2177:35:1;2143:25;2177:35;:::i;:::-;2231:7;2221:17;;;1943:301;;;;;:::o;2249:332::-;;;2397:2;2385:9;2376:7;2372:23;2368:32;2365:2;;;2418:6;2410;2403:22;2365:2;2455:9;2449:16;2474:33;2501:5;2474:33;:::i;:::-;2571:2;2556:18;;;;2550:25;2526:5;;2550:25;;-1:-1:-1;;;2355:226:1:o;2586:897::-;;2721:2;2709:9;2700:7;2696:23;2692:32;2689:2;;;2742:6;2734;2727:22;2689:2;2796:7;2789:4;2778:9;2774:20;2770:34;2760:2;;2823:6;2815;2808:22;2760:2;2861;2855:9;2903:2;2895:6;2891:15;2972:6;2960:10;2957:22;-1:-1:-1;;;;;2924:10:1;2921:34;2918:62;2915:2;;;2983:9;2915:2;3010;3003:22;3045:6;3071:9;3110:2;3095:18;;3092:31;-1:-1:-1;3089:2:1;;;3141:6;3133;3126:22;3089:2;3168:6;3183:269;3197:4;3194:1;3191:11;3183:269;;;3270:3;3257:17;3287:33;3314:5;3287:33;:::i;:::-;3333:18;;3374:4;3398:12;;;;3430;;;;;3217:1;3210:9;3183:269;;;-1:-1:-1;3471:6:1;;2679:804;-1:-1:-1;;;;;2679:804:1:o;3488:1289::-;;;3678:2;3666:9;3657:7;3653:23;3649:32;3646:2;;;3699:6;3691;3684:22;3646:2;3737:9;3731:16;-1:-1:-1;;;;;3807:2:1;3799:6;3796:14;3793:2;;;3828:6;3820;3813:22;3793:2;3871:6;3860:9;3856:22;3846:32;;3916:7;3909:4;3905:2;3901:13;3897:27;3887:2;;3943:6;3935;3928:22;3887:2;3977;3971:9;3999:4;4023:65;4038:49;4084:2;4038:49;:::i;4023:65::-;4122:15;;;4153:12;;;;4185:11;;;4223;;;4215:20;;4211:29;;4208:42;-1:-1:-1;4205:2:1;;;4268:6;4260;4253:22;4205:2;4295:6;4286:15;;4310:233;4324:2;4321:1;4318:9;4310:233;;;4388:3;4382:10;4405:33;4432:5;4405:33;:::i;:::-;4451:18;;4342:1;4335:9;;;;;4489:12;;;;4521;;4310:233;;;-1:-1:-1;4598:18:1;;;4592:25;4562:5;;-1:-1:-1;4592:25:1;;-1:-1:-1;;;4629:16:1;;;4626:2;;;4663:6;4655;4648:22;4626:2;;4691:80;4763:7;4752:8;4741:9;4737:24;4691:80;:::i;:::-;4681:90;;;3636:1141;;;;;:::o;4782:1119::-;;;;;4953:3;4941:9;4932:7;4928:23;4924:33;4921:2;;;4975:6;4967;4960:22;4921:2;5006:23;;-1:-1:-1;;;;;;5058:32:1;;5048:43;;5038:2;;5110:6;5102;5095:22;5038:2;5138:5;-1:-1:-1;5162:2:1;5196:18;;;5183:32;;-1:-1:-1;5262:2:1;5247:18;;5234:32;;-1:-1:-1;5317:2:1;5302:18;;5289:32;-1:-1:-1;;;;;5370:14:1;;;5367:2;;;5402:6;5394;5387:22;5367:2;5445:6;5434:9;5430:22;5420:32;;5490:7;5483:4;5479:2;5475:13;5471:27;5461:2;;5517:6;5509;5502:22;5461:2;5558;5545:16;5580:2;5576;5573:10;5570:2;;;5586:9;5570:2;5619:52;5661:2;5642:13;;-1:-1:-1;;5638:27:1;5634:36;;5619:52;:::i;:::-;5606:65;;5694:2;5687:5;5680:17;5734:7;5729:2;5724;5720;5716:11;5712:20;5709:33;5706:2;;;5760:6;5752;5745:22;5706:2;5820;5815;5811;5807:11;5802:2;5795:5;5791:14;5778:45;5843:14;;5839:23;;;5832:39;;;;4911:990;;;;-1:-1:-1;4911:990:1;;-1:-1:-1;;4911:990:1:o;5906:431::-;;;6037:2;6025:9;6016:7;6012:23;6008:32;6005:2;;;6058:6;6050;6043:22;6005:2;6103:9;6090:23;-1:-1:-1;;;;;6128:6:1;6125:30;6122:2;;;6173:6;6165;6158:22;6122:2;6217:60;6269:7;6260:6;6249:9;6245:22;6217:60;:::i;:::-;6296:8;;6191:86;;-1:-1:-1;5995:342:1;-1:-1:-1;;;;5995:342:1:o;6342:751::-;;;;;6509:2;6497:9;6488:7;6484:23;6480:32;6477:2;;;6530:6;6522;6515:22;6477:2;6575:9;6562:23;-1:-1:-1;;;;;6645:2:1;6637:6;6634:14;6631:2;;;6666:6;6658;6651:22;6631:2;6710:60;6762:7;6753:6;6742:9;6738:22;6710:60;:::i;:::-;6789:8;;-1:-1:-1;6684:86:1;-1:-1:-1;6877:2:1;6862:18;;6849:32;;-1:-1:-1;6893:16:1;;;6890:2;;;6927:6;6919;6912:22;6890:2;;6971:62;7025:7;7014:8;7003:9;6999:24;6971:62;:::i;:::-;6467:626;;;;-1:-1:-1;7052:8:1;-1:-1:-1;;;;6467:626:1:o;7098:190::-;;7210:2;7198:9;7189:7;7185:23;7181:32;7178:2;;;7231:6;7223;7216:22;7178:2;-1:-1:-1;7259:23:1;;7168:120;-1:-1:-1;7168:120:1:o;7293:487::-;;;;;;7481:3;7469:9;7460:7;7456:23;7452:33;7449:2;;;7503:6;7495;7488:22;7449:2;7531:41;7562:9;7531:41;:::i;:::-;7521:51;;7612:2;7601:9;7597:18;7591:25;7581:35;;7656:2;7645:9;7641:18;7635:25;7625:35;;7700:2;7689:9;7685:18;7679:25;7669:35;;7723:51;7769:3;7758:9;7754:19;7723:51;:::i;:::-;7713:61;;7439:341;;;;;;;;:::o;7785:259::-;;7906:2;7894:9;7885:7;7881:23;7877:32;7874:2;;;7927:6;7919;7912:22;7874:2;7964:9;7958:16;7983:31;8008:5;7983:31;:::i;8049:391::-;;;;8193:2;8181:9;8172:7;8168:23;8164:32;8161:2;;;8214:6;8206;8199:22;8161:2;8258:9;8245:23;8277:31;8302:5;8277:31;:::i;:::-;8327:5;8379:2;8364:18;;8351:32;;-1:-1:-1;8430:2:1;8415:18;;;8402:32;;8151:289;-1:-1:-1;;;8151:289:1:o;8445:480::-;;8716:26;8712:31;8703:6;8699:2;8695:15;8691:53;8686:3;8679:66;8775:6;8770:2;8765:3;8761:12;8754:28;8826:6;8818;8813:2;8808:3;8804:12;8791:42;8856:16;;8874:2;8852:25;8886:15;;;8852:25;8669:256;-1:-1:-1;;;8669:256:1:o;8930:380::-;9172:66;9160:79;;9264:2;9255:12;;9248:28;;;;9301:2;9292:12;;9150:160::o;9315:203::-;-1:-1:-1;;;;;9479:32:1;;;;9461:51;;9449:2;9434:18;;9416:102::o;9523:384::-;-1:-1:-1;;;;;9781:15:1;;;9763:34;;9833:15;;;9828:2;9813:18;;9806:43;9885:15;;;9880:2;9865:18;;9858:43;9713:2;9698:18;;9680:227::o;9912:417::-;-1:-1:-1;;;;;10161:32:1;;;;10143:51;;10225:2;10210:18;;10203:34;;;;10268:2;10253:18;;10246:34;10311:2;10296:18;;10289:34;10130:3;10115:19;;10097:232::o;10334:187::-;10499:14;;10492:22;10474:41;;10462:2;10447:18;;10429:92::o;10526:177::-;10672:25;;;10660:2;10645:18;;10627:76::o;10708:398::-;10935:25;;;11008:4;10996:17;;;;10991:2;10976:18;;10969:45;11045:2;11030:18;;11023:34;11088:2;11073:18;;11066:34;10922:3;10907:19;;10889:217::o;11111:603::-;;11252:2;11281;11270:9;11263:21;11313:6;11307:13;11356:6;11351:2;11340:9;11336:18;11329:34;11381:4;11394:140;11408:6;11405:1;11402:13;11394:140;;;11503:14;;;11499:23;;11493:30;11469:17;;;11488:2;11465:26;11458:66;11423:10;;11394:140;;;11552:6;11549:1;11546:13;11543:2;;;11622:4;11617:2;11608:6;11597:9;11593:22;11589:31;11582:45;11543:2;-1:-1:-1;11698:2:1;11677:15;-1:-1:-1;;11673:29:1;11658:45;;;;11705:2;11654:54;;11232:482;-1:-1:-1;;;11232:482:1:o;11719:325::-;11921:2;11903:21;;;11960:1;11940:18;;;11933:29;-1:-1:-1;;;11993:2:1;11978:18;;11971:32;12035:2;12020:18;;11893:151::o;12049:325::-;12251:2;12233:21;;;12290:1;12270:18;;;12263:29;-1:-1:-1;;;12323:2:1;12308:18;;12301:32;12365:2;12350:18;;12223:151::o;12379:325::-;12581:2;12563:21;;;12620:1;12600:18;;;12593:29;-1:-1:-1;;;12653:2:1;12638:18;;12631:32;12695:2;12680:18;;12553:151::o;12709:325::-;12911:2;12893:21;;;12950:1;12930:18;;;12923:29;-1:-1:-1;;;12983:2:1;12968:18;;12961:32;13025:2;13010:18;;12883:151::o;13039:397::-;13241:2;13223:21;;;13280:2;13260:18;;;13253:30;13319:34;13314:2;13299:18;;13292:62;-1:-1:-1;;;13385:2:1;13370:18;;13363:31;13426:3;13411:19;;13213:223::o;13441:325::-;13643:2;13625:21;;;13682:1;13662:18;;;13655:29;-1:-1:-1;;;13715:2:1;13700:18;;13693:32;13757:2;13742:18;;13615:151::o;13771:326::-;13973:2;13955:21;;;14012:1;13992:18;;;13985:29;-1:-1:-1;;;14045:2:1;14030:18;;14023:33;14088:2;14073:18;;13945:152::o;14284:242::-;14354:2;14348:9;14384:17;;;-1:-1:-1;;;;;14416:34:1;;14452:22;;;14413:62;14410:2;;;14478:9;14410:2;14505;14498:22;14328:198;;-1:-1:-1;14328:198:1:o;14531:183::-;;-1:-1:-1;;;;;14622:6:1;14619:30;14616:2;;;14652:9;14616:2;-1:-1:-1;14703:4:1;14684:17;;;14680:28;;14606:108::o;14719:133::-;-1:-1:-1;;;;;14796:31:1;;14786:42;;14776:2;;14842:1;14839;14832:12;14776:2;14766:86;:::o;14857:116::-;14943:4;14936:5;14932:16;14925:5;14922:27;14912:2;;14963:1;14960;14953:12

Metadata Hash

c3f668a455fc3a249371830b2efa8f8063ca9d6752e38a50802f94634dfcd5c3
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.