More Info
Private Name Tags
ContractCreator
Funded By
N/A
Latest 25 from a total of 7,640 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Request Rate Upd... | 12221873 | 1360 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12215326 | 1361 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12208746 | 1362 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12202290 | 1363 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12195836 | 1364 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12189296 | 1365 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12182814 | 1366 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12176304 | 1367 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12169744 | 1368 days ago | IN | 0 ETH | 0.19380744 | ||||
Request Rate Upd... | 12163217 | 1369 days ago | IN | 0 ETH | 0.19380744 | ||||
Request Rate Upd... | 12156763 | 1370 days ago | IN | 0 ETH | 0.19380744 | ||||
Request Rate Upd... | 12150253 | 1371 days ago | IN | 0 ETH | 0.234507 | ||||
Request Rate Upd... | 12143793 | 1372 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12137275 | 1373 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12130765 | 1374 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12124272 | 1375 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12117786 | 1376 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12111246 | 1377 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12104735 | 1378 days ago | IN | 0 ETH | 0.19380744 | ||||
Request Rate Upd... | 12098248 | 1379 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12091747 | 1380 days ago | IN | 0 ETH | 0.19380744 | ||||
Request Rate Upd... | 12085255 | 1381 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12078834 | 1382 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12072306 | 1383 days ago | IN | 0 ETH | 0.17618858 | ||||
Request Rate Upd... | 12065799 | 1384 days ago | IN | 0 ETH | 0.17618858 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12326949 | 1344 days ago | 0 ETH |
Loading...
Loading
Contract Self Destruct called at Txn Hash 0x5c833504d62cd3b01674473187c6fb6558ccebd46f5545703c579e60b93c05c7
Contract Name:
Aggregator
Compiler Version
v0.4.24+commit.e67f0147
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-12-10 */ pragma solidity 0.4.24; /** * @dev A library for working with mutable byte buffers in Solidity. * * Byte buffers are mutable and expandable, and provide a variety of primitives * for writing to them. At any time you can fetch a bytes object containing the * current contents of the buffer. The bytes object should not be stored between * operations, as it may change due to resizing of the buffer. */ library Buffer { /** * @dev Represents a mutable buffer. Buffers have a current value (buf) and * a capacity. The capacity may be longer than the current value, in * which case it can be extended without the need to allocate more memory. */ struct buffer { bytes buf; uint capacity; } /** * @dev Initializes a buffer with an initial capacity. * @param buf The buffer to initialize. * @param capacity The number of bytes of space to allocate the buffer. * @return The buffer, for chaining. */ function init(buffer memory buf, uint capacity) internal pure returns(buffer memory) { if (capacity % 32 != 0) { capacity += 32 - (capacity % 32); } // Allocate space for the buffer data buf.capacity = capacity; assembly { let ptr := mload(0x40) mstore(buf, ptr) mstore(ptr, 0) mstore(0x40, add(32, add(ptr, capacity))) } return buf; } /** * @dev Initializes a new buffer from an existing bytes object. * Changes to the buffer may mutate the original value. * @param b The bytes object to initialize the buffer with. * @return A new buffer. */ function fromBytes(bytes memory b) internal pure returns(buffer memory) { buffer memory buf; buf.buf = b; buf.capacity = b.length; return buf; } function resize(buffer memory buf, uint capacity) private pure { bytes memory oldbuf = buf.buf; init(buf, capacity); append(buf, oldbuf); } function max(uint a, uint b) private pure returns(uint) { if (a > b) { return a; } return b; } /** * @dev Sets buffer length to 0. * @param buf The buffer to truncate. * @return The original buffer, for chaining.. */ function truncate(buffer memory buf) internal pure returns (buffer memory) { assembly { let bufptr := mload(buf) mstore(bufptr, 0) } return buf; } /** * @dev Writes a byte string to a buffer. Resizes if doing so would exceed * the capacity of the buffer. * @param buf The buffer to append to. * @param off The start offset to write to. * @param data The data to append. * @param len The number of bytes to copy. * @return The original buffer, for chaining. */ function write(buffer memory buf, uint off, bytes memory data, uint len) internal pure returns(buffer memory) { require(len <= data.length); if (off + len > buf.capacity) { resize(buf, max(buf.capacity, len + off) * 2); } uint dest; uint src; assembly { // Memory address of the buffer data let bufptr := mload(buf) // Length of existing buffer data let buflen := mload(bufptr) // Start address = buffer address + offset + sizeof(buffer length) dest := add(add(bufptr, 32), off) // Update buffer length if we're extending it if gt(add(len, off), buflen) { mstore(bufptr, add(len, off)) } src := add(data, 32) } // Copy word-length chunks while possible for (; len >= 32; len -= 32) { assembly { mstore(dest, mload(src)) } dest += 32; src += 32; } // Copy remaining bytes uint mask = 256 ** (32 - len) - 1; assembly { let srcpart := and(mload(src), not(mask)) let destpart := and(mload(dest), mask) mstore(dest, or(destpart, srcpart)) } return buf; } /** * @dev Appends a byte string to a buffer. Resizes if doing so would exceed * the capacity of the buffer. * @param buf The buffer to append to. * @param data The data to append. * @param len The number of bytes to copy. * @return The original buffer, for chaining. */ function append(buffer memory buf, bytes memory data, uint len) internal pure returns (buffer memory) { return write(buf, buf.buf.length, data, len); } /** * @dev Appends a byte string to a buffer. Resizes if doing so would exceed * the capacity of the buffer. * @param buf The buffer to append to. * @param data The data to append. * @return The original buffer, for chaining. */ function append(buffer memory buf, bytes memory data) internal pure returns (buffer memory) { return write(buf, buf.buf.length, data, data.length); } /** * @dev Writes a byte to the buffer. Resizes if doing so would exceed the * capacity of the buffer. * @param buf The buffer to append to. * @param off The offset to write the byte at. * @param data The data to append. * @return The original buffer, for chaining. */ function writeUint8(buffer memory buf, uint off, uint8 data) internal pure returns(buffer memory) { if (off >= buf.capacity) { resize(buf, buf.capacity * 2); } assembly { // Memory address of the buffer data let bufptr := mload(buf) // Length of existing buffer data let buflen := mload(bufptr) // Address = buffer address + sizeof(buffer length) + off let dest := add(add(bufptr, off), 32) mstore8(dest, data) // Update buffer length if we extended it if eq(off, buflen) { mstore(bufptr, add(buflen, 1)) } } return buf; } /** * @dev Appends a byte to the buffer. Resizes if doing so would exceed the * capacity of the buffer. * @param buf The buffer to append to. * @param data The data to append. * @return The original buffer, for chaining. */ function appendUint8(buffer memory buf, uint8 data) internal pure returns(buffer memory) { return writeUint8(buf, buf.buf.length, data); } /** * @dev Writes up to 32 bytes to the buffer. Resizes if doing so would * exceed the capacity of the buffer. * @param buf The buffer to append to. * @param off The offset to write at. * @param data The data to append. * @param len The number of bytes to write (left-aligned). * @return The original buffer, for chaining. */ function write(buffer memory buf, uint off, bytes32 data, uint len) private pure returns(buffer memory) { if (len + off > buf.capacity) { resize(buf, (len + off) * 2); } uint mask = 256 ** len - 1; // Right-align data data = data >> (8 * (32 - len)); assembly { // Memory address of the buffer data let bufptr := mload(buf) // Address = buffer address + sizeof(buffer length) + off + len let dest := add(add(bufptr, off), len) mstore(dest, or(and(mload(dest), not(mask)), data)) // Update buffer length if we extended it if gt(add(off, len), mload(bufptr)) { mstore(bufptr, add(off, len)) } } return buf; } /** * @dev Writes a bytes20 to the buffer. Resizes if doing so would exceed the * capacity of the buffer. * @param buf The buffer to append to. * @param off The offset to write at. * @param data The data to append. * @return The original buffer, for chaining. */ function writeBytes20(buffer memory buf, uint off, bytes20 data) internal pure returns (buffer memory) { return write(buf, off, bytes32(data), 20); } /** * @dev Appends a bytes20 to the buffer. Resizes if doing so would exceed * the capacity of the buffer. * @param buf The buffer to append to. * @param data The data to append. * @return The original buffer, for chhaining. */ function appendBytes20(buffer memory buf, bytes20 data) internal pure returns (buffer memory) { return write(buf, buf.buf.length, bytes32(data), 20); } /** * @dev Appends a bytes32 to the buffer. Resizes if doing so would exceed * the capacity of the buffer. * @param buf The buffer to append to. * @param data The data to append. * @return The original buffer, for chaining. */ function appendBytes32(buffer memory buf, bytes32 data) internal pure returns (buffer memory) { return write(buf, buf.buf.length, data, 32); } /** * @dev Writes an integer to the buffer. Resizes if doing so would exceed * the capacity of the buffer. * @param buf The buffer to append to. * @param off The offset to write at. * @param data The data to append. * @param len The number of bytes to write (right-aligned). * @return The original buffer, for chaining. */ function writeInt(buffer memory buf, uint off, uint data, uint len) private pure returns(buffer memory) { if (len + off > buf.capacity) { resize(buf, (len + off) * 2); } uint mask = 256 ** len - 1; assembly { // Memory address of the buffer data let bufptr := mload(buf) // Address = buffer address + off + sizeof(buffer length) + len let dest := add(add(bufptr, off), len) mstore(dest, or(and(mload(dest), not(mask)), data)) // Update buffer length if we extended it if gt(add(off, len), mload(bufptr)) { mstore(bufptr, add(off, len)) } } return buf; } /** * @dev Appends a byte to the end of the buffer. Resizes if doing so would * exceed the capacity of the buffer. * @param buf The buffer to append to. * @param data The data to append. * @return The original buffer. */ function appendInt(buffer memory buf, uint data, uint len) internal pure returns(buffer memory) { return writeInt(buf, buf.buf.length, data, len); } } library CBOR { using Buffer for Buffer.buffer; uint8 private constant MAJOR_TYPE_INT = 0; uint8 private constant MAJOR_TYPE_NEGATIVE_INT = 1; uint8 private constant MAJOR_TYPE_BYTES = 2; uint8 private constant MAJOR_TYPE_STRING = 3; uint8 private constant MAJOR_TYPE_ARRAY = 4; uint8 private constant MAJOR_TYPE_MAP = 5; uint8 private constant MAJOR_TYPE_CONTENT_FREE = 7; function encodeType(Buffer.buffer memory buf, uint8 major, uint value) private pure { if(value <= 23) { buf.appendUint8(uint8((major << 5) | value)); } else if(value <= 0xFF) { buf.appendUint8(uint8((major << 5) | 24)); buf.appendInt(value, 1); } else if(value <= 0xFFFF) { buf.appendUint8(uint8((major << 5) | 25)); buf.appendInt(value, 2); } else if(value <= 0xFFFFFFFF) { buf.appendUint8(uint8((major << 5) | 26)); buf.appendInt(value, 4); } else if(value <= 0xFFFFFFFFFFFFFFFF) { buf.appendUint8(uint8((major << 5) | 27)); buf.appendInt(value, 8); } } function encodeIndefiniteLengthType(Buffer.buffer memory buf, uint8 major) private pure { buf.appendUint8(uint8((major << 5) | 31)); } function encodeUInt(Buffer.buffer memory buf, uint value) internal pure { encodeType(buf, MAJOR_TYPE_INT, value); } function encodeInt(Buffer.buffer memory buf, int value) internal pure { if(value >= 0) { encodeType(buf, MAJOR_TYPE_INT, uint(value)); } else { encodeType(buf, MAJOR_TYPE_NEGATIVE_INT, uint(-1 - value)); } } function encodeBytes(Buffer.buffer memory buf, bytes value) internal pure { encodeType(buf, MAJOR_TYPE_BYTES, value.length); buf.append(value); } function encodeString(Buffer.buffer memory buf, string value) internal pure { encodeType(buf, MAJOR_TYPE_STRING, bytes(value).length); buf.append(bytes(value)); } function startArray(Buffer.buffer memory buf) internal pure { encodeIndefiniteLengthType(buf, MAJOR_TYPE_ARRAY); } function startMap(Buffer.buffer memory buf) internal pure { encodeIndefiniteLengthType(buf, MAJOR_TYPE_MAP); } function endSequence(Buffer.buffer memory buf) internal pure { encodeIndefiniteLengthType(buf, MAJOR_TYPE_CONTENT_FREE); } } /** * @title Library for common Chainlink functions * @dev Uses imported CBOR library for encoding to buffer */ library Chainlink { uint256 internal constant defaultBufferSize = 256; // solhint-disable-line const-name-snakecase using CBOR for Buffer.buffer; struct Request { bytes32 id; address callbackAddress; bytes4 callbackFunctionId; uint256 nonce; Buffer.buffer buf; } /** * @notice Initializes a Chainlink request * @dev Sets the ID, callback address, and callback function signature on the request * @param self The uninitialized request * @param _id The Job Specification ID * @param _callbackAddress The callback address * @param _callbackFunction The callback function signature * @return The initialized request */ function initialize( Request memory self, bytes32 _id, address _callbackAddress, bytes4 _callbackFunction ) internal pure returns (Chainlink.Request memory) { Buffer.init(self.buf, defaultBufferSize); self.id = _id; self.callbackAddress = _callbackAddress; self.callbackFunctionId = _callbackFunction; return self; } /** * @notice Sets the data for the buffer without encoding CBOR on-chain * @dev CBOR can be closed with curly-brackets {} or they can be left off * @param self The initialized request * @param _data The CBOR data */ function setBuffer(Request memory self, bytes _data) internal pure { Buffer.init(self.buf, _data.length); Buffer.append(self.buf, _data); } /** * @notice Adds a string value to the request with a given key name * @param self The initialized request * @param _key The name of the key * @param _value The string value to add */ function add(Request memory self, string _key, string _value) internal pure { self.buf.encodeString(_key); self.buf.encodeString(_value); } /** * @notice Adds a bytes value to the request with a given key name * @param self The initialized request * @param _key The name of the key * @param _value The bytes value to add */ function addBytes(Request memory self, string _key, bytes _value) internal pure { self.buf.encodeString(_key); self.buf.encodeBytes(_value); } /** * @notice Adds a int256 value to the request with a given key name * @param self The initialized request * @param _key The name of the key * @param _value The int256 value to add */ function addInt(Request memory self, string _key, int256 _value) internal pure { self.buf.encodeString(_key); self.buf.encodeInt(_value); } /** * @notice Adds a uint256 value to the request with a given key name * @param self The initialized request * @param _key The name of the key * @param _value The uint256 value to add */ function addUint(Request memory self, string _key, uint256 _value) internal pure { self.buf.encodeString(_key); self.buf.encodeUInt(_value); } /** * @notice Adds an array of strings to the request with a given key name * @param self The initialized request * @param _key The name of the key * @param _values The array of string values to add */ function addStringArray(Request memory self, string _key, string[] memory _values) internal pure { self.buf.encodeString(_key); self.buf.startArray(); for (uint256 i = 0; i < _values.length; i++) { self.buf.encodeString(_values[i]); } self.buf.endSequence(); } } interface ENSInterface { // Logged when the owner of a node assigns a new owner to a subnode. event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner); // Logged when the owner of a node transfers ownership to a new account. event Transfer(bytes32 indexed node, address owner); // Logged when the resolver for a node changes. event NewResolver(bytes32 indexed node, address resolver); // Logged when the TTL of a node changes event NewTTL(bytes32 indexed node, uint64 ttl); function setSubnodeOwner(bytes32 node, bytes32 label, address owner) external; function setResolver(bytes32 node, address resolver) external; function setOwner(bytes32 node, address owner) external; function setTTL(bytes32 node, uint64 ttl) external; function owner(bytes32 node) external view returns (address); function resolver(bytes32 node) external view returns (address); function ttl(bytes32 node) external view returns (uint64); } interface LinkTokenInterface { function allowance(address owner, address spender) external returns (uint256 remaining); function approve(address spender, uint256 value) external returns (bool success); function balanceOf(address owner) external returns (uint256 balance); function decimals() external returns (uint8 decimalPlaces); function decreaseApproval(address spender, uint256 addedValue) external returns (bool success); function increaseApproval(address spender, uint256 subtractedValue) external; function name() external returns (string tokenName); function symbol() external returns (string tokenSymbol); function totalSupply() external returns (uint256 totalTokensIssued); function transfer(address to, uint256 value) external returns (bool success); function transferAndCall(address to, uint256 value, bytes data) external returns (bool success); function transferFrom(address from, address to, uint256 value) external returns (bool success); } interface ChainlinkRequestInterface { function oracleRequest( address sender, uint256 payment, bytes32 id, address callbackAddress, bytes4 callbackFunctionId, uint256 nonce, uint256 version, bytes data ) external; function cancelOracleRequest( bytes32 requestId, uint256 payment, bytes4 callbackFunctionId, uint256 expiration ) external; } interface PointerInterface { function getAddress() external view returns (address); } contract ENSResolver { function addr(bytes32 node) public view returns (address); } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting '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; } c = _a * _b; assert(c / _a == _b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 _a, uint256 _b) internal pure returns (uint256) { // assert(_b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = _a / _b; // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold return _a / _b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { assert(_b <= _a); return _a - _b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) { c = _a + _b; assert(c >= _a); return c; } } /** * @title The ChainlinkClient contract * @notice Contract writers can inherit this contract in order to create requests for the * Chainlink network */ contract ChainlinkClient { using Chainlink for Chainlink.Request; using SafeMath for uint256; uint256 constant internal LINK = 10**18; uint256 constant private AMOUNT_OVERRIDE = 0; address constant private SENDER_OVERRIDE = 0x0; uint256 constant private ARGS_VERSION = 1; bytes32 constant private ENS_TOKEN_SUBNAME = keccak256("link"); bytes32 constant private ENS_ORACLE_SUBNAME = keccak256("oracle"); address constant private LINK_TOKEN_POINTER = 0xC89bD4E1632D3A43CB03AAAd5262cbe4038Bc571; ENSInterface private ens; bytes32 private ensNode; LinkTokenInterface private link; ChainlinkRequestInterface private oracle; uint256 private requests = 1; mapping(bytes32 => address) private pendingRequests; event ChainlinkRequested(bytes32 indexed id); event ChainlinkFulfilled(bytes32 indexed id); event ChainlinkCancelled(bytes32 indexed id); /** * @notice Creates a request that can hold additional parameters * @param _specId The Job Specification ID that the request will be created for * @param _callbackAddress The callback address that the response will be sent to * @param _callbackFunctionSignature The callback function signature to use for the callback address * @return A Chainlink Request struct in memory */ function buildChainlinkRequest( bytes32 _specId, address _callbackAddress, bytes4 _callbackFunctionSignature ) internal pure returns (Chainlink.Request memory) { Chainlink.Request memory req; return req.initialize(_specId, _callbackAddress, _callbackFunctionSignature); } /** * @notice Creates a Chainlink request to the stored oracle address * @dev Calls `chainlinkRequestTo` with the stored oracle address * @param _req The initialized Chainlink Request * @param _payment The amount of LINK to send for the request * @return The request ID */ function sendChainlinkRequest(Chainlink.Request memory _req, uint256 _payment) internal returns (bytes32) { return sendChainlinkRequestTo(oracle, _req, _payment); } /** * @notice Creates a Chainlink request to the specified oracle address * @dev Generates and stores a request ID, increments the local nonce, and uses `transferAndCall` to * send LINK which creates a request on the target oracle contract. * Emits ChainlinkRequested event. * @param _oracle The address of the oracle for the request * @param _req The initialized Chainlink Request * @param _payment The amount of LINK to send for the request * @return The request ID */ function sendChainlinkRequestTo(address _oracle, Chainlink.Request memory _req, uint256 _payment) internal returns (bytes32 requestId) { requestId = keccak256(abi.encodePacked(this, requests)); _req.nonce = requests; pendingRequests[requestId] = _oracle; emit ChainlinkRequested(requestId); require(link.transferAndCall(_oracle, _payment, encodeRequest(_req)), "unable to transferAndCall to oracle"); requests += 1; return requestId; } /** * @notice Allows a request to be cancelled if it has not been fulfilled * @dev Requires keeping track of the expiration value emitted from the oracle contract. * Deletes the request from the `pendingRequests` mapping. * Emits ChainlinkCancelled event. * @param _requestId The request ID * @param _payment The amount of LINK sent for the request * @param _callbackFunc The callback function specified for the request * @param _expiration The time of the expiration for the request */ function cancelChainlinkRequest( bytes32 _requestId, uint256 _payment, bytes4 _callbackFunc, uint256 _expiration ) internal { ChainlinkRequestInterface requested = ChainlinkRequestInterface(pendingRequests[_requestId]); delete pendingRequests[_requestId]; emit ChainlinkCancelled(_requestId); requested.cancelOracleRequest(_requestId, _payment, _callbackFunc, _expiration); } /** * @notice Sets the stored oracle address * @param _oracle The address of the oracle contract */ function setChainlinkOracle(address _oracle) internal { oracle = ChainlinkRequestInterface(_oracle); } /** * @notice Sets the LINK token address * @param _link The address of the LINK token contract */ function setChainlinkToken(address _link) internal { link = LinkTokenInterface(_link); } /** * @notice Sets the Chainlink token address for the public * network as given by the Pointer contract */ function setPublicChainlinkToken() internal { setChainlinkToken(PointerInterface(LINK_TOKEN_POINTER).getAddress()); } /** * @notice Retrieves the stored address of the LINK token * @return The address of the LINK token */ function chainlinkTokenAddress() internal view returns (address) { return address(link); } /** * @notice Retrieves the stored address of the oracle contract * @return The address of the oracle contract */ function chainlinkOracleAddress() internal view returns (address) { return address(oracle); } /** * @notice Allows for a request which was created on another contract to be fulfilled * on this contract * @param _oracle The address of the oracle contract that will fulfill the request * @param _requestId The request ID used for the response */ function addChainlinkExternalRequest(address _oracle, bytes32 _requestId) internal notPendingRequest(_requestId) { pendingRequests[_requestId] = _oracle; } /** * @notice Sets the stored oracle and LINK token contracts with the addresses resolved by ENS * @dev Accounts for subnodes having different resolvers * @param _ens The address of the ENS contract * @param _node The ENS node hash */ function useChainlinkWithENS(address _ens, bytes32 _node) internal { ens = ENSInterface(_ens); ensNode = _node; bytes32 linkSubnode = keccak256(abi.encodePacked(ensNode, ENS_TOKEN_SUBNAME)); ENSResolver resolver = ENSResolver(ens.resolver(linkSubnode)); setChainlinkToken(resolver.addr(linkSubnode)); updateChainlinkOracleWithENS(); } /** * @notice Sets the stored oracle contract with the address resolved by ENS * @dev This may be called on its own as long as `useChainlinkWithENS` has been called previously */ function updateChainlinkOracleWithENS() internal { bytes32 oracleSubnode = keccak256(abi.encodePacked(ensNode, ENS_ORACLE_SUBNAME)); ENSResolver resolver = ENSResolver(ens.resolver(oracleSubnode)); setChainlinkOracle(resolver.addr(oracleSubnode)); } /** * @notice Encodes the request to be sent to the oracle contract * @dev The Chainlink node expects values to be in order for the request to be picked up. Order of types * will be validated in the oracle contract. * @param _req The initialized Chainlink Request * @return The bytes payload for the `transferAndCall` method */ function encodeRequest(Chainlink.Request memory _req) private view returns (bytes memory) { return abi.encodeWithSelector( oracle.oracleRequest.selector, SENDER_OVERRIDE, // Sender value - overridden by onTokenTransfer by the requesting contract's address AMOUNT_OVERRIDE, // Amount value - overridden by onTokenTransfer by the actual amount of LINK sent _req.id, _req.callbackAddress, _req.callbackFunctionId, _req.nonce, ARGS_VERSION, _req.buf.buf); } /** * @notice Ensures that the fulfillment is valid for this contract * @dev Use if the contract developer prefers methods instead of modifiers for validation * @param _requestId The request ID for fulfillment */ function validateChainlinkCallback(bytes32 _requestId) internal recordChainlinkFulfillment(_requestId) // solhint-disable-next-line no-empty-blocks {} /** * @dev Reverts if the sender is not the oracle of the request. * Emits ChainlinkFulfilled event. * @param _requestId The request ID for fulfillment */ modifier recordChainlinkFulfillment(bytes32 _requestId) { require(msg.sender == pendingRequests[_requestId], "Source must be the oracle of the request"); delete pendingRequests[_requestId]; emit ChainlinkFulfilled(_requestId); _; } /** * @dev Reverts if the request is already pending * @param _requestId The request ID for fulfillment */ modifier notPendingRequest(bytes32 _requestId) { require(pendingRequests[_requestId] == address(0), "Request is already pending"); _; } } interface AggregatorInterface { function latestAnswer() external view returns (int256); function latestTimestamp() external view returns (uint256); function latestRound() external view returns (uint256); function getAnswer(uint256 roundId) external view returns (int256); function getTimestamp(uint256 roundId) external view returns (uint256); event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 timestamp); event NewRound(uint256 indexed roundId, address indexed startedBy); } library SignedSafeMath { /** * @dev Adds two int256s and makes sure the result doesn't overflow. Signed * integers aren't supported by the SafeMath library, thus this method * @param _a The first number to be added * @param _a The second number to be added */ function add(int256 _a, int256 _b) internal pure returns (int256) { int256 c = _a + _b; require((_b >= 0 && c >= _a) || (_b < 0 && c < _a), "SignedSafeMath: addition overflow"); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } /** * @title An example Chainlink contract with aggregation * @notice Requesters can use this contract as a framework for creating * requests to multiple Chainlink nodes and running aggregation * as the contract receives answers. */ contract Aggregator is AggregatorInterface, ChainlinkClient, Ownable { using SignedSafeMath for int256; struct Answer { uint128 minimumResponses; uint128 maxResponses; int256[] responses; } event ResponseReceived(int256 indexed response, uint256 indexed answerId, address indexed sender); int256 private currentAnswerValue; uint256 private updatedTimestampValue; uint256 private latestCompletedAnswer; uint128 public paymentAmount; uint128 public minimumResponses; bytes32[] public jobIds; address[] public oracles; uint256 private answerCounter = 1; mapping(address => bool) public authorizedRequesters; mapping(bytes32 => uint256) private requestAnswers; mapping(uint256 => Answer) private answers; mapping(uint256 => int256) private currentAnswers; mapping(uint256 => uint256) private updatedTimestamps; uint256 constant private MAX_ORACLE_COUNT = 45; /** * @notice Deploy with the address of the LINK token and arrays of matching * length containing the addresses of the oracles and their corresponding * Job IDs. * @dev Sets the LinkToken address for the network, addresses of the oracles, * and jobIds in storage. * @param _link The address of the LINK token * @param _paymentAmount the amount of LINK to be sent to each oracle for each request * @param _minimumResponses the minimum number of responses * before an answer will be calculated * @param _oracles An array of oracle addresses * @param _jobIds An array of Job IDs */ constructor( address _link, uint128 _paymentAmount, uint128 _minimumResponses, address[] _oracles, bytes32[] _jobIds ) public Ownable() { setChainlinkToken(_link); updateRequestDetails(_paymentAmount, _minimumResponses, _oracles, _jobIds); } /** * @notice Creates a Chainlink request for each oracle in the oracles array. * @dev This example does not include request parameters. Reference any documentation * associated with the Job IDs used to determine the required parameters per-request. */ function requestRateUpdate() external ensureAuthorizedRequester() { Chainlink.Request memory request; bytes32 requestId; uint256 oraclePayment = paymentAmount; for (uint i = 0; i < oracles.length; i++) { request = buildChainlinkRequest(jobIds[i], this, this.chainlinkCallback.selector); requestId = sendChainlinkRequestTo(oracles[i], request, oraclePayment); requestAnswers[requestId] = answerCounter; } answers[answerCounter].minimumResponses = minimumResponses; answers[answerCounter].maxResponses = uint128(oracles.length); answerCounter = answerCounter.add(1); emit NewRound(answerCounter, msg.sender); } /** * @notice Receives the answer from the Chainlink node. * @dev This function can only be called by the oracle that received the request. * @param _clRequestId The Chainlink request ID associated with the answer * @param _response The answer provided by the Chainlink node */ function chainlinkCallback(bytes32 _clRequestId, int256 _response) external { validateChainlinkCallback(_clRequestId); uint256 answerId = requestAnswers[_clRequestId]; delete requestAnswers[_clRequestId]; answers[answerId].responses.push(_response); emit ResponseReceived(_response, answerId, msg.sender); updateLatestAnswer(answerId); deleteAnswer(answerId); } /** * @notice Updates the arrays of oracles and jobIds with new values, * overwriting the old values. * @dev Arrays are validated to be equal length. * @param _paymentAmount the amount of LINK to be sent to each oracle for each request * @param _minimumResponses the minimum number of responses * before an answer will be calculated * @param _oracles An array of oracle addresses * @param _jobIds An array of Job IDs */ function updateRequestDetails( uint128 _paymentAmount, uint128 _minimumResponses, address[] _oracles, bytes32[] _jobIds ) public onlyOwner() validateAnswerRequirements(_minimumResponses, _oracles, _jobIds) { paymentAmount = _paymentAmount; minimumResponses = _minimumResponses; jobIds = _jobIds; oracles = _oracles; } /** * @notice Allows the owner of the contract to withdraw any LINK balance * available on the contract. * @dev The contract will need to have a LINK balance in order to create requests. * @param _recipient The address to receive the LINK tokens * @param _amount The amount of LINK to send from the contract */ function transferLINK(address _recipient, uint256 _amount) public onlyOwner() { LinkTokenInterface linkToken = LinkTokenInterface(chainlinkTokenAddress()); require(linkToken.transfer(_recipient, _amount), "LINK transfer failed"); } /** * @notice Called by the owner to permission other addresses to generate new * requests to oracles. * @param _requester the address whose permissions are being set * @param _allowed boolean that determines whether the requester is * permissioned or not */ function setAuthorization(address _requester, bool _allowed) external onlyOwner() { authorizedRequesters[_requester] = _allowed; } /** * @notice Cancels an outstanding Chainlink request. * The oracle contract requires the request ID and additional metadata to * validate the cancellation. Only old answers can be cancelled. * @param _requestId is the identifier for the chainlink request being cancelled * @param _payment is the amount of LINK paid to the oracle for the request * @param _expiration is the time when the request expires */ function cancelRequest( bytes32 _requestId, uint256 _payment, uint256 _expiration ) external ensureAuthorizedRequester() { uint256 answerId = requestAnswers[_requestId]; require(answerId < latestCompletedAnswer, "Cannot modify an in-progress answer"); delete requestAnswers[_requestId]; answers[answerId].responses.push(0); deleteAnswer(answerId); cancelChainlinkRequest( _requestId, _payment, this.chainlinkCallback.selector, _expiration ); } /** * @notice Called by the owner to kill the contract. This transfers all LINK * balance and ETH balance (if there is any) to the owner. */ function destroy() external onlyOwner() { LinkTokenInterface linkToken = LinkTokenInterface(chainlinkTokenAddress()); transferLINK(owner, linkToken.balanceOf(address(this))); selfdestruct(owner); } /** * @dev Performs aggregation of the answers received from the Chainlink nodes. * Assumes that at least half the oracles are honest and so can't contol the * middle of the ordered responses. * @param _answerId The answer ID associated with the group of requests */ function updateLatestAnswer(uint256 _answerId) private ensureMinResponsesReceived(_answerId) ensureOnlyLatestAnswer(_answerId) { uint256 responseLength = answers[_answerId].responses.length; uint256 middleIndex = responseLength.div(2); int256 currentAnswerTemp; if (responseLength % 2 == 0) { int256 median1 = quickselect(answers[_answerId].responses, middleIndex); int256 median2 = quickselect(answers[_answerId].responses, middleIndex.add(1)); // quickselect is 1 indexed currentAnswerTemp = median1.add(median2) / 2; // signed integers are not supported by SafeMath } else { currentAnswerTemp = quickselect(answers[_answerId].responses, middleIndex.add(1)); // quickselect is 1 indexed } currentAnswerValue = currentAnswerTemp; latestCompletedAnswer = _answerId; updatedTimestampValue = now; updatedTimestamps[_answerId] = now; currentAnswers[_answerId] = currentAnswerTemp; emit AnswerUpdated(currentAnswerTemp, _answerId, now); } /** * @notice get the most recently reported answer */ function latestAnswer() external view returns (int256) { return currentAnswers[latestCompletedAnswer]; } /** * @notice get the last updated at block timestamp */ function latestTimestamp() external view returns (uint256) { return updatedTimestamps[latestCompletedAnswer]; } /** * @notice get past rounds answers * @param _roundId the answer number to retrieve the answer for */ function getAnswer(uint256 _roundId) external view returns (int256) { return currentAnswers[_roundId]; } /** * @notice get block timestamp when an answer was last updated * @param _roundId the answer number to retrieve the updated timestamp for */ function getTimestamp(uint256 _roundId) external view returns (uint256) { return updatedTimestamps[_roundId]; } /** * @notice get the latest completed round where the answer was updated */ function latestRound() external view returns (uint256) { return latestCompletedAnswer; } /** * @dev Returns the kth value of the ordered array * See: http://www.cs.yale.edu/homes/aspnes/pinewiki/QuickSelect.html * @param _a The list of elements to pull from * @param _k The index, 1 based, of the elements you want to pull from when ordered */ function quickselect(int256[] memory _a, uint256 _k) private pure returns (int256) { int256[] memory a = _a; uint256 k = _k; uint256 aLen = a.length; int256[] memory a1 = new int256[](aLen); int256[] memory a2 = new int256[](aLen); uint256 a1Len; uint256 a2Len; int256 pivot; uint256 i; while (true) { pivot = a[aLen.div(2)]; a1Len = 0; a2Len = 0; for (i = 0; i < aLen; i++) { if (a[i] < pivot) { a1[a1Len] = a[i]; a1Len++; } else if (a[i] > pivot) { a2[a2Len] = a[i]; a2Len++; } } if (k <= a1Len) { aLen = a1Len; (a, a1) = swap(a, a1); } else if (k > (aLen.sub(a2Len))) { k = k.sub(aLen.sub(a2Len)); aLen = a2Len; (a, a2) = swap(a, a2); } else { return pivot; } } } /** * @dev Swaps the pointers to two uint256 arrays in memory * @param _a The pointer to the first in memory array * @param _b The pointer to the second in memory array */ function swap(int256[] memory _a, int256[] memory _b) private pure returns(int256[] memory, int256[] memory) { return (_b, _a); } /** * @dev Cleans up the answer record if all responses have been received. * @param _answerId The identifier of the answer to be deleted */ function deleteAnswer(uint256 _answerId) private ensureAllResponsesReceived(_answerId) { delete answers[_answerId]; } /** * @dev Prevents taking an action if the minimum number of responses has not * been received for an answer. * @param _answerId The the identifier of the answer that keeps track of the responses. */ modifier ensureMinResponsesReceived(uint256 _answerId) { if (answers[_answerId].responses.length >= answers[_answerId].minimumResponses) { _; } } /** * @dev Prevents taking an action if not all responses are received for an answer. * @param _answerId The the identifier of the answer that keeps track of the responses. */ modifier ensureAllResponsesReceived(uint256 _answerId) { if (answers[_answerId].responses.length == answers[_answerId].maxResponses) { _; } } /** * @dev Prevents taking an action if a newer answer has been recorded. * @param _answerId The current answer's identifier. * Answer IDs are in ascending order. */ modifier ensureOnlyLatestAnswer(uint256 _answerId) { if (latestCompletedAnswer <= _answerId) { _; } } /** * @dev Ensures corresponding number of oracles and jobs. * @param _oracles The list of oracles. * @param _jobIds The list of jobs. */ modifier validateAnswerRequirements( uint256 _minimumResponses, address[] _oracles, bytes32[] _jobIds ) { require(_oracles.length <= MAX_ORACLE_COUNT, "cannot have more than 45 oracles"); require(_oracles.length >= _minimumResponses, "must have at least as many oracles as responses"); require(_oracles.length == _jobIds.length, "must have exactly as many oracles as job IDs"); _; } /** * @dev Reverts if `msg.sender` is not authorized to make requests. */ modifier ensureAuthorizedRequester() { require(authorizedRequesters[msg.sender] || msg.sender == owner, "Not an authorized address for creating requests"); _; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_requestId","type":"bytes32"},{"name":"_payment","type":"uint256"},{"name":"_expiration","type":"uint256"}],"name":"cancelRequest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"authorizedRequesters","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"jobIds","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"latestAnswer","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minimumResponses","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"oracles","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferLINK","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"latestRound","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_clRequestId","type":"bytes32"},{"name":"_response","type":"int256"}],"name":"chainlinkCallback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_paymentAmount","type":"uint128"},{"name":"_minimumResponses","type":"uint128"},{"name":"_oracles","type":"address[]"},{"name":"_jobIds","type":"bytes32[]"}],"name":"updateRequestDetails","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"latestTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"destroy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_roundId","type":"uint256"}],"name":"getAnswer","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_roundId","type":"uint256"}],"name":"getTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paymentAmount","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"requestRateUpdate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_requester","type":"address"},{"name":"_allowed","type":"bool"}],"name":"setAuthorization","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_link","type":"address"},{"name":"_paymentAmount","type":"uint128"},{"name":"_minimumResponses","type":"uint128"},{"name":"_oracles","type":"address[]"},{"name":"_jobIds","type":"bytes32[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"response","type":"int256"},{"indexed":true,"name":"answerId","type":"uint256"},{"indexed":true,"name":"sender","type":"address"}],"name":"ResponseReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"bytes32"}],"name":"ChainlinkRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"bytes32"}],"name":"ChainlinkFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"bytes32"}],"name":"ChainlinkCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"current","type":"int256"},{"indexed":true,"name":"roundId","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"AnswerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"roundId","type":"uint256"},{"indexed":true,"name":"startedBy","type":"address"}],"name":"NewRound","type":"event"}]
Contract Creation Code
608060405260016004556001600d553480156200001b57600080fd5b506040516200317738038062003177833981018060405281019080805190602001909291908051906020019092919080519060200190929190805182019291906020018051820192919050505033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000c385620000eb640100000000026401000000009004565b620000e0848484846200012f640100000000026401000000009004565b50505050506200055e565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156200018c57600080fd5b826fffffffffffffffffffffffffffffffff168282602d8251111515156200021c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f63616e6e6f742068617665206d6f7265207468616e203435206f7261636c657381525060200191505060405180910390fd5b82825110151515620002bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f6d7573742068617665206174206c65617374206173206d616e79206f7261636c81526020017f657320617320726573706f6e736573000000000000000000000000000000000081525060400191505060405180910390fd5b805182511415156200035c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6d75737420686176652065786163746c79206173206d616e79206f7261636c6581526020017f73206173206a6f6220494473000000000000000000000000000000000000000081525060400191505060405180910390fd5b86600a60006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555085600a60106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600b9080519060200190620003e692919062000409565b5084600c9080519060200190620003ff92919062000461565b5050505050505050565b8280548282559060005260206000209081019282156200044e579160200282015b828111156200044d5782518290600019169055916020019190600101906200042a565b5b5090506200045d9190620004f0565b5090565b828054828255906000526020600020908101928215620004dd579160200282015b82811115620004dc5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000482565b5b509050620004ec919062000518565b5090565b6200051591905b8082111562000511576000816000905550600101620004f7565b5090565b90565b6200055b91905b808211156200055757600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055506001016200051f565b5090565b90565b612c09806200056e6000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806333bfcdd8146101175780633ea478aa1461015c5780634162cc88146101b757806350d25bcd1461020057806354bcd7ff1461022b5780635b69a7d81461027a5780635cd9b90b146102e7578063668a0f02146103345780636a9705b41461035f578063715018a61461039a57806378a66674146103b15780638205bf6a1461049257806383197ef0146104bd5780638da5cb5b146104d4578063b5ab58dc1461052b578063b633620c1461056c578063c35905c6146105ad578063daa6d556146105fc578063eecea00014610613578063f2fde38b14610662575b600080fd5b34801561012357600080fd5b5061015a600480360381019080803560001916906020019092919080359060200190929190803590602001909291905050506106a5565b005b34801561016857600080fd5b5061019d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610941565b604051808215151515815260200191505060405180910390f35b3480156101c357600080fd5b506101e260048036038101908080359060200190929190505050610961565b60405180826000191660001916815260200191505060405180910390f35b34801561020c57600080fd5b50610215610984565b6040518082815260200191505060405180910390f35b34801561023757600080fd5b506102406109a1565b60405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561028657600080fd5b506102a5600480360381019080803590602001909291905050506109c3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102f357600080fd5b50610332600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a01565b005b34801561034057600080fd5b50610349610bc0565b6040518082815260200191505060405180910390f35b34801561036b57600080fd5b50610398600480360381019080803560001916906020019092919080359060200190929190505050610bca565b005b3480156103a657600080fd5b506103af610cae565b005b3480156103bd57600080fd5b5061049060048036038101908080356fffffffffffffffffffffffffffffffff16906020019092919080356fffffffffffffffffffffffffffffffff1690602001909291908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610db3565b005b34801561049e57600080fd5b506104a7611085565b6040518082815260200191505060405180910390f35b3480156104c957600080fd5b506104d26110a2565b005b3480156104e057600080fd5b506104e9611246565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561053757600080fd5b506105566004803603810190808035906020019092919050505061126c565b6040518082815260200191505060405180910390f35b34801561057857600080fd5b5061059760048036038101908080359060200190929190505050611289565b6040518082815260200191505060405180910390f35b3480156105b957600080fd5b506105c26112a6565b60405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561060857600080fd5b506106116112c8565b005b34801561061f57600080fd5b50610660600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611640565b005b34801561066e57600080fd5b506106a3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116f7565b005b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061074c5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156107e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f4e6f7420616e20617574686f72697a6564206164647265737320666f7220637281526020017f656174696e67207265717565737473000000000000000000000000000000000081525060400191505060405180910390fd5b600f60008560001916600019168152602001908152602001600020549050600954811015156108a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f43616e6e6f74206d6f6469667920616e20696e2d70726f677265737320616e7381526020017f776572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600f6000856000191660001916815260200190815260200160002060009055601060008281526020019081526020016000206001016000908060018154018082558091505090600182039060005260206000200160009091929091909150555061090c8161175f565b61093b8484636a9705b47c01000000000000000000000000000000000000000000000000000000000285611836565b50505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b600b8181548110151561097057fe5b906000526020600020016000915090505481565b600060116000600954815260200190815260200160002054905090565b600a60109054906101000a90046fffffffffffffffffffffffffffffffff1681565b600c818154811015156109d257fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a5f57600080fd5b610a676119d1565b90508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610b0c57600080fd5b505af1158015610b20573d6000803e3d6000fd5b505050506040513d6020811015610b3657600080fd5b81019080805190602001909291905050501515610bbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4c494e4b207472616e73666572206661696c656400000000000000000000000081525060200191505060405180910390fd5b505050565b6000600954905090565b6000610bd5836119fb565b600f60008460001916600019168152602001908152602001600020549050600f6000846000191660001916815260200190815260200160002060009055601060008281526020019081526020016000206001018290806001815401808255809150509060018203906000526020600020016000909192909190915055503373ffffffffffffffffffffffffffffffffffffffff1681837fb51168059c83c860caf5b830c5d2e64c2172c6fb2fe9f25447d9838e18d93b6060405160405180910390a4610ca081611b73565b610ca98161175f565b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d0a57600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e0f57600080fd5b826fffffffffffffffffffffffffffffffff168282602d825111151515610e9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f63616e6e6f742068617665206d6f7265207468616e203435206f7261636c657381525060200191505060405180910390fd5b82825110151515610f3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f6d7573742068617665206174206c65617374206173206d616e79206f7261636c81526020017f657320617320726573706f6e736573000000000000000000000000000000000081525060400191505060405180910390fd5b80518251141515610fdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6d75737420686176652065786163746c79206173206d616e79206f7261636c6581526020017f73206173206a6f6220494473000000000000000000000000000000000000000081525060400191505060405180910390fd5b86600a60006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555085600a60106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600b90805190602001906110649291906129b0565b5084600c908051906020019061107b929190612a03565b5050505050505050565b600060126000600954815260200190815260200160002054905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561110057600080fd5b6111086119d1565b905061120b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156111cb57600080fd5b505af11580156111df573d6000803e3d6000fd5b505050506040513d60208110156111f557600080fd5b8101908080519060200190929190505050610a01565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060116000838152602001908152602001600020549050919050565b600060126000838152602001908152602001600020549050919050565b600a60009054906101000a90046fffffffffffffffffffffffffffffffff1681565b6112d0612a8d565b6000806000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061137a5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f4e6f7420616e20617574686f72697a6564206164647265737320666f7220637281526020017f656174696e67207265717565737473000000000000000000000000000000000081525060400191505060405180910390fd5b600a60009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169150600090505b600c80549050811015611517576114a0600b8281548110151561146b57fe5b906000526020600020015430636a9705b47c010000000000000000000000000000000000000000000000000000000002611e5c565b93506114e6600c828154811015156114b457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168584611e8d565b9250600d54600f6000856000191660001916815260200190815260200160002081905550808060010191505061144c565b600a60109054906101000a90046fffffffffffffffffffffffffffffffff1660106000600d54815260200190815260200160002060000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550600c8054905060106000600d54815260200190815260200160002060000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506115ee6001600d5461221990919063ffffffff16565b600d819055503373ffffffffffffffffffffffffffffffffffffffff16600d547fc3c45d1924f55369653f407ee9f095309d1e687b2c0011b1f709042d4f457e1760405160405180910390a350505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561169c57600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561175357600080fd5b61175c81612235565b50565b806010600082815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16601060008381526020019081526020016000206001018054905014156118325760106000838152602001908152602001600020600080820160006101000a8154906fffffffffffffffffffffffffffffffff02191690556000820160106101000a8154906fffffffffffffffffffffffffffffffff021916905560018201600061182f9190612afb565b50505b5050565b600060056000866000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060056000866000191660001916815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905584600019167fe1fe3afa0f7f761ff0a8b89086790efd5140d2907ebd5b7ff6bfcb5e075fd4c560405160405180910390a28073ffffffffffffffffffffffffffffffffffffffff16636ee4d553868686866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808560001916600019168152602001848152602001837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001828152602001945050505050600060405180830381600087803b1580156119b257600080fd5b505af11580156119c6573d6000803e3d6000fd5b505050505050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8060056000826000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f536f75726365206d75737420626520746865206f7261636c65206f662074686581526020017f207265717565737400000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60056000826000191660001916815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905580600019167f7cc135e0cebb02c3480ae5d74d377283180a2601f8f644edf7987b009316c63a60405160405180910390a25050565b6000806000806000856010600082815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166010600083815260200190815260200160002060010180549050101515611e53578680600954111515611e515760106000898152602001908152602001600020600101805490509650611c1e60028861233190919063ffffffff16565b95506000600288811515611c2e57fe5b061415611d4e57611ca3601060008a8152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611c9857602002820191906000526020600020905b815481526020019060010190808311611c84575b505050505087612347565b9350611d26601060008a8152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611d0857602002820191906000526020600020905b815481526020019060010190808311611cf4575b5050505050611d2160018961221990919063ffffffff16565b612347565b92506002611d3d848661257590919063ffffffff16565b811515611d4657fe5b059450611dd2565b611dcf601060008a8152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611db157602002820191906000526020600020905b815481526020019060010190808311611d9d575b5050505050611dca60018961221990919063ffffffff16565b612347565b94505b84600781905550876009819055504260088190555042601260008a81526020019081526020016000208190555084601160008a81526020019081526020016000208190555087857f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f426040518082815260200191505060405180910390a35b505b50505050505050565b611e64612a8d565b611e6c612a8d565b611e8385858584612648909392919063ffffffff16565b9150509392505050565b600030600454604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083101515611f295780518252602082019150602081019050602083039250611f04565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090506004548360600181815250508360056000836000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600019167fb5e6e01e79f91267dc17b4e6314d5d4d03593d2ceee0fbb452b750bd70ea5af960405160405180910390a2600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634000aea0858461203887612702565b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156120db5780820151818401526020810190506120c0565b50505050905090810190601f1680156121085780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561212957600080fd5b505af115801561213d573d6000803e3d6000fd5b505050506040513d602081101561215357600080fd5b810190808051906020019092919050505015156121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f756e61626c6520746f207472616e73666572416e6443616c6c20746f206f726181526020017f636c65000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016004600082825401925050819055508090509392505050565b6000818301905082811015151561222c57fe5b80905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561227157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000818381151561233e57fe5b04905092915050565b600060606000806060806000806000808b98508a975088519650866040519080825280602002602001820160405280156123905781602001602082028038833980820191505090505b509550866040519080825280602002602001820160405280156123c25781602001602082028038833980820191505090505b5094505b60011561256557886123e260028961233190919063ffffffff16565b8151811015156123ee57fe5b9060200190602002015191506000935060009250600090505b868110156124d95781898281518110151561241e57fe5b90602001906020020151121561246f57888181518110151561243c57fe5b90602001906020020151868581518110151561245457fe5b906020019060200201818152505083806001019450506124cc565b81898281518110151561247e57fe5b9060200190602002015113156124cb57888181518110151561249c57fe5b9060200190602002015185848151811015156124b457fe5b906020019060200201818152505082806001019350505b5b8080600101915050612407565b83881115156124fc578396506124ef898761292d565b809750819a505050612560565b61250f838861293d90919063ffffffff16565b8811156125575761253b61252c848961293d90919063ffffffff16565b8961293d90919063ffffffff16565b975082965061254a898661292d565b809650819a50505061255f565b819950612566565b5b6123c6565b5b50505050505050505092915050565b60008082840190506000831215801561258e5750838112155b806125a457506000831280156125a357508381125b5b151561263e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f81526020017f770000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8091505092915050565b612650612a8d565b6126608560800151610100612956565b50838560000190600019169081600019168152505082856020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508185604001907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681525050849050949350505050565b6060600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634042994690507c01000000000000000000000000000000000000000000000000000000000260008084600001518560200151866040015187606001516001896080015160000151604051602401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200188815260200187600019166000191681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612890578082015181840152602081019050612875565b50505050905090810190601f1680156128bd5780820380516001836020036101000a031916815260200191505b509950505050505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050919050565b6060808284915091509250929050565b600082821115151561294b57fe5b818303905092915050565b61295e612b1c565b600060208381151561296c57fe5b061415156129895760208281151561298057fe5b06602003820191505b81836020018181525050604051808452600081528281016020016040525082905092915050565b8280548282559060005260206000209081019282156129f2579160200282015b828111156129f15782518290600019169055916020019190600101906129d0565b5b5090506129ff9190612b36565b5090565b828054828255906000526020600020908101928215612a7c579160200282015b82811115612a7b5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612a23565b5b509050612a899190612b5b565b5090565b60c06040519081016040528060008019168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200160008152602001612af5612b9e565b81525090565b5080546000825590600052602060002090810190612b199190612bb8565b50565b604080519081016040528060608152602001600081525090565b612b5891905b80821115612b54576000816000905550600101612b3c565b5090565b90565b612b9b91905b80821115612b9757600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101612b61565b5090565b90565b604080519081016040528060608152602001600081525090565b612bda91905b80821115612bd6576000816000905550600101612bbe565b5090565b905600a165627a7a72305820ca40dded69226767992fa8b3c36204ca2877975ba88904b451d7d6cca47e2e4f0029000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca00000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000700000000000000000000000072f3dff4cd17816604dd2df6c2741e739484ca620000000000000000000000004565300c576431e5228e8aa32642d5739cf9247d000000000000000000000000b92ec7d213a28e21b426d79ede3c9bbcf6917c09000000000000000000000000f5a3d443fccd7ee567000e43b23b0e98d96445ce0000000000000000000000000ce0224ba488ffc0f46be32b333a874eb775c6130000000000000000000000008cfb1d4269f0daa003cdea567ac8f76c0647764a0000000000000000000000007e94a8a23687d8c7058ba5625db2ce358bcbd24400000000000000000000000000000000000000000000000000000000000000073332656539656331366262323438323239366261376366613338343839373739643338353635326132333537343136346162623732303533623661653438396363366165666463333136663534356561623137396465316132396432356633326164643437663931613366343466336361323432393366623737366566643865613735346437313462306664343666346135633536383765336632323739653165663337323936663430313834656438613962343536623537643664326535633264633131346230313562653436333362313362383233333937316235363266
Deployed Bytecode
0x608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806333bfcdd8146101175780633ea478aa1461015c5780634162cc88146101b757806350d25bcd1461020057806354bcd7ff1461022b5780635b69a7d81461027a5780635cd9b90b146102e7578063668a0f02146103345780636a9705b41461035f578063715018a61461039a57806378a66674146103b15780638205bf6a1461049257806383197ef0146104bd5780638da5cb5b146104d4578063b5ab58dc1461052b578063b633620c1461056c578063c35905c6146105ad578063daa6d556146105fc578063eecea00014610613578063f2fde38b14610662575b600080fd5b34801561012357600080fd5b5061015a600480360381019080803560001916906020019092919080359060200190929190803590602001909291905050506106a5565b005b34801561016857600080fd5b5061019d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610941565b604051808215151515815260200191505060405180910390f35b3480156101c357600080fd5b506101e260048036038101908080359060200190929190505050610961565b60405180826000191660001916815260200191505060405180910390f35b34801561020c57600080fd5b50610215610984565b6040518082815260200191505060405180910390f35b34801561023757600080fd5b506102406109a1565b60405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561028657600080fd5b506102a5600480360381019080803590602001909291905050506109c3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102f357600080fd5b50610332600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a01565b005b34801561034057600080fd5b50610349610bc0565b6040518082815260200191505060405180910390f35b34801561036b57600080fd5b50610398600480360381019080803560001916906020019092919080359060200190929190505050610bca565b005b3480156103a657600080fd5b506103af610cae565b005b3480156103bd57600080fd5b5061049060048036038101908080356fffffffffffffffffffffffffffffffff16906020019092919080356fffffffffffffffffffffffffffffffff1690602001909291908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610db3565b005b34801561049e57600080fd5b506104a7611085565b6040518082815260200191505060405180910390f35b3480156104c957600080fd5b506104d26110a2565b005b3480156104e057600080fd5b506104e9611246565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561053757600080fd5b506105566004803603810190808035906020019092919050505061126c565b6040518082815260200191505060405180910390f35b34801561057857600080fd5b5061059760048036038101908080359060200190929190505050611289565b6040518082815260200191505060405180910390f35b3480156105b957600080fd5b506105c26112a6565b60405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561060857600080fd5b506106116112c8565b005b34801561061f57600080fd5b50610660600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611640565b005b34801561066e57600080fd5b506106a3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116f7565b005b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061074c5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156107e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f4e6f7420616e20617574686f72697a6564206164647265737320666f7220637281526020017f656174696e67207265717565737473000000000000000000000000000000000081525060400191505060405180910390fd5b600f60008560001916600019168152602001908152602001600020549050600954811015156108a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f43616e6e6f74206d6f6469667920616e20696e2d70726f677265737320616e7381526020017f776572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600f6000856000191660001916815260200190815260200160002060009055601060008281526020019081526020016000206001016000908060018154018082558091505090600182039060005260206000200160009091929091909150555061090c8161175f565b61093b8484636a9705b47c01000000000000000000000000000000000000000000000000000000000285611836565b50505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b600b8181548110151561097057fe5b906000526020600020016000915090505481565b600060116000600954815260200190815260200160002054905090565b600a60109054906101000a90046fffffffffffffffffffffffffffffffff1681565b600c818154811015156109d257fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a5f57600080fd5b610a676119d1565b90508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610b0c57600080fd5b505af1158015610b20573d6000803e3d6000fd5b505050506040513d6020811015610b3657600080fd5b81019080805190602001909291905050501515610bbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4c494e4b207472616e73666572206661696c656400000000000000000000000081525060200191505060405180910390fd5b505050565b6000600954905090565b6000610bd5836119fb565b600f60008460001916600019168152602001908152602001600020549050600f6000846000191660001916815260200190815260200160002060009055601060008281526020019081526020016000206001018290806001815401808255809150509060018203906000526020600020016000909192909190915055503373ffffffffffffffffffffffffffffffffffffffff1681837fb51168059c83c860caf5b830c5d2e64c2172c6fb2fe9f25447d9838e18d93b6060405160405180910390a4610ca081611b73565b610ca98161175f565b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d0a57600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e0f57600080fd5b826fffffffffffffffffffffffffffffffff168282602d825111151515610e9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f63616e6e6f742068617665206d6f7265207468616e203435206f7261636c657381525060200191505060405180910390fd5b82825110151515610f3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f6d7573742068617665206174206c65617374206173206d616e79206f7261636c81526020017f657320617320726573706f6e736573000000000000000000000000000000000081525060400191505060405180910390fd5b80518251141515610fdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6d75737420686176652065786163746c79206173206d616e79206f7261636c6581526020017f73206173206a6f6220494473000000000000000000000000000000000000000081525060400191505060405180910390fd5b86600a60006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555085600a60106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600b90805190602001906110649291906129b0565b5084600c908051906020019061107b929190612a03565b5050505050505050565b600060126000600954815260200190815260200160002054905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561110057600080fd5b6111086119d1565b905061120b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156111cb57600080fd5b505af11580156111df573d6000803e3d6000fd5b505050506040513d60208110156111f557600080fd5b8101908080519060200190929190505050610a01565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060116000838152602001908152602001600020549050919050565b600060126000838152602001908152602001600020549050919050565b600a60009054906101000a90046fffffffffffffffffffffffffffffffff1681565b6112d0612a8d565b6000806000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061137a5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f4e6f7420616e20617574686f72697a6564206164647265737320666f7220637281526020017f656174696e67207265717565737473000000000000000000000000000000000081525060400191505060405180910390fd5b600a60009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169150600090505b600c80549050811015611517576114a0600b8281548110151561146b57fe5b906000526020600020015430636a9705b47c010000000000000000000000000000000000000000000000000000000002611e5c565b93506114e6600c828154811015156114b457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168584611e8d565b9250600d54600f6000856000191660001916815260200190815260200160002081905550808060010191505061144c565b600a60109054906101000a90046fffffffffffffffffffffffffffffffff1660106000600d54815260200190815260200160002060000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550600c8054905060106000600d54815260200190815260200160002060000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506115ee6001600d5461221990919063ffffffff16565b600d819055503373ffffffffffffffffffffffffffffffffffffffff16600d547fc3c45d1924f55369653f407ee9f095309d1e687b2c0011b1f709042d4f457e1760405160405180910390a350505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561169c57600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561175357600080fd5b61175c81612235565b50565b806010600082815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16601060008381526020019081526020016000206001018054905014156118325760106000838152602001908152602001600020600080820160006101000a8154906fffffffffffffffffffffffffffffffff02191690556000820160106101000a8154906fffffffffffffffffffffffffffffffff021916905560018201600061182f9190612afb565b50505b5050565b600060056000866000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060056000866000191660001916815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905584600019167fe1fe3afa0f7f761ff0a8b89086790efd5140d2907ebd5b7ff6bfcb5e075fd4c560405160405180910390a28073ffffffffffffffffffffffffffffffffffffffff16636ee4d553868686866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808560001916600019168152602001848152602001837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001828152602001945050505050600060405180830381600087803b1580156119b257600080fd5b505af11580156119c6573d6000803e3d6000fd5b505050505050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8060056000826000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f536f75726365206d75737420626520746865206f7261636c65206f662074686581526020017f207265717565737400000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60056000826000191660001916815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905580600019167f7cc135e0cebb02c3480ae5d74d377283180a2601f8f644edf7987b009316c63a60405160405180910390a25050565b6000806000806000856010600082815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166010600083815260200190815260200160002060010180549050101515611e53578680600954111515611e515760106000898152602001908152602001600020600101805490509650611c1e60028861233190919063ffffffff16565b95506000600288811515611c2e57fe5b061415611d4e57611ca3601060008a8152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611c9857602002820191906000526020600020905b815481526020019060010190808311611c84575b505050505087612347565b9350611d26601060008a8152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611d0857602002820191906000526020600020905b815481526020019060010190808311611cf4575b5050505050611d2160018961221990919063ffffffff16565b612347565b92506002611d3d848661257590919063ffffffff16565b811515611d4657fe5b059450611dd2565b611dcf601060008a8152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611db157602002820191906000526020600020905b815481526020019060010190808311611d9d575b5050505050611dca60018961221990919063ffffffff16565b612347565b94505b84600781905550876009819055504260088190555042601260008a81526020019081526020016000208190555084601160008a81526020019081526020016000208190555087857f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f426040518082815260200191505060405180910390a35b505b50505050505050565b611e64612a8d565b611e6c612a8d565b611e8385858584612648909392919063ffffffff16565b9150509392505050565b600030600454604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083101515611f295780518252602082019150602081019050602083039250611f04565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090506004548360600181815250508360056000836000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600019167fb5e6e01e79f91267dc17b4e6314d5d4d03593d2ceee0fbb452b750bd70ea5af960405160405180910390a2600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634000aea0858461203887612702565b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156120db5780820151818401526020810190506120c0565b50505050905090810190601f1680156121085780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561212957600080fd5b505af115801561213d573d6000803e3d6000fd5b505050506040513d602081101561215357600080fd5b810190808051906020019092919050505015156121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f756e61626c6520746f207472616e73666572416e6443616c6c20746f206f726181526020017f636c65000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016004600082825401925050819055508090509392505050565b6000818301905082811015151561222c57fe5b80905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561227157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000818381151561233e57fe5b04905092915050565b600060606000806060806000806000808b98508a975088519650866040519080825280602002602001820160405280156123905781602001602082028038833980820191505090505b509550866040519080825280602002602001820160405280156123c25781602001602082028038833980820191505090505b5094505b60011561256557886123e260028961233190919063ffffffff16565b8151811015156123ee57fe5b9060200190602002015191506000935060009250600090505b868110156124d95781898281518110151561241e57fe5b90602001906020020151121561246f57888181518110151561243c57fe5b90602001906020020151868581518110151561245457fe5b906020019060200201818152505083806001019450506124cc565b81898281518110151561247e57fe5b9060200190602002015113156124cb57888181518110151561249c57fe5b9060200190602002015185848151811015156124b457fe5b906020019060200201818152505082806001019350505b5b8080600101915050612407565b83881115156124fc578396506124ef898761292d565b809750819a505050612560565b61250f838861293d90919063ffffffff16565b8811156125575761253b61252c848961293d90919063ffffffff16565b8961293d90919063ffffffff16565b975082965061254a898661292d565b809650819a50505061255f565b819950612566565b5b6123c6565b5b50505050505050505092915050565b60008082840190506000831215801561258e5750838112155b806125a457506000831280156125a357508381125b5b151561263e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f81526020017f770000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8091505092915050565b612650612a8d565b6126608560800151610100612956565b50838560000190600019169081600019168152505082856020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508185604001907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681525050849050949350505050565b6060600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634042994690507c01000000000000000000000000000000000000000000000000000000000260008084600001518560200151866040015187606001516001896080015160000151604051602401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200188815260200187600019166000191681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612890578082015181840152602081019050612875565b50505050905090810190601f1680156128bd5780820380516001836020036101000a031916815260200191505b509950505050505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050919050565b6060808284915091509250929050565b600082821115151561294b57fe5b818303905092915050565b61295e612b1c565b600060208381151561296c57fe5b061415156129895760208281151561298057fe5b06602003820191505b81836020018181525050604051808452600081528281016020016040525082905092915050565b8280548282559060005260206000209081019282156129f2579160200282015b828111156129f15782518290600019169055916020019190600101906129d0565b5b5090506129ff9190612b36565b5090565b828054828255906000526020600020908101928215612a7c579160200282015b82811115612a7b5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612a23565b5b509050612a899190612b5b565b5090565b60c06040519081016040528060008019168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200160008152602001612af5612b9e565b81525090565b5080546000825590600052602060002090810190612b199190612bb8565b50565b604080519081016040528060608152602001600081525090565b612b5891905b80821115612b54576000816000905550600101612b3c565b5090565b90565b612b9b91905b80821115612b9757600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101612b61565b5090565b90565b604080519081016040528060608152602001600081525090565b612bda91905b80821115612bd6576000816000905550600101612bbe565b5090565b905600a165627a7a72305820ca40dded69226767992fa8b3c36204ca2877975ba88904b451d7d6cca47e2e4f0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca00000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000700000000000000000000000072f3dff4cd17816604dd2df6c2741e739484ca620000000000000000000000004565300c576431e5228e8aa32642d5739cf9247d000000000000000000000000b92ec7d213a28e21b426d79ede3c9bbcf6917c09000000000000000000000000f5a3d443fccd7ee567000e43b23b0e98d96445ce0000000000000000000000000ce0224ba488ffc0f46be32b333a874eb775c6130000000000000000000000008cfb1d4269f0daa003cdea567ac8f76c0647764a0000000000000000000000007e94a8a23687d8c7058ba5625db2ce358bcbd24400000000000000000000000000000000000000000000000000000000000000073332656539656331366262323438323239366261376366613338343839373739643338353635326132333537343136346162623732303533623661653438396363366165666463333136663534356561623137396465316132396432356633326164643437663931613366343466336361323432393366623737366566643865613735346437313462306664343666346135633536383765336632323739653165663337323936663430313834656438613962343536623537643664326535633264633131346230313562653436333362313362383233333937316235363266
-----Decoded View---------------
Arg [0] : _link (address): 0x514910771AF9Ca656af840dff83E8264EcF986CA
Arg [1] : _paymentAmount (uint128): 160000000000000000
Arg [2] : _minimumResponses (uint128): 5
Arg [3] : _oracles (address[]): 0x72f3dFf4CD17816604dd2df6C2741e739484CA62,0x4565300C576431e5228e8aA32642D5739CF9247d,0xB92ec7D213a28e21b426D79EDe3c9BBcf6917c09,0xF5a3d443FccD7eE567000E43B23b0e98d96445CE,0x0Ce0224ba488ffC0F46bE32b333a874Eb775c613,0x8cfb1D4269f0daa003CDEa567aC8f76c0647764a,0x7e94A8A23687D8C7058Ba5625dB2Ce358bCbd244
Arg [4] : _jobIds (bytes32[]): System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[]
-----Encoded View---------------
21 Constructor Arguments found :
Arg [0] : 000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca
Arg [1] : 00000000000000000000000000000000000000000000000002386f26fc100000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [4] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 00000000000000000000000072f3dff4cd17816604dd2df6c2741e739484ca62
Arg [7] : 0000000000000000000000004565300c576431e5228e8aa32642d5739cf9247d
Arg [8] : 000000000000000000000000b92ec7d213a28e21b426d79ede3c9bbcf6917c09
Arg [9] : 000000000000000000000000f5a3d443fccd7ee567000e43b23b0e98d96445ce
Arg [10] : 0000000000000000000000000ce0224ba488ffc0f46be32b333a874eb775c613
Arg [11] : 0000000000000000000000008cfb1d4269f0daa003cdea567ac8f76c0647764a
Arg [12] : 0000000000000000000000007e94a8a23687d8c7058ba5625db2ce358bcbd244
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [14] : 3332656539656331366262323438323239366261376366613338343839373739
Arg [15] : 6433383536353261323335373431363461626237323035336236616534383963
Arg [16] : 6336616566646333313666353435656162313739646531613239643235663332
Arg [17] : 6164643437663931613366343466336361323432393366623737366566643865
Arg [18] : 6137353464373134623066643436663461356335363837653366323237396531
Arg [19] : 6566333732393666343031383465643861396234353662353764366432653563
Arg [20] : 3264633131346230313562653436333362313362383233333937316235363266
Deployed Bytecode Sourcemap
31939:13094:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37817:544;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37817:544:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32552:52;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32552:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32455:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32455:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40162:130;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40162:130:0;;;;;;;;;;;;;;;;;;;;;;;32419:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32419:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;32483:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32483:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36671:257;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36671:257:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41153:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41153:96:0;;;;;;;;;;;;;;;;;;;;;;;35070:411;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35070:411:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30985:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30985:114:0;;;;;;35946:381;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35946:381:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40366:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40366:137:0;;;;;;;;;;;;;;;;;;;;;;;38523:228;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38523:228:0;;;;;;30190:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30190:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;40628:130;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40628:130:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40922:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40922:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32386:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32386:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;34069:694;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34069:694:0;;;;;;37220:151;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37220:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31267:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31267:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37817:544;37976:16;44907:20;:32;44928:10;44907:32;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;44957:5;;;;;;;;;;;44943:19;;:10;:19;;;44907:55;44899:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37995:14;:26;38010:10;37995:26;;;;;;;;;;;;;;;;;;37976:45;;38047:21;;38036:8;:32;38028:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38124:14;:26;38139:10;38124:26;;;;;;;;;;;;;;;;;38117:33;;;38157:7;:17;38165:8;38157:17;;;;;;;;;;;:27;;38190:1;38157:35;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;38157:35:0;;;;;;;;;;;;;;;;;;;;;;38199:22;38212:8;38199:12;:22::i;:::-;38230:125;38261:10;38280:8;38297:31;;;38337:11;38230:22;:125::i;:::-;37817:544;;;;:::o;32552:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;32455:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40162:130::-;40224:6;40249:14;:37;40264:21;;40249:37;;;;;;;;;;;;40242:44;;40162:130;:::o;32419:31::-;;;;;;;;;;;;;:::o;32483:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36671:257::-;36769:28;30693:5;;;;;;;;;;;30679:19;;:10;:19;;;30671:28;;;;;;;;36819:23;:21;:23::i;:::-;36769:74;;36858:9;:18;;;36877:10;36889:7;36858:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36858:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36858:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;36858:39:0;;;;;;;;;;;;;;;;36850:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36671:257;;;:::o;41153:96::-;41199:7;41222:21;;41215:28;;41153:96;:::o;35070:411::-;35209:16;35161:39;35187:12;35161:25;:39::i;:::-;35228:14;:28;35243:12;35228:28;;;;;;;;;;;;;;;;;;35209:47;;35270:14;:28;35285:12;35270:28;;;;;;;;;;;;;;;;;35263:35;;;35307:7;:17;35315:8;35307:17;;;;;;;;;;;:27;;35340:9;35307:43;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;35307:43:0;;;;;;;;;;;;;;;;;;;;;;35400:10;35362:49;;35390:8;35379:9;35362:49;;;;;;;;;;35418:28;35437:8;35418:18;:28::i;:::-;35453:22;35466:8;35453:12;:22::i;:::-;35070:411;;;:::o;30985:114::-;30693:5;;;;;;;;;;;30679:19;;:10;:19;;;30671:28;;;;;;;;31062:5;;;;;;;;;;;31043:25;;;;;;;;;;;;31091:1;31075:5;;:18;;;;;;;;;;;;;;;;;;30985:114::o;35946:381::-;30693:5;;;;;;;;;;;30679:19;;:10;:19;;;30671:28;;;;;;;;36152:17;44341:423;;36171:8;36181:7;32869:2;44478:8;:15;:35;;44470:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44584:17;44565:8;:15;:36;;44557:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44687:7;:14;44668:8;:15;:33;44660:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36216:14;36200:13;;:30;;;;;;;;;;;;;;;;;;36256:17;36237:16;;:36;;;;;;;;;;;;;;;;;;36289:7;36280:6;:16;;;;;;;;;;;;:::i;:::-;;36313:8;36303:7;:18;;;;;;;;;;;;:::i;:::-;;30706:1;;;35946:381;;;;:::o;40366:137::-;40431:7;40457:17;:40;40475:21;;40457:40;;;;;;;;;;;;40450:47;;40366:137;:::o;38523:228::-;38583:28;30693:5;;;;;;;;;;;30679:19;;:10;:19;;;30671:28;;;;;;;;38633:23;:21;:23::i;:::-;38583:74;;38664:55;38677:5;;;;;;;;;;;38684:9;:19;;;38712:4;38684:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38684:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38684:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38684:34:0;;;;;;;;;;;;;;;;38664:12;:55::i;:::-;38739:5;;;;;;;;;;;38726:19;;;30190:20;;;;;;;;;;;;;:::o;40628:130::-;40703:6;40728:14;:24;40743:8;40728:24;;;;;;;;;;;;40721:31;;40628:130;;;:::o;40922:137::-;41000:7;41026:17;:27;41044:8;41026:27;;;;;;;;;;;;41019:34;;40922:137;;;:::o;32386:28::-;;;;;;;;;;;;;:::o;34069:694::-;34155:32;;:::i;:::-;34194:17;34218:21;34269:6;44907:20;:32;44928:10;44907:32;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;44957:5;;;;;;;;;;;44943:19;;:10;:19;;;44907:55;44899:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34242:13;;;;;;;;;;;34218:37;;;;34278:1;34269:10;;34264:269;34285:7;:14;;;;34281:1;:18;34264:269;;;34325:71;34347:6;34354:1;34347:9;;;;;;;;;;;;;;;;;;34358:4;34364:31;;;34325:21;:71::i;:::-;34315:81;;34417:58;34440:7;34448:1;34440:10;;;;;;;;;;;;;;;;;;;;;;;;;;;34452:7;34461:13;34417:22;:58::i;:::-;34405:70;;34512:13;;34484:14;:25;34499:9;34484:25;;;;;;;;;;;;;;;;;:41;;;;34301:3;;;;;;;34264:269;;;34581:16;;;;;;;;;;;34539:7;:22;34547:13;;34539:22;;;;;;;;;;;:39;;;:58;;;;;;;;;;;;;;;;;;34650:7;:14;;;;34604:7;:22;34612:13;;34604:22;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;34688:20;34706:1;34688:13;;:17;;:20;;;;:::i;:::-;34672:13;:36;;;;34746:10;34722:35;;34731:13;;34722:35;;;;;;;;;;34069:694;;;;:::o;37220:151::-;30693:5;;;;;;;;;;;30679:19;;:10;:19;;;30671:28;;;;;;;;37357:8;37322:20;:32;37343:10;37322:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;37220:151;;:::o;31267:105::-;30693:5;;;;;;;;;;;30679:19;;:10;:19;;;30671:28;;;;;;;;31337:29;31356:9;31337:18;:29::i;:::-;31267:105;:::o;42979:138::-;43065:9;43810:7;:18;43818:9;43810:18;;;;;;;;;;;:31;;;;;;;;;;;;43771:70;;:7;:18;43779:9;43771:18;;;;;;;;;;;:28;;:35;;;;:70;43767:94;;;43093:7;:18;43101:9;43093:18;;;;;;;;;;;;43086:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43767:94;42979:138;;:::o;23701:429::-;23863:35;23927:15;:27;23943:10;23927:27;;;;;;;;;;;;;;;;;;;;;;;;;;;23863:92;;23969:15;:27;23985:10;23969:27;;;;;;;;;;;;;;;;;;23962:34;;;;;;;;;;;24027:10;24008:30;;;;;;;;;;;;;24045:9;:29;;;24075:10;24087:8;24097:13;24112:11;24045:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24045:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24045:79:0;;;;23701:429;;;;;:::o;24956:116::-;25027:7;25061:4;;;;;;;;;;;25046:20;;24956:116;:::o;28036:168::-;28137:10;28469:15;:27;28485:10;28469:27;;;;;;;;;;;;;;;;;;;;;;;;;;;28455:41;;:10;:41;;;28447:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28555:15;:27;28571:10;28555:27;;;;;;;;;;;;;;;;;;28548:34;;;;;;;;;;;28613:10;28594:30;;;;;;;;;;;;;28036:168;;:::o;39047:1043::-;39199:22;39266:19;39316:24;39385:14;39465;39139:9;43448:7;:18;43456:9;43448:18;;;;;;;;;;;:35;;;;;;;;;;;;43409:74;;:7;:18;43417:9;43409:18;;;;;;;;;;;:28;;:35;;;;:74;;43405:98;;;39178:9;44144;44119:21;;:34;;44115:58;;;39224:7;:18;39232:9;39224:18;;;;;;;;;;;:28;;:35;;;;39199:60;;39288:21;39307:1;39288:14;:18;;:21;;;;:::i;:::-;39266:43;;39373:1;39368;39351:14;:18;;;;;;;;:23;39347:466;;;39402:54;39414:7;:18;39422:9;39414:18;;;;;;;;;;;:28;;39402:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39444:11;39402;:54::i;:::-;39385:71;;39482:61;39494:7;:18;39502:9;39494:18;;;;;;;;;;;:28;;39482:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39524:18;39540:1;39524:11;:15;;:18;;;;:::i;:::-;39482:11;:61::i;:::-;39465:78;;39623:1;39600:20;39612:7;39600;:11;;:20;;;;:::i;:::-;:24;;;;;;;;39580:44;;39347:466;;;39716:61;39728:7;:18;39736:9;39728:18;;;;;;;;;;;:28;;39716:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39758:18;39774:1;39758:11;:15;;:18;;;;:::i;:::-;39716:11;:61::i;:::-;39696:81;;39347:466;39840:17;39819:18;:38;;;;39888:9;39864:21;:33;;;;39928:3;39904:21;:27;;;;39969:3;39938:17;:28;39956:9;39938:28;;;;;;;;;;;:34;;;;40007:17;39979:14;:25;39994:9;39979:25;;;;;;;;;;;:45;;;;40069:9;40050:17;40036:48;40080:3;40036:48;;;;;;;;;;;;;;;;;;44115:58;43494:1;43405:98;39047:1043;;;;;;;:::o;21372:302::-;21524:17;;:::i;:::-;21557:28;;:::i;:::-;21599:69;21614:7;21623:16;21641:26;21599:3;:14;;:69;;;;;;:::i;:::-;21592:76;;21372:302;;;;;;:::o;22681:488::-;22807:17;22875:4;22881:8;;22858:32;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22858:32:0;;;22848:43;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;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;;;22848:43:0;;;;;;;;;;;;;;;;22836:55;;22911:8;;22898:4;:10;;:21;;;;;22955:7;22926:15;:26;22942:9;22926:26;;;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;22993:9;22974:29;;;;;;;;;;;;;23018:4;;;;;;;;;;;:20;;;23039:7;23048:8;23058:19;23072:4;23058:13;:19::i;:::-;23018:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;23018:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23018:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23018:60:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23018:60:0;;;;;;;;;;;;;;;;23010:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23137:1;23125:8;;:13;;;;;;;;;;;23154:9;23147:16;;22681:488;;;;;:::o;19760:132::-;19820:9;19847:2;19842;:7;19838:11;;19868:2;19863:1;:7;;19856:15;;;;;;19885:1;19878:8;;19760:132;;;;:::o;31513:175::-;31605:1;31584:23;;:9;:23;;;;31576:32;;;;;;;;31648:9;31620:38;;31641:5;;;;;;;;;;;31620:38;;;;;;;;;;;;31673:9;31665:5;;:17;;;;;;;;;;;;;;;;;;31513:175;:::o;19169:288::-;19229:7;19449:2;19444;:7;;;;;;;;19437:14;;19169:288;;;;:::o;41533:932::-;41623:6;41641:17;41670:9;41691:12;41721:18;41767;41813:13;41833;41853:12;41872:9;41661:2;41641:22;;41682:2;41670:14;;41706:1;:8;41691:23;;41755:4;41742:18;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;41742:18:0;;;;41721:39;;41801:4;41788:18;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;41788:18:0;;;;41767:39;;41890:570;41897:4;41890:570;;;41920:1;41922:11;41931:1;41922:4;:8;;:11;;;;:::i;:::-;41920:14;;;;;;;;;;;;;;;;;;41912:22;;41951:1;41943:9;;41969:1;41961:9;;41988:1;41984:5;;41979:211;41995:4;41991:1;:8;41979:211;;;42028:5;42021:1;42023;42021:4;;;;;;;;;;;;;;;;;;:12;42017:164;;;42060:1;42062;42060:4;;;;;;;;;;;;;;;;;;42048:2;42051:5;42048:9;;;;;;;;;;;;;;;;;:16;;;;;42077:7;;;;;;;42017:164;;;42113:5;42106:1;42108;42106:4;;;;;;;;;;;;;;;;;;:12;42102:79;;;42145:1;42147;42145:4;;;;;;;;;;;;;;;;;;42133:2;42136:5;42133:9;;;;;;;;;;;;;;;;;:16;;;;;42162:7;;;;;;;42102:79;42017:164;42001:3;;;;;;;41979:211;;;42207:5;42202:1;:10;;42198:255;;;42232:5;42225:12;;42258:11;42263:1;42266:2;42258:4;:11::i;:::-;42248:21;;;;;;;;42198:255;;;42294:15;42303:5;42294:4;:8;;:15;;;;:::i;:::-;42289:1;:21;42285:168;;;42327:22;42333:15;42342:5;42333:4;:8;;:15;;;;:::i;:::-;42327:1;:5;;:22;;;;:::i;:::-;42323:26;;42367:5;42360:12;;42393:11;42398:1;42401:2;42393:4;:11::i;:::-;42383:21;;;;;;;;42285:168;;;42438:5;42431:12;;;;42285:168;42198:255;41890:570;;;41533:932;;;;;;;;;;;;;;:::o;29739:227::-;29812:6;29830:8;29846:2;29841;:7;29830:18;;29870:1;29864:2;:7;;:18;;;;;29880:2;29875:1;:7;;29864:18;29863:42;;;;29893:1;29888:2;:6;:16;;;;;29902:2;29898:1;:6;29888:16;29863:42;29855:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29959:1;29952:8;;29739:227;;;;;:::o;13088:367::-;13242:17;;:::i;:::-;13275:40;13287:4;:8;;;12461:3;13275:11;:40::i;:::-;;13332:3;13322:4;:7;;:13;;;;;;;;;;;;;13365:16;13342:4;:20;;:39;;;;;;;;;;;13414:17;13388:4;:23;;:43;;;;;;;;;;;;;13445:4;13438:11;;13088:367;;;;;;:::o;27256:542::-;27347:5;27409:6;;;;;;;;;;;:20;;;:29;;;;20303:3;20254:1;27662:4;:7;;;27678:4;:20;;;27707:4;:23;;;27739:4;:10;;;20351:1;27779:4;:8;;;:12;;;27378:414;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;27378:414:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;27378:414: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;;;27378:414:0;27371:421;;27256:542;;;:::o;42662:155::-;42752:8;42769;42804:2;42808;42796:15;;;;42662:155;;;;;:::o;19574:119::-;19634:7;19663:2;19657;:8;;19650:16;;;;;;19685:2;19680;:7;19673:14;;19574:119;;;;:::o;968:408::-;1038:6;;:::i;:::-;1081:1;1075:2;1064:8;:13;;;;;;;;:18;;1060:73;;;1122:2;1111:8;:13;;;;;;;;1105:2;:20;1093:32;;;;1060:73;1197:8;1182:3;:12;;:23;;;;;1247:4;1241:11;1272:3;1267;1260:16;1296:1;1291:3;1284:14;1336:8;1331:3;1327:18;1323:2;1319:27;1313:4;1306:41;1221:133;1367:3;1360:10;;968:408;;;;:::o;31939:13094::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://ca40dded69226767992fa8b3c36204ca2877975ba88904b451d7d6cca47e2e4f
Loading...
Loading
Loading...
Loading
OVERVIEW
Decentralized oracle networks for price reference data.Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.