Contract 0x128889a9b82e5574012177055a35310d50c31a7d

 

Contract Overview

Balance:
0 ETH

ETH Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xc50414750f9ae2df6ba1a216b307acd22d77fd84e550544229f79a0212003b18Fulfill Oracle R...718797412023-03-20 19:52:523 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000095740.1
0x4976cd6974be7e3ed61134a03ed0dc82244c86066b91aea5591e0a3e354b1b9fFulfill Oracle R...718796232023-03-20 19:52:223 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000087070.1
0xb535dbc59bb48c200c4007fc94dccd7228e22a818f7ed0400bb74dc3eeeb1fe4Fulfill Oracle R...718794572023-03-20 19:51:394 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000087080.1
0xf8514cfcd62b0df27e02d56dbfe8a6669705a180420a34fb3fa716e3ac7b2e35Fulfill Oracle R...718792132023-03-20 19:50:375 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000095750.1
0x5030b31212ee5d52ebd1c6aa555c719b0cf7debc0780f18a7456a55d9fe74a63Fulfill Oracle R...718783322023-03-20 19:46:588 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000098460.1
0xb098dc2f66d16b44ef2680f7a9b48efcdda6a322fafe887cb56e6caa43d2af5dFulfill Oracle R...718778542023-03-20 19:44:5710 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000089790.1
0x93843f7b1dccc90638953446f27b255bcb308b3b4edf0aa0959611660e412bd0Fulfill Oracle R...718774252023-03-20 19:43:0812 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000089790.1
0x2e22197d34f52c856fba94354de579533a78c08178b8a8adb591809a835f4ea4Fulfill Oracle R...718773392023-03-20 19:42:4613 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000089790.1
0x0937d7eae1b499310d6bb1466b379df42ea32794e2f2a34381d5b50012190014Fulfill Oracle R...718769292023-03-20 19:41:0114 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000082350.1
0xd4ff883a787d3ed6ff8c32bc80dff65f617cb6a9bb511c3d446c046f9cff5b69Fulfill Oracle R...718769252023-03-20 19:41:0014 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000082350.1
0x55884e8ba261576af81e1ea36db7954f2aac21e14c1fb250d73851c9f4bcd3bdFulfill Oracle R...718767192023-03-20 19:40:0815 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000082350.1
0x135d040c52e3ff69fea43caa5884f7f75c55c4098bd0acfb57f39a5c2cdefc8bFulfill Oracle R...718764942023-03-20 19:39:1116 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000184480.1
0xf995b0985df082bfa87ee322028365c1e5602a32c9b17360b4e9823273febad0Fulfill Oracle R...718764862023-03-20 19:39:0916 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000091020.1
0x62bf06fb16b21b8170dc47d8e1ea97ef6fff4d0b6a274ee39f77771285797542Fulfill Oracle R...718764782023-03-20 19:39:0716 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000091020.1
0xf2f044ebe8ade244fd004079445a1ce45b1e2056dd0ac13d485a087496acb115Fulfill Oracle R...718764662023-03-20 19:39:0416 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000091020.1
0xb91b0cba8f675051039eb92d616d0f3da5e375b35d2d207405aa22f3d119f2b6Fulfill Oracle R...718763662023-03-20 19:38:3817 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000082350.1
0xe31a67fc6f3d4a7c8e72bb5bdea58ea7818960628e8eb1f7fb9e671965b29bf0Fulfill Oracle R...718761642023-03-20 19:37:4718 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000082350.1
0xc5d9cbb8592c5649d44aab85478ba6a987a7a581b7bdd878a9a3a3fad8a02a93Fulfill Oracle R...718753802023-03-20 19:34:3321 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.00008380.1
0xcfb67072834b81ed6540aa253787304d81a3a84f318b3ceefb6c06a4650ed3c1Fulfill Oracle R...718753772023-03-20 19:34:3221 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.00008380.1
0x4504481d870c6b8e8e8c68f62e6073c2169ce4bdf10365d471a3701f83858c17Fulfill Oracle R...718749712023-03-20 19:32:4723 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.00008380.1
0x75ddf39ab87256ae404844ede2930c0a54567dfa81dd91263c1bc825838cb4daFulfill Oracle R...718746652023-03-20 19:31:3024 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.00008380.1
0x3ca2e81eaedd882866ca1f4e853049547ce71ed66eed10cff9571a3ea37b61bdFulfill Oracle R...718745702023-03-20 19:31:0624 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000092470.1
0x55096b5c8b667c96811dd406422b99ae4552540e233187c17aabf4f5342f1c2fFulfill Oracle R...718744842023-03-20 19:30:4425 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.00008380.1
0xa4b0bce20226492fd466cbf7bdcaa2d4451f7e2ce4ec48f32d3348f409902edeFulfill Oracle R...718744762023-03-20 19:30:4225 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.00008380.1
0xad5c4413152a3253275fa04ad9db6c9654951561073ee7f6ef9e1e46e135fc59Fulfill Oracle R...718744642023-03-20 19:30:3925 mins ago0xea86eb53c4d611ed57184c53bfdb370dd0cc9cfc IN  0x128889a9b82e5574012177055a35310d50c31a7d0 ETH0.000090760.1
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xc50414750f9ae2df6ba1a216b307acd22d77fd84e550544229f79a0212003b18718797412023-03-20 19:52:523 mins ago 0x128889a9b82e5574012177055a35310d50c31a7d 0xcef1c791cdd8c3ea92d6ab32399119fd30e1ff210 ETH
0xc20cbadcbd5db14bd301a15d9e23583dbb8570a279b960b55e5fc8303b22c07f718797372023-03-20 19:52:513 mins ago 0x128889a9b82e5574012177055a35310d50c31a7d 0x128889a9b82e5574012177055a35310d50c31a7d0 ETH
0xc20cbadcbd5db14bd301a15d9e23583dbb8570a279b960b55e5fc8303b22c07f718797372023-03-20 19:52:513 mins ago 0xf97f4df75117a78c1a5a0dbb814af92458539fb4 0x128889a9b82e5574012177055a35310d50c31a7d0 ETH
0x4976cd6974be7e3ed61134a03ed0dc82244c86066b91aea5591e0a3e354b1b9f718796232023-03-20 19:52:223 mins ago 0x128889a9b82e5574012177055a35310d50c31a7d 0xcef1c791cdd8c3ea92d6ab32399119fd30e1ff210 ETH
0xd9966556a7ee60c5b0a43609ab146022e829dcc61998bbd79b7d09e7163dc711718796152023-03-20 19:52:203 mins ago 0x128889a9b82e5574012177055a35310d50c31a7d 0x128889a9b82e5574012177055a35310d50c31a7d0 ETH
0xd9966556a7ee60c5b0a43609ab146022e829dcc61998bbd79b7d09e7163dc711718796152023-03-20 19:52:203 mins ago 0xf97f4df75117a78c1a5a0dbb814af92458539fb4 0x128889a9b82e5574012177055a35310d50c31a7d0 ETH
0xb535dbc59bb48c200c4007fc94dccd7228e22a818f7ed0400bb74dc3eeeb1fe4718794572023-03-20 19:51:394 mins ago 0x128889a9b82e5574012177055a35310d50c31a7d 0xcef1c791cdd8c3ea92d6ab32399119fd30e1ff210 ETH
0xd58deb64e68ae0f8da25e5d3aa62462d9618fc6240f1978328f68e9e17465245718794482023-03-20 19:51:374 mins ago 0x128889a9b82e5574012177055a35310d50c31a7d 0x128889a9b82e5574012177055a35310d50c31a7d0 ETH
0xd58deb64e68ae0f8da25e5d3aa62462d9618fc6240f1978328f68e9e17465245718794482023-03-20 19:51:374 mins ago 0xf97f4df75117a78c1a5a0dbb814af92458539fb4 0x128889a9b82e5574012177055a35310d50c31a7d0 ETH
0xf8514cfcd62b0df27e02d56dbfe8a6669705a180420a34fb3fa716e3ac7b2e35718792132023-03-20 19:50:375 mins ago 0x128889a9b82e5574012177055a35310d50c31a7d 0xcef1c791cdd8c3ea92d6ab32399119fd30e1ff210 ETH
0x4e82bc6df5d4d5610e2fd3301b785b287447e25664076f5dcdfb402a39141361718792082023-03-20 19:50:355 mins ago 0x128889a9b82e5574012177055a35310d50c31a7d 0x128889a9b82e5574012177055a35310d50c31a7d0 ETH
0x4e82bc6df5d4d5610e2fd3301b785b287447e25664076f5dcdfb402a39141361718792082023-03-20 19:50:355 mins ago 0xf97f4df75117a78c1a5a0dbb814af92458539fb4 0x128889a9b82e5574012177055a35310d50c31a7d0 ETH
0x5030b31212ee5d52ebd1c6aa555c719b0cf7debc0780f18a7456a55d9fe74a63718783322023-03-20 19:46:588 mins ago 0x128889a9b82e5574012177055a35310d50c31a7d 0xcef1c791cdd8c3ea92d6ab32399119fd30e1ff210 ETH
0xfce7f562529e4e4557b6ed5b684303deec6105ff3b9fe63552bbaad7decfe3a2718783272023-03-20 19:46:568 mins ago 0x128889a9b82e5574012177055a35310d50c31a7d 0x128889a9b82e5574012177055a35310d50c31a7d0 ETH
0xfce7f562529e4e4557b6ed5b684303deec6105ff3b9fe63552bbaad7decfe3a2718783272023-03-20 19:46:568 mins ago 0xf97f4df75117a78c1a5a0dbb814af92458539fb4 0x128889a9b82e5574012177055a35310d50c31a7d0 ETH
0xb098dc2f66d16b44ef2680f7a9b48efcdda6a322fafe887cb56e6caa43d2af5d718778542023-03-20 19:44:5710 mins ago 0x128889a9b82e5574012177055a35310d50c31a7d 0xcef1c791cdd8c3ea92d6ab32399119fd30e1ff210 ETH
0x26ef7fafb70dea802f8a98b136a446053e0a32d6ff47d3d448eedd9919d39150718778442023-03-20 19:44:5510 mins ago 0x128889a9b82e5574012177055a35310d50c31a7d 0x128889a9b82e5574012177055a35310d50c31a7d0 ETH
0x26ef7fafb70dea802f8a98b136a446053e0a32d6ff47d3d448eedd9919d39150718778442023-03-20 19:44:5510 mins ago 0xf97f4df75117a78c1a5a0dbb814af92458539fb4 0x128889a9b82e5574012177055a35310d50c31a7d0 ETH
0x93843f7b1dccc90638953446f27b255bcb308b3b4edf0aa0959611660e412bd0718774252023-03-20 19:43:0812 mins ago 0x128889a9b82e5574012177055a35310d50c31a7d 0xcef1c791cdd8c3ea92d6ab32399119fd30e1ff210 ETH
0xbd31a43a8beea3efc125cf84bf41e2dcf0a813a533fc5de95131573414578882718774192023-03-20 19:43:0612 mins ago 0x128889a9b82e5574012177055a35310d50c31a7d 0x128889a9b82e5574012177055a35310d50c31a7d0 ETH
0xbd31a43a8beea3efc125cf84bf41e2dcf0a813a533fc5de95131573414578882718774192023-03-20 19:43:0612 mins ago 0xf97f4df75117a78c1a5a0dbb814af92458539fb4 0x128889a9b82e5574012177055a35310d50c31a7d0 ETH
0x2e22197d34f52c856fba94354de579533a78c08178b8a8adb591809a835f4ea4718773392023-03-20 19:42:4613 mins ago 0x128889a9b82e5574012177055a35310d50c31a7d 0xcef1c791cdd8c3ea92d6ab32399119fd30e1ff210 ETH
0x9507dffbdec6f0951f9978d55c7a2a6bd630bfd0200b89b93ab23174376976e9718773312023-03-20 19:42:4413 mins ago 0x128889a9b82e5574012177055a35310d50c31a7d 0x128889a9b82e5574012177055a35310d50c31a7d0 ETH
0x9507dffbdec6f0951f9978d55c7a2a6bd630bfd0200b89b93ab23174376976e9718773312023-03-20 19:42:4413 mins ago 0xf97f4df75117a78c1a5a0dbb814af92458539fb4 0x128889a9b82e5574012177055a35310d50c31a7d0 ETH
0x0937d7eae1b499310d6bb1466b379df42ea32794e2f2a34381d5b50012190014718769292023-03-20 19:41:0114 mins ago 0x128889a9b82e5574012177055a35310d50c31a7d 0xcef1c791cdd8c3ea92d6ab32399119fd30e1ff210 ETH
[ Download CSV Export 
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xAd74f1cAb27f9562B5c846AaB416c844AcC4785C

Contract Name:
Oracle

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan on 2022-04-08
*/

// File: @chainlink/contracts/src/v0.6/vendor/SafeMathChainlink.sol


pragma solidity ^0.6.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 SafeMathChainlink {
  /**
    * @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) {
    uint256 c = a + b;
    require(c >= a, "SafeMath: addition overflow");

    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) {
    require(b <= a, "SafeMath: subtraction overflow");
    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-solidity/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) {
    // Solidity only automatically asserts when dividing by 0
    require(b > 0, "SafeMath: division by zero");
    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) {
    require(b != 0, "SafeMath: modulo by zero");
    return a % b;
  }
}

// File: @chainlink/contracts/src/v0.6/vendor/Ownable.sol


pragma solidity ^0.6.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be aplied to your functions to restrict their use to
 * the owner.
 *
 * This contract has been modified to remove the revokeOwnership function
 */
contract Ownable {
  address private _owner;

  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

  /**
   * @dev Initializes the contract setting the deployer as the initial owner.
   */
  constructor () internal {
    _owner = msg.sender;
    emit OwnershipTransferred(address(0), _owner);
  }

  /**
   * @dev Returns the address of the current owner.
   */
  function owner() public view returns (address) {
    return _owner;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(isOwner(), "Ownable: caller is not the owner");
    _;
  }

  /**
   * @dev Returns true if the caller is the current owner.
   */
  function isOwner() public view returns (bool) {
    return msg.sender == _owner;
  }

  /**
   * @dev Transfers ownership of the contract to a new account (`newOwner`).
   * Can only be called by the current owner.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    _transferOwnership(newOwner);
  }

  /**
   * @dev Transfers ownership of the contract to a new account (`newOwner`).
   */
  function _transferOwnership(address newOwner) internal {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    emit OwnershipTransferred(_owner, newOwner);
    _owner = newOwner;
  }
}

// File: @chainlink/contracts/src/v0.6/interfaces/WithdrawalInterface.sol


pragma solidity ^0.6.0;

interface WithdrawalInterface {
  /**
   * @notice transfer LINK held by the contract belonging to msg.sender to
   * another address
   * @param recipient is the address to send the LINK to
   * @param amount is the amount of LINK to send
   */
  function withdraw(address recipient, uint256 amount) external;

  /**
   * @notice query the available amount of LINK to withdraw by msg.sender
   */
  function withdrawable() external view returns (uint256);
}

// File: @chainlink/contracts/src/v0.6/interfaces/LinkTokenInterface.sol


pragma solidity ^0.6.0;

interface LinkTokenInterface {
  function allowance(address owner, address spender) external view returns (uint256 remaining);
  function approve(address spender, uint256 value) external returns (bool success);
  function balanceOf(address owner) external view returns (uint256 balance);
  function decimals() external view returns (uint8 decimalPlaces);
  function decreaseApproval(address spender, uint256 addedValue) external returns (bool success);
  function increaseApproval(address spender, uint256 subtractedValue) external;
  function name() external view returns (string memory tokenName);
  function symbol() external view returns (string memory tokenSymbol);
  function totalSupply() external view returns (uint256 totalTokensIssued);
  function transfer(address to, uint256 value) external returns (bool success);
  function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool success);
  function transferFrom(address from, address to, uint256 value) external returns (bool success);
}

// File: @chainlink/contracts/src/v0.6/interfaces/OracleInterface.sol


pragma solidity ^0.6.0;

interface OracleInterface {
  function fulfillOracleRequest(
    bytes32 requestId,
    uint256 payment,
    address callbackAddress,
    bytes4 callbackFunctionId,
    uint256 expiration,
    bytes32 data
  ) external returns (bool);
  function getAuthorizationStatus(address node) external view returns (bool);
  function setFulfillmentPermission(address node, bool allowed) external;
  function withdraw(address recipient, uint256 amount) external;
  function withdrawable() external view returns (uint256);
}

// File: @chainlink/contracts/src/v0.6/interfaces/ChainlinkRequestInterface.sol


pragma solidity ^0.6.0;

interface ChainlinkRequestInterface {
  function oracleRequest(
    address sender,
    uint256 requestPrice,
    bytes32 serviceAgreementID,
    address callbackAddress,
    bytes4 callbackFunctionId,
    uint256 nonce,
    uint256 dataVersion,
    bytes calldata data
  ) external;

  function cancelOracleRequest(
    bytes32 requestId,
    uint256 payment,
    bytes4 callbackFunctionId,
    uint256 expiration
  ) external;
}

// File: @chainlink/contracts/src/v0.6/LinkTokenReceiver.sol


pragma solidity ^0.6.0;

abstract contract LinkTokenReceiver {

  bytes4 constant private ORACLE_REQUEST_SELECTOR = 0x40429946;
  uint256 constant private SELECTOR_LENGTH = 4;
  uint256 constant private EXPECTED_REQUEST_WORDS = 2;
  uint256 constant private MINIMUM_REQUEST_LENGTH = SELECTOR_LENGTH + (32 * EXPECTED_REQUEST_WORDS);
  /**
   * @notice Called when LINK is sent to the contract via `transferAndCall`
   * @dev The data payload's first 2 words will be overwritten by the `_sender` and `_amount`
   * values to ensure correctness. Calls oracleRequest.
   * @param _sender Address of the sender
   * @param _amount Amount of LINK sent (specified in wei)
   * @param _data Payload of the transaction
   */
  function onTokenTransfer(
    address _sender,
    uint256 _amount,
    bytes memory _data
  )
    public
    onlyLINK
    validRequestLength(_data)
    permittedFunctionsForLINK(_data)
  {
    assembly {
      // solhint-disable-next-line avoid-low-level-calls
      mstore(add(_data, 36), _sender) // ensure correct sender is passed
      // solhint-disable-next-line avoid-low-level-calls
      mstore(add(_data, 68), _amount)    // ensure correct amount is passed
    }
    // solhint-disable-next-line avoid-low-level-calls
    (bool success, ) = address(this).delegatecall(_data); // calls oracleRequest
    require(success, "Unable to create request");
  }

  function getChainlinkToken() public view virtual returns (address);

  /**
   * @dev Reverts if not sent from the LINK token
   */
  modifier onlyLINK() {
    require(msg.sender == getChainlinkToken(), "Must use LINK token");
    _;
  }

  /**
   * @dev Reverts if the given data does not begin with the `oracleRequest` function selector
   * @param _data The data payload of the request
   */
  modifier permittedFunctionsForLINK(bytes memory _data) {
    bytes4 funcSelector;
    assembly {
      // solhint-disable-next-line avoid-low-level-calls
      funcSelector := mload(add(_data, 32))
    }
    require(funcSelector == ORACLE_REQUEST_SELECTOR, "Must use whitelisted functions");
    _;
  }

  /**
   * @dev Reverts if the given payload is less than needed to create a request
   * @param _data The request payload
   */
  modifier validRequestLength(bytes memory _data) {
    require(_data.length >= MINIMUM_REQUEST_LENGTH, "Invalid request length");
    _;
  }
}

// File: @chainlink/contracts/src/v0.6/Oracle.sol


pragma solidity 0.6.6;








/**
 * @title The Chainlink Oracle contract
 * @notice Node operators can deploy this contract to fulfill requests sent to them
 */
contract Oracle is ChainlinkRequestInterface, OracleInterface, Ownable, LinkTokenReceiver, WithdrawalInterface {
  using SafeMathChainlink for uint256;

  uint256 constant public EXPIRY_TIME = 5 minutes;
  uint256 constant private MINIMUM_CONSUMER_GAS_LIMIT = 400000;
  // We initialize fields to 1 instead of 0 so that the first invocation
  // does not cost more gas.
  uint256 constant private ONE_FOR_CONSISTENT_GAS_COST = 1;

  LinkTokenInterface internal LinkToken;
  mapping(bytes32 => bytes32) private commitments;
  mapping(address => bool) private authorizedNodes;
  uint256 private withdrawableTokens = ONE_FOR_CONSISTENT_GAS_COST;

  event OracleRequest(
    bytes32 indexed specId,
    address requester,
    bytes32 requestId,
    uint256 payment,
    address callbackAddr,
    bytes4 callbackFunctionId,
    uint256 cancelExpiration,
    uint256 dataVersion,
    bytes data
  );

  event CancelOracleRequest(
    bytes32 indexed requestId
  );

  /**
   * @notice Deploy with the address of the LINK token
   * @dev Sets the LinkToken address for the imported LinkTokenInterface
   * @param _link The address of the LINK token
   */
  constructor(address _link)
    public
    Ownable()
  {
    LinkToken = LinkTokenInterface(_link); // external but already deployed and unalterable
  }

  /**
   * @notice Creates the Chainlink request
   * @dev Stores the hash of the params as the on-chain commitment for the request.
   * Emits OracleRequest event for the Chainlink node to detect.
   * @param _sender The sender of the request
   * @param _payment The amount of payment given (specified in wei)
   * @param _specId The Job Specification ID
   * @param _callbackAddress The callback address for the response
   * @param _callbackFunctionId The callback function ID for the response
   * @param _nonce The nonce sent by the requester
   * @param _dataVersion The specified data version
   * @param _data The CBOR payload of the request
   */
  function oracleRequest(
    address _sender,
    uint256 _payment,
    bytes32 _specId,
    address _callbackAddress,
    bytes4 _callbackFunctionId,
    uint256 _nonce,
    uint256 _dataVersion,
    bytes calldata _data
  )
    external
    override
    onlyLINK()
    checkCallbackAddress(_callbackAddress)
  {
    bytes32 requestId = keccak256(abi.encodePacked(_sender, _nonce));
    require(commitments[requestId] == 0, "Must use a unique ID");
    // solhint-disable-next-line not-rely-on-time
    uint256 expiration = now.add(EXPIRY_TIME);

    commitments[requestId] = keccak256(
      abi.encodePacked(
        _payment,
        _callbackAddress,
        _callbackFunctionId,
        expiration
      )
    );

    emit OracleRequest(
      _specId,
      _sender,
      requestId,
      _payment,
      _callbackAddress,
      _callbackFunctionId,
      expiration,
      _dataVersion,
      _data);
  }

  /**
   * @notice Called by the Chainlink node to fulfill requests
   * @dev Given params must hash back to the commitment stored from `oracleRequest`.
   * Will call the callback address' callback function without bubbling up error
   * checking in a `require` so that the node can get paid.
   * @param _requestId The fulfillment request ID that must match the requester's
   * @param _payment The payment amount that will be released for the oracle (specified in wei)
   * @param _callbackAddress The callback address to call for fulfillment
   * @param _callbackFunctionId The callback function ID to use for fulfillment
   * @param _expiration The expiration that the node should respond by before the requester can cancel
   * @param _data The data to return to the consuming contract
   * @return Status if the external call was successful
   */
  function fulfillOracleRequest(
    bytes32 _requestId,
    uint256 _payment,
    address _callbackAddress,
    bytes4 _callbackFunctionId,
    uint256 _expiration,
    bytes32 _data
  )
    external
    onlyAuthorizedNode
    override
    isValidRequest(_requestId)
    returns (bool)
  {
    bytes32 paramsHash = keccak256(
      abi.encodePacked(
        _payment,
        _callbackAddress,
        _callbackFunctionId,
        _expiration
      )
    );
    require(commitments[_requestId] == paramsHash, "Params do not match request ID");
    withdrawableTokens = withdrawableTokens.add(_payment);
    delete commitments[_requestId];
    require(gasleft() >= MINIMUM_CONSUMER_GAS_LIMIT, "Must provide consumer enough gas");
    // All updates to the oracle's fulfillment should come before calling the
    // callback(addr+functionId) as it is untrusted.
    // See: https://solidity.readthedocs.io/en/develop/security-considerations.html#use-the-checks-effects-interactions-pattern
    (bool success, ) = _callbackAddress.call(abi.encodeWithSelector(_callbackFunctionId, _requestId, _data)); // solhint-disable-line avoid-low-level-calls
    return success;
  }

  /**
   * @notice Use this to check if a node is authorized for fulfilling requests
   * @param _node The address of the Chainlink node
   * @return The authorization status of the node
   */
  function getAuthorizationStatus(address _node)
    external
    view
    override
    returns (bool)
  {
    return authorizedNodes[_node];
  }

  /**
   * @notice Sets the fulfillment permission for a given node. Use `true` to allow, `false` to disallow.
   * @param _node The address of the Chainlink node
   * @param _allowed Bool value to determine if the node can fulfill requests
   */
  function setFulfillmentPermission(address _node, bool _allowed)
    external
    override
    onlyOwner()
  {
    authorizedNodes[_node] = _allowed;
  }

  /**
   * @notice Allows the node operator to withdraw earned LINK to a given address
   * @dev The owner of the contract can be another wallet and does not have to be a Chainlink node
   * @param _recipient The address to send the LINK token to
   * @param _amount The amount to send (specified in wei)
   */
  function withdraw(address _recipient, uint256 _amount)
    external
    override(OracleInterface, WithdrawalInterface)
    onlyOwner
    hasAvailableFunds(_amount)
  {
    withdrawableTokens = withdrawableTokens.sub(_amount);
    assert(LinkToken.transfer(_recipient, _amount));
  }

  /**
   * @notice Displays the amount of LINK that is available for the node operator to withdraw
   * @dev We use `ONE_FOR_CONSISTENT_GAS_COST` in place of 0 in storage
   * @return The amount of withdrawable LINK on the contract
   */
  function withdrawable()
    external
    view
    override(OracleInterface, WithdrawalInterface)
    onlyOwner()
    returns (uint256)
  {
    return withdrawableTokens.sub(ONE_FOR_CONSISTENT_GAS_COST);
  }

  /**
   * @notice Allows requesters to cancel requests sent to this oracle contract. Will transfer the LINK
   * sent for the request back to the requester's address.
   * @dev Given params must hash to a commitment stored on the contract in order for the request to be valid
   * Emits CancelOracleRequest event.
   * @param _requestId The request ID
   * @param _payment The amount of payment given (specified in wei)
   * @param _callbackFunc The requester's specified callback address
   * @param _expiration The time of the expiration for the request
   */
  function cancelOracleRequest(
    bytes32 _requestId,
    uint256 _payment,
    bytes4 _callbackFunc,
    uint256 _expiration
  )
    external
    override
  {
    bytes32 paramsHash = keccak256(
      abi.encodePacked(
        _payment,
        msg.sender,
        _callbackFunc,
        _expiration)
    );
    require(paramsHash == commitments[_requestId], "Params do not match request ID");
    // solhint-disable-next-line not-rely-on-time
    require(_expiration <= now, "Request is not expired");

    delete commitments[_requestId];
    emit CancelOracleRequest(_requestId);

    assert(LinkToken.transfer(msg.sender, _payment));
  }

  /**
   * @notice Returns the address of the LINK token
   * @dev This is the public implementation for chainlinkTokenAddress, which is
   * an internal method of the ChainlinkClient contract
   */
  function getChainlinkToken()
    public
    view
    override
    returns (address)
  {
    return address(LinkToken);
  }

  // MODIFIERS

  /**
   * @dev Reverts if amount requested is greater than withdrawable balance
   * @param _amount The given amount to compare to `withdrawableTokens`
   */
  modifier hasAvailableFunds(uint256 _amount) {
    require(withdrawableTokens >= _amount.add(ONE_FOR_CONSISTENT_GAS_COST), "Amount requested is greater than withdrawable balance");
    _;
  }

  /**
   * @dev Reverts if request ID does not exist
   * @param _requestId The given request ID to check in stored `commitments`
   */
  modifier isValidRequest(bytes32 _requestId) {
    require(commitments[_requestId] != 0, "Must have a valid requestId");
    _;
  }

  /**
   * @dev Reverts if `msg.sender` is not authorized to fulfill requests
   */
  modifier onlyAuthorizedNode() {
    require(authorizedNodes[msg.sender] || msg.sender == owner(), "Not an authorized node to fulfill requests");
    _;
  }

  /**
   * @dev Reverts if the callback address is the LINK token
   * @param _to The callback address
   */
  modifier checkCallbackAddress(address _to) {
    require(_to != address(LinkToken), "Cannot callback to LINK");
    _;
  }

}

// File: docs.chain.link/samples/NodeOperators/Oracle.sol


pragma solidity 0.6.6;

Contract ABI

[{"inputs":[{"internalType":"address","name":"_link","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"requestId","type":"bytes32"}],"name":"CancelOracleRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"specId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"requester","type":"address"},{"indexed":false,"internalType":"bytes32","name":"requestId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"payment","type":"uint256"},{"indexed":false,"internalType":"address","name":"callbackAddr","type":"address"},{"indexed":false,"internalType":"bytes4","name":"callbackFunctionId","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"cancelExpiration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dataVersion","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"OracleRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"EXPIRY_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_requestId","type":"bytes32"},{"internalType":"uint256","name":"_payment","type":"uint256"},{"internalType":"bytes4","name":"_callbackFunc","type":"bytes4"},{"internalType":"uint256","name":"_expiration","type":"uint256"}],"name":"cancelOracleRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_requestId","type":"bytes32"},{"internalType":"uint256","name":"_payment","type":"uint256"},{"internalType":"address","name":"_callbackAddress","type":"address"},{"internalType":"bytes4","name":"_callbackFunctionId","type":"bytes4"},{"internalType":"uint256","name":"_expiration","type":"uint256"},{"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"fulfillOracleRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_node","type":"address"}],"name":"getAuthorizationStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainlinkToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"_payment","type":"uint256"},{"internalType":"bytes32","name":"_specId","type":"bytes32"},{"internalType":"address","name":"_callbackAddress","type":"address"},{"internalType":"bytes4","name":"_callbackFunctionId","type":"bytes4"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"uint256","name":"_dataVersion","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"oracleRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_node","type":"address"},{"internalType":"bool","name":"_allowed","type":"bool"}],"name":"setFulfillmentPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

6080604052600160045534801561001557600080fd5b50604051611e6e380380611e6e8339818101604052602081101561003857600080fd5b8101908080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050611d18806101566000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80637fcd56db1161008c578063a4c0ed3611610066578063a4c0ed3614610439578063d3e9c3141461051e578063f2fde38b1461057a578063f3fef3a3146105be576100cf565b80637fcd56db1461037d5780638da5cb5b146103cd5780638f32d59b14610417576100cf565b8063165d35e1146100d4578063404299461461011e5780634ab0d190146102295780634b602282146102d657806350188301146102f45780636ee4d55314610312575b600080fd5b6100dc61060c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610227600480360361010081101561013557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291908035906020019092919080359060200190929190803590602001906401000000008111156101e357600080fd5b8201836020820111156101f557600080fd5b8035906020019184600183028401116401000000008311171561021757600080fd5b9091929391929390505050610636565b005b6102bc600480360360c081101561023f57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291908035906020019092919080359060200190929190505050610aac565b604051808215151515815260200191505060405180910390f35b6102de610f3b565b6040518082815260200191505060405180910390f35b6102fc610f41565b6040518082815260200191505060405180910390f35b61037b6004803603608081101561032857600080fd5b81019080803590602001909291908035906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919080359060200190929190505050610fd8565b005b6103cb6004803603604081101561039357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506112bb565b005b6103d5611390565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61041f6113b9565b604051808215151515815260200191505060405180910390f35b61051c6004803603606081101561044f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561049657600080fd5b8201836020820111156104a857600080fd5b803590602001918460018302840111640100000000831117156104ca57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611410565b005b6105606004803603602081101561053457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611739565b604051808215151515815260200191505060405180910390f35b6105bc6004803603602081101561059057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061178f565b005b61060a600480360360408110156105d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611815565b005b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61063e61060c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4d75737420757365204c494e4b20746f6b656e0000000000000000000000000081525060200191505060405180910390fd5b85600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156107a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f742063616c6c6261636b20746f204c494e4b00000000000000000081525060200191505060405180910390fd5b60008a86604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401828152602001925050506040516020818303038152906040528051906020012090506000801b600260008381526020019081526020016000205414610890576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4d75737420757365206120756e6971756520494400000000000000000000000081525060200191505060405180910390fd5b60006108a761012c42611a0890919063ffffffff16565b90508a898983604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600401828152602001945050505050604051602081830303815290604052805190602001206002600084815260200190815260200160002081905550897fd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c658d848e8d8d878d8d8d604051808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509a505050505050505050505060405180910390a2505050505050505050505050565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610b385750610b09611390565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611cb9602a913960400191505060405180910390fd5b866000801b60026000838152602001908152602001600020541415610c1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4d757374206861766520612076616c696420726571756573744964000000000081525060200191505060405180910390fd5b600087878787604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260040182815260200194505050505060405160208183030381529060405280519060200120905080600260008b81526020019081526020016000205414610d52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f506172616d7320646f206e6f74206d617463682072657175657374204944000081525060200191505060405180910390fd5b610d6788600454611a0890919063ffffffff16565b600481905550600260008a81526020019081526020016000206000905562061a805a1015610dfd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4d7573742070726f7669646520636f6e73756d657220656e6f7567682067617381525060200191505060405180910390fd5b60008773ffffffffffffffffffffffffffffffffffffffff16878b876040516024018083815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310610ec05780518252602082019150602081019050602083039250610e9d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610f22576040519150601f19603f3d011682016040523d82523d6000602084013e610f27565b606091505b505090508093505050509695505050505050565b61012c81565b6000610f4b6113b9565b610fbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610fd36001600454611a9090919063ffffffff16565b905090565b600083338484604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260040182815260200194505050505060405160208183030381529060405280519060200120905060026000868152602001908152602001600020548114611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f506172616d7320646f206e6f74206d617463682072657175657374204944000081525060200191505060405180910390fd5b42821115611186576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f52657175657374206973206e6f7420657870697265640000000000000000000081525060200191505060405180910390fd5b6002600086815260200190815260200160002060009055847fa7842b9ec549398102c0d91b1b9919b2f20558aefdadf57528a95c6cd3292e9360405160405180910390a2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561127357600080fd5b505af1158015611287573d6000803e3d6000fd5b505050506040513d602081101561129d57600080fd5b81019080805190602001909291905050506112b457fe5b5050505050565b6112c36113b9565b611335576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b61141861060c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4d75737420757365204c494e4b20746f6b656e0000000000000000000000000081525060200191505060405180910390fd5b80600260200260040181511015611537576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f496e76616c69642072657175657374206c656e6774680000000000000000000081525060200191505060405180910390fd5b81600060208201519050634042994660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146115fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4d757374207573652077686974656c69737465642066756e6374696f6e73000081525060200191505060405180910390fd5b85602485015284604485015260003073ffffffffffffffffffffffffffffffffffffffff16856040518082805190602001908083835b602083106116545780518252602082019150602081019050602083039250611631565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146116b4576040519150601f19603f3d011682016040523d82523d6000602084013e6116b9565b606091505b5050905080611730576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f556e61626c6520746f206372656174652072657175657374000000000000000081525060200191505060405180910390fd5b50505050505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6117976113b9565b611809576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61181281611b19565b50565b61181d6113b9565b61188f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806118a4600182611a0890919063ffffffff16565b60045410156118fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180611c846035913960400191505060405180910390fd5b61191382600454611a9090919063ffffffff16565b600481905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156119c257600080fd5b505af11580156119d6573d6000803e3d6000fd5b505050506040513d60208110156119ec57600080fd5b8101908080519060200190929190505050611a0357fe5b505050565b600080828401905083811015611a86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600082821115611b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611c5e6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416d6f756e74207265717565737465642069732067726561746572207468616e20776974686472617761626c652062616c616e63654e6f7420616e20617574686f72697a6564206e6f646520746f2066756c66696c6c207265717565737473a2646970667358221220302f4ffff7d7f1b5956f3df4d8e5f6b3be0a6237b21145ce2f7afd9c341446af64736f6c63430006060033000000000000000000000000f97f4df75117a78c1a5a0dbb814af92458539fb4

Deployed ByteCode Sourcemap

11155:9626:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11155:9626:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;19493:129:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13172:951;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;13172:951:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;13172:951:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;13172:951:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;13172:951:0;;;;;;;;;;;;:::i;:::-;;14996:1197;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;14996:1197:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11313:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17825:214;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18618:665;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;18618:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16805:158;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;16805:158:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4508:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4842:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9228:682;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;9228:682:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;9228:682:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;9228:682:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;9228:682:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;9228:682:0;;;;;;;;;;;;;;;:::i;:::-;;16397:150;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;16397:150:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5073:103;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;5073:103:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;17286:290;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;17286:290:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19493:129;19572:7;19606:9;;;;;;;;;;;19591:25;;19493:129;:::o;13172:951::-;10103:19;:17;:19::i;:::-;10089:33;;:10;:33;;;10081:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13476:16:::1;20724:9;;;;;;;;;;;20709:25;;:3;:25;;;;20701:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13504:17:::2;13551:7;13560:6;13534:33;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13534:33:0;;;13524:44;;;;;;13504:64;;13609:1;13583:27:::0;::::2;:11;:22;13595:9;13583:22;;;;;;;;;;;;:27;13575:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;13693:18;13714:20;11351:9;13714:3;:7;;:20;;;;:::i;:::-;13693:41;;13813:8;13832:16;13859:19;13889:10;13786:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13786:122:0;;;13768:147;;;;;;13743:11;:22;13755:9;13743:22;;;;;;;;;;;:172;;;;13951:7;13929:188;13967:7;13983:9;14001:8;14018:16;14043:19;14071:10;14090:12;14111:5;;13929:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;13929:188:0;;;;;;;;;;;;;;;;;;;;;20769:1;;10153::::1;13172:951:::0;;;;;;;;;:::o;14996:1197::-;15287:4;20419:15;:27;20435:10;20419:27;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;20464:7;:5;:7::i;:::-;20450:21;;:10;:21;;;20419:52;20411:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15261:10:::1;20234:1;20207:28:::0;::::1;:11;:23;20219:10;20207:23;;;;;;;;;;;;:28;;20199:68;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;15303:18:::2;15369:8;15388:16;15415:19;15445:11;15342:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15342:123:0;;;15324:148;;;;;;15303:169;;15514:10;15487:11;:23;15499:10;15487:23;;;;;;;;;;;;:37;15479:80;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;15587:32;15610:8;15587:18;;:22;;:32;;;;:::i;:::-;15566:18;:53;;;;15633:11;:23;15645:10;15633:23;;;;;;;;;;;15626:30;;;11419:6;15671:9;:39;;15663:84;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;16017:12;16035:16;:21;;16080:19;16101:10;16113:5;16057:62;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16057:62:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;16057:62:0;16035:85;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;16035:85:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;16016:104:0;;;16180:7;16173:14;;;;20525:1:::1;14996:1197:::0;;;;;;;;:::o;11313:47::-;11351:9;11313:47;:::o;17825:214::-;17956:7;4702:9;:7;:9::i;:::-;4694:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17982:51:::1;11589:1;17982:18;;:22;;:51;;;;:::i;:::-;17975:58;;17825:214:::0;:::o;18618:665::-;18791:18;18857:8;18876:10;18897:13;18921:11;18830:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;18830:103:0;;;18812:128;;;;;;18791:149;;18969:11;:23;18981:10;18969:23;;;;;;;;;;;;18955:10;:37;18947:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19108:3;19093:11;:18;;19085:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19154:11;:23;19166:10;19154:23;;;;;;;;;;;19147:30;;;19209:10;19189:31;;;;;;;;;;19236:9;;;;;;;;;;;:18;;;19255:10;19267:8;19236:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19236:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19236:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;19236:40:0;;;;;;;;;;;;;;;;19229:48;;;;18618:665;;;;;:::o;16805:158::-;4702:9;:7;:9::i;:::-;4694:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16949:8:::1;16924:15;:22;16940:5;16924:22;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;16805:158:::0;;:::o;4508:73::-;4546:7;4569:6;;;;;;;;;;;4562:13;;4508:73;:::o;4842:86::-;4882:4;4916:6;;;;;;;;;;;4902:20;;:10;:20;;;4895:27;;4842:86;:::o;9228:682::-;10103:19;:17;:19::i;:::-;10089:33;;:10;:33;;;10081:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9377:5:::1;8728:1;8803:2;:27;8672:1;8784:47;10838:5;:12;:38;;10830:73;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;9415:5:::2;10388:19;10523:2;10516:5;10512:14;10506:21;10490:37;;8614:10;10564:23;;10548:39;;;:12;:39;;;;10540:82;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;9531:7:::3;9526:2;9519:5;9515:14;9508:31;9663:7;9658:2;9651:5;9647:14;9640:31;9779:12;9805:4;9797:26;;9824:5;9797:33;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;9797:33:0;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;9778:52:0;;;9868:7;9860:44;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;10629:1;10910::::2;;10153::::1;9228:682:::0;;;:::o;16397:150::-;16496:4;16519:15;:22;16535:5;16519:22;;;;;;;;;;;;;;;;;;;;;;;;;16512:29;;16397:150;;;:::o;5073:103::-;4702:9;:7;:9::i;:::-;4694:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5142:28:::1;5161:8;5142:18;:28::i;:::-;5073:103:::0;:::o;17286:290::-;4702:9;:7;:9::i;:::-;4694:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17445:7:::1;19890:40;11589:1;19890:7;:11;;:40;;;;:::i;:::-;19868:18;;:62;;19860:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17485:31:::2;17508:7;17485:18;;:22;;:31;;;;:::i;:::-;17464:18;:52;;;;17530:9;;;;;;;;;;;:18;;;17549:10;17561:7;17530:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;17530:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;17530:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;17530:39:0;;;;;;;;;;;;;;;;17523:47;;;;4755:1:::1;17286:290:::0;;:::o;929:167::-;987:7;1003:9;1019:1;1015;:5;1003:17;;1040:1;1035;:6;;1027:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1089:1;1082:8;;;929:167;;;;:::o;1359:170::-;1417:7;1446:1;1441;:6;;1433:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1489:9;1505:1;1501;:5;1489:17;;1522:1;1515:8;;;1359:170;;;;:::o;5274:215::-;5364:1;5344:22;;:8;:22;;;;5336:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5450:8;5421:38;;5442:6;;;;;;;;;;;5421:38;;;;;;;;;;;;5475:8;5466:6;;:17;;;;;;;;;;;;;;;;;;5274:215;:::o

Metadata Hash

302f4ffff7d7f1b5956f3df4d8e5f6b3be0a6237b21145ce2f7afd9c341446af
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.