Commit b3c3a7e4 authored by XFT-dev's avatar XFT-dev
Browse files

added hardhat support

parent 6edd2b9c

Too many changes to show.

To preserve performance only 126 of 126+ files are displayed.
{
"schemaVersion": "2.0.0",
"contractName": "Median",
"compilerOutput": {
"abi": [],
"devdoc": {
"methods": {}
},
"evm": {
"bytecode": {
"linkReferences": {},
"object": "0x602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000606000a",
"opcodes": "PUSH1 0x2D PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP MOD MOD STOP EXP ",
"sourceMap": "130:7514:11:-:0;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24"
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000606000a",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP MOD MOD STOP EXP ",
"sourceMap": "130:7514:11:-:0;;;;;;12:1:-1;9;2:12"
},
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.6.6+commit.6c089d02\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/Median.sol\":\"Median\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/Median.sol\":{\"keccak256\":\"0x844b85b7864a30e3c89227419ade06b1e2314f810025c50ad22e7cbe4eb90691\",\"urls\":[\"bzz-raw://b75cfd1cfb09b00b075e5b2123255a54ae0d7a16136496487369e422db182508\",\"dweb:/ipfs/QmdkQTayL83SqSqnnF5azPFt3q3vjbx63NjuuezZyZgDCj\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/SignedSafeMath.sol\":{\"keccak256\":\"0x1a4f6b94292a5cfb16e5eb56a4c0a4395c1c10353452bd54d15fe4526506d336\",\"urls\":[\"bzz-raw://43457ed7b7207ec1f50e00127809769f109bb1ab91b84a5dbc3a19685170b634\",\"dweb:/ipfs/QmQBvs8PHAdU4tyrzZfkhJ8EDA1aLJbMWRu6VrKPrBfeFj\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/vendor/SafeMathChainlink.sol\":{\"keccak256\":\"0x105f5e9491f3d0bbdd4f1c7627eb839d69b944bfd803028a01cc083597692c1f\",\"urls\":[\"bzz-raw://ec45a2748a024a947a921183d4102d5e206808588501d85ddc4f5668a009bc73\",\"dweb:/ipfs/QmRNAMpq7LdWFnJ7wWKGbUuAcURaGSS42PMxtQ4vjrHmp9\"]}},\"version\":1}",
"userdoc": {
"methods": {}
}
},
"sources": {
"Median.sol": {
"id": 11
},
"vendor/SafeMathChainlink.sol": {
"id": 67
},
"SignedSafeMath.sol": {
"id": 18
}
},
"sourceCodes": {
"Median.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\nimport \"./vendor/SafeMathChainlink.sol\";\nimport \"./SignedSafeMath.sol\";\n\nlibrary Median {\n using SignedSafeMath for int256;\n\n int256 constant INT_MAX = 2**255-1;\n\n /**\n * @notice Returns the sorted middle, or the average of the two middle indexed items if the\n * array has an even number of elements.\n * @dev The list passed as an argument isn't modified.\n * @dev This algorithm has expected runtime O(n), but for adversarially chosen inputs\n * the runtime is O(n^2).\n * @param list The list of elements to compare\n */\n function calculate(int256[] memory list)\n internal\n pure\n returns (int256)\n {\n return calculateInplace(copy(list));\n }\n\n /**\n * @notice See documentation for function calculate.\n * @dev The list passed as an argument may be permuted.\n */\n function calculateInplace(int256[] memory list)\n internal\n pure\n returns (int256)\n {\n require(0 < list.length, \"list must not be empty\");\n uint256 len = list.length;\n uint256 middleIndex = len / 2;\n if (len % 2 == 0) {\n int256 median1;\n int256 median2;\n (median1, median2) = quickselectTwo(list, 0, len - 1, middleIndex - 1, middleIndex);\n return SignedSafeMath.avg(median1, median2);\n } else {\n return quickselect(list, 0, len - 1, middleIndex);\n }\n }\n\n /**\n * @notice Maximum length of list that shortSelectTwo can handle\n */\n uint256 constant SHORTSELECTTWO_MAX_LENGTH = 7;\n\n /**\n * @notice Select the k1-th and k2-th element from list of length at most 7\n * @dev Uses an optimal sorting network\n */\n function shortSelectTwo(\n int256[] memory list,\n uint256 lo,\n uint256 hi,\n uint256 k1,\n uint256 k2\n )\n private\n pure\n returns (int256 k1th, int256 k2th)\n {\n // Uses an optimal sorting network (https://en.wikipedia.org/wiki/Sorting_network)\n // for lists of length 7. Network layout is taken from\n // http://jgamble.ripco.net/cgi-bin/nw.cgi?inputs=7&algorithm=hibbard&output=svg\n\n uint256 len = hi + 1 - lo;\n int256 x0 = list[lo + 0];\n int256 x1 = 1 < len ? list[lo + 1] : INT_MAX;\n int256 x2 = 2 < len ? list[lo + 2] : INT_MAX;\n int256 x3 = 3 < len ? list[lo + 3] : INT_MAX;\n int256 x4 = 4 < len ? list[lo + 4] : INT_MAX;\n int256 x5 = 5 < len ? list[lo + 5] : INT_MAX;\n int256 x6 = 6 < len ? list[lo + 6] : INT_MAX;\n\n if (x0 > x1) {(x0, x1) = (x1, x0);}\n if (x2 > x3) {(x2, x3) = (x3, x2);}\n if (x4 > x5) {(x4, x5) = (x5, x4);}\n if (x0 > x2) {(x0, x2) = (x2, x0);}\n if (x1 > x3) {(x1, x3) = (x3, x1);}\n if (x4 > x6) {(x4, x6) = (x6, x4);}\n if (x1 > x2) {(x1, x2) = (x2, x1);}\n if (x5 > x6) {(x5, x6) = (x6, x5);}\n if (x0 > x4) {(x0, x4) = (x4, x0);}\n if (x1 > x5) {(x1, x5) = (x5, x1);}\n if (x2 > x6) {(x2, x6) = (x6, x2);}\n if (x1 > x4) {(x1, x4) = (x4, x1);}\n if (x3 > x6) {(x3, x6) = (x6, x3);}\n if (x2 > x4) {(x2, x4) = (x4, x2);}\n if (x3 > x5) {(x3, x5) = (x5, x3);}\n if (x3 > x4) {(x3, x4) = (x4, x3);}\n\n uint256 index1 = k1 - lo;\n if (index1 == 0) {k1th = x0;}\n else if (index1 == 1) {k1th = x1;}\n else if (index1 == 2) {k1th = x2;}\n else if (index1 == 3) {k1th = x3;}\n else if (index1 == 4) {k1th = x4;}\n else if (index1 == 5) {k1th = x5;}\n else if (index1 == 6) {k1th = x6;}\n else {revert(\"k1 out of bounds\");}\n\n uint256 index2 = k2 - lo;\n if (k1 == k2) {return (k1th, k1th);}\n else if (index2 == 0) {return (k1th, x0);}\n else if (index2 == 1) {return (k1th, x1);}\n else if (index2 == 2) {return (k1th, x2);}\n else if (index2 == 3) {return (k1th, x3);}\n else if (index2 == 4) {return (k1th, x4);}\n else if (index2 == 5) {return (k1th, x5);}\n else if (index2 == 6) {return (k1th, x6);}\n else {revert(\"k2 out of bounds\");}\n }\n\n /**\n * @notice Selects the k-th ranked element from list, looking only at indices between lo and hi\n * (inclusive). Modifies list in-place.\n */\n function quickselect(int256[] memory list, uint256 lo, uint256 hi, uint256 k)\n private\n pure\n returns (int256 kth)\n {\n require(lo <= k);\n require(k <= hi);\n while (lo < hi) {\n if (hi - lo < SHORTSELECTTWO_MAX_LENGTH) {\n int256 ignore;\n (kth, ignore) = shortSelectTwo(list, lo, hi, k, k);\n return kth;\n }\n uint256 pivotIndex = partition(list, lo, hi);\n if (k <= pivotIndex) {\n // since pivotIndex < (original hi passed to partition),\n // termination is guaranteed in this case\n hi = pivotIndex;\n } else {\n // since (original lo passed to partition) <= pivotIndex,\n // termination is guaranteed in this case\n lo = pivotIndex + 1;\n }\n }\n return list[lo];\n }\n\n /**\n * @notice Selects the k1-th and k2-th ranked elements from list, looking only at indices between\n * lo and hi (inclusive). Modifies list in-place.\n */\n function quickselectTwo(\n int256[] memory list,\n uint256 lo,\n uint256 hi,\n uint256 k1,\n uint256 k2\n )\n internal // for testing\n pure\n returns (int256 k1th, int256 k2th)\n {\n require(k1 < k2);\n require(lo <= k1 && k1 <= hi);\n require(lo <= k2 && k2 <= hi);\n\n while (true) {\n if (hi - lo < SHORTSELECTTWO_MAX_LENGTH) {\n return shortSelectTwo(list, lo, hi, k1, k2);\n }\n uint256 pivotIdx = partition(list, lo, hi);\n if (k2 <= pivotIdx) {\n hi = pivotIdx;\n } else if (pivotIdx < k1) {\n lo = pivotIdx + 1;\n } else {\n assert(k1 <= pivotIdx && pivotIdx < k2);\n k1th = quickselect(list, lo, pivotIdx, k1);\n k2th = quickselect(list, pivotIdx + 1, hi, k2);\n return (k1th, k2th);\n }\n }\n }\n\n /**\n * @notice Partitions list in-place using Hoare's partitioning scheme.\n * Only elements of list between indices lo and hi (inclusive) will be modified.\n * Returns an index i, such that:\n * - lo <= i < hi\n * - forall j in [lo, i]. list[j] <= list[i]\n * - forall j in [i, hi]. list[i] <= list[j]\n */\n function partition(int256[] memory list, uint256 lo, uint256 hi)\n private\n pure\n returns (uint256)\n {\n // We don't care about overflow of the addition, because it would require a list\n // larger than any feasible computer's memory.\n int256 pivot = list[(lo + hi) / 2];\n lo -= 1; // this can underflow. that's intentional.\n hi += 1;\n while (true) {\n do {\n lo += 1;\n } while (list[lo] < pivot);\n do {\n hi -= 1;\n } while (list[hi] > pivot);\n if (lo < hi) {\n (list[lo], list[hi]) = (list[hi], list[lo]);\n } else {\n // Let orig_lo and orig_hi be the original values of lo and hi passed to partition.\n // Then, hi < orig_hi, because hi decreases *strictly* monotonically\n // in each loop iteration and\n // - either list[orig_hi] > pivot, in which case the first loop iteration\n // will achieve hi < orig_hi;\n // - or list[orig_hi] <= pivot, in which case at least two loop iterations are\n // needed:\n // - lo will have to stop at least once in the interval\n // [orig_lo, (orig_lo + orig_hi)/2]\n // - (orig_lo + orig_hi)/2 < orig_hi\n return hi;\n }\n }\n }\n\n /**\n * @notice Makes an in-memory copy of the array passed in\n * @param list Reference to the array to be copied\n */\n function copy(int256[] memory list)\n private\n pure\n returns(int256[] memory)\n {\n int256[] memory list2 = new int256[](list.length);\n for (uint256 i = 0; i < list.length; i++) {\n list2[i] = list[i];\n }\n return list2;\n }\n}\n",
"vendor/SafeMathChainlink.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathChainlink {\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n uint256 c = a - b;\n\n return c;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522\n if (a == 0) {\n return 0;\n }\n\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers. Reverts on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n // Solidity only automatically asserts when dividing by 0\n require(b > 0, \"SafeMath: division by zero\");\n uint256 c = a / b;\n // assert(a == b * c + a % b); // There is no case in which this doesn't hold\n\n return c;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * Reverts when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b != 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n}\n",
"SignedSafeMath.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\nlibrary SignedSafeMath {\n int256 constant private _INT256_MIN = -2**255;\n\n /**\n * @dev Multiplies two signed integers, reverts on overflow.\n */\n function mul(int256 a, int256 b) internal pure returns (int256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) {\n return 0;\n }\n\n require(!(a == -1 && b == _INT256_MIN), \"SignedSafeMath: multiplication overflow\");\n\n int256 c = a * b;\n require(c / a == b, \"SignedSafeMath: multiplication overflow\");\n\n return c;\n }\n\n /**\n * @dev Integer division of two signed integers truncating the quotient, reverts on division by zero.\n */\n function div(int256 a, int256 b) internal pure returns (int256) {\n require(b != 0, \"SignedSafeMath: division by zero\");\n require(!(b == -1 && a == _INT256_MIN), \"SignedSafeMath: division overflow\");\n\n int256 c = a / b;\n\n return c;\n }\n\n /**\n * @dev Subtracts two signed integers, reverts on overflow.\n */\n function sub(int256 a, int256 b) internal pure returns (int256) {\n int256 c = a - b;\n require((b >= 0 && c <= a) || (b < 0 && c > a), \"SignedSafeMath: subtraction overflow\");\n\n return c;\n }\n\n /**\n * @dev Adds two signed integers, reverts on overflow.\n */\n function add(int256 a, int256 b) internal pure returns (int256) {\n int256 c = a + b;\n require((b >= 0 && c >= a) || (b < 0 && c < a), \"SignedSafeMath: addition overflow\");\n\n return c;\n }\n\n /**\n * @notice Computes average of two signed integers, ensuring that the computation\n * doesn't overflow.\n * @dev If the result is not an integer, it is rounded towards zero. For example,\n * avg(-3, -4) = -3\n */\n function avg(int256 _a, int256 _b)\n internal\n pure\n returns (int256)\n {\n if ((_a < 0 && _b > 0) || (_a > 0 && _b < 0)) {\n return add(_a, _b) / 2;\n }\n int256 remainder = (_a % 2 + _b % 2) / 2;\n return add(add(_a / 2, _b / 2), remainder);\n }\n}\n"
},
"sourceTreeHashHex": "0xaabd72d1e212f9a97744ee87659ef3a72709112675bf25d604cb7f2a0e25025f",
"compiler": {
"name": "solc",
"version": "soljson-v0.6.6+commit.6c089d02.js",
"settings": {
"optimizer": {
"runs": 1000000,
"enabled": true
},
"outputSelection": {
"*": {
"*": [
"abi",
"devdoc",
"userdoc",
"evm.bytecode.object",
"evm.bytecode.sourceMap",
"evm.deployedBytecode.object",
"evm.deployedBytecode.sourceMap",
"evm.methodIdentifiers",
"metadata"
]
}
},
"metadata": {
"bytecodeHash": "none"
},
"remappings": []
}
},
"chains": {}
}
\ No newline at end of file
{
"schemaVersion": "2.0.0",
"contractName": "MedianTestHelper",
"compilerOutput": {
"abi": [
{
"inputs": [
{
"internalType": "int256[]",
"name": "list",
"type": "int256[]"
}
],
"name": "publicGet",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "int256[]",
"name": "list",
"type": "int256[]"
},
{
"internalType": "uint256",
"name": "k1",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "k2",
"type": "uint256"
}
],
"name": "publicQuickselectTwo",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
},
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "pure",
"type": "function"
}
],
"devdoc": {
"methods": {}
},
"evm": {
"bytecode": {
"linkReferences": {},
"object": "0x608060405234801561001057600080fd5b50610b80806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80630fb75cff1461003b578063115efb20146100fc575b600080fd5b6100e36004803603606081101561005157600080fd5b81019060208101813564010000000081111561006c57600080fd5b82018360208201111561007e57600080fd5b803590602001918460208302840111640100000000831117156100a057600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050823593505050602001356101b1565b6040805192835260208301919091528051918290030190f35b61019f6004803603602081101561011257600080fd5b81019060208101813564010000000081111561012d57600080fd5b82018360208201111561013f57600080fd5b8035906020019184602083028401116401000000008311171561016157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506101d2945050505050565b60408051918252519081900360200190f35b6000806101c6856000600188510387876101e5565b91509150935093915050565b60006101dd826102c3565b90505b919050565b6000808284106101f457600080fd5b8386111580156102045750848411155b61020d57600080fd5b82861115801561021d5750848311155b61022657600080fd5b600786860310156102475761023e87878787876102d6565b915091506102b9565b600061025488888861078d565b9050808411610265578095506102b3565b84811015610278578060010196506102b3565b80851115801561028757508381105b61028d57fe5b61029988888388610871565b92506102aa88826001018887610871565b91506102b99050565b50610226565b9550959350505050565b60006101dd6102d183610903565b610991565b6000806000868660010103905060008888600001815181106102f457fe5b6020026020010151905060008260011061032e577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610346565b89896001018151811061033d57fe5b60200260200101515b9050600083600210610378577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610390565b8a8a6002018151811061038757fe5b60200260200101515b90506000846003106103c2577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6103da565b8b8b600301815181106103d157fe5b60200260200101515b905060008560041061040c577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610424565b8c8c6004018151811061041b57fe5b60200260200101515b9050600086600510610456577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61046e565b8d8d6005018151811061046557fe5b60200260200101515b90506000876006106104a0577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6104b8565b8e8e600601815181106104af57fe5b60200260200101515b9050858713156104c6579495945b838513156104d2579293925b818313156104de579091905b848713156104ea579395935b838613156104f6579294925b8083131561050057915b8486131561050c579394935b8082131561051657905b82871315610522579195915b8186131561052e579094905b8085131561053857935b82861315610544579194915b8084131561054e57925b8285131561055a579193915b81841315610566579092905b82841315610572579192915b8d8c038061058257879a5061064f565b806001141561059357869a5061064f565b80600214156105a457859a5061064f565b80600314156105b557849a5061064f565b80600414156105c657839a5061064f565b80600514156105d757829a5061064f565b80600614156105e857819a5061064f565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6b31206f7574206f6620626f756e647300000000000000000000000000000000604482015290519081900360640190fd5b8e8c038d8d141561066d57508a99506102b998505050505050505050565b8061068457509698506102b9975050505050505050565b806001141561069f57509598506102b9975050505050505050565b80600214156106ba57509498506102b9975050505050505050565b80600314156106d557509398506102b9975050505050505050565b80600414156106f057509298506102b9975050505050505050565b806005141561070b57509198506102b9975050505050505050565b806006141561072657509098506102b9975050505050505050565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6b32206f7574206f6620626f756e647300000000000000000000000000000000604482015290519081900360640190fd5b60008084600285850104815181106107a157fe5b602002602001015190506001840393506001830192505b600184019350808585815181106107cb57fe5b6020026020010151126107b8575b600183039250808584815181106107ec57fe5b6020026020010151136107d9578284101561085c5784838151811061080d57fe5b602002602001015185858151811061082157fe5b602002602001015186868151811061083557fe5b6020026020010187868151811061084857fe5b602090810291909101019190915252610865565b8291505061086a565b6107b8565b9392505050565b60008184111561088057600080fd5b8282111561088d57600080fd5b828410156108e457600784840310156108b95760006108af86868686876102d6565b5091506108fb9050565b60006108c686868661078d565b90508083116108d7578093506108de565b8060010194505b5061088d565b8484815181106108f057fe5b602002602001015190505b949350505050565b606080825167ffffffffffffffff8111801561091e57600080fd5b50604051908082528060200260200182016040528015610948578160200160208202803683370190505b50905060005b835181101561098a5783818151811061096357fe5b602002602001015182828151811061097757fe5b602090810291909101015260010161094e565b5092915050565b60008151600010610a0357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6c697374206d757374206e6f7420626520656d70747900000000000000000000604482015290519081900360640190fd5b81516002810460018216610a4257600080610a288660006001870360018703876101e5565b9092509050610a378282610a5b565b9450505050506101e0565b610a528460006001850384610871565b925050506101e0565b60008083128015610a6c5750600082135b80610a825750600083138015610a825750600082125b15610aa2576002610a938484610ad3565b81610a9a57fe5b059050610acd565b6000600280850781850701059050610ac9610ac36002860560028605610ad3565b82610ad3565b9150505b92915050565b6000828201818312801590610ae85750838112155b80610afd5750600083128015610afd57508381125b61086a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180610b536021913960400191505060405180910390fdfe5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77a164736f6c6343000606000a",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB80 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xFB75CFF EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x115EFB20 EQ PUSH2 0xFC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1B1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x19F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x112 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x12D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x13F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x1D2 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1C6 DUP6 PUSH1 0x0 PUSH1 0x1 DUP9 MLOAD SUB DUP8 DUP8 PUSH2 0x1E5 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DD DUP3 PUSH2 0x2C3 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 LT PUSH2 0x1F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP7 GT ISZERO DUP1 ISZERO PUSH2 0x204 JUMPI POP DUP5 DUP5 GT ISZERO JUMPDEST PUSH2 0x20D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 GT ISZERO DUP1 ISZERO PUSH2 0x21D JUMPI POP DUP5 DUP4 GT ISZERO JUMPDEST PUSH2 0x226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x7 DUP7 DUP7 SUB LT ISZERO PUSH2 0x247 JUMPI PUSH2 0x23E DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0x2D6 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x254 DUP9 DUP9 DUP9 PUSH2 0x78D JUMP JUMPDEST SWAP1 POP DUP1 DUP5 GT PUSH2 0x265 JUMPI DUP1 SWAP6 POP PUSH2 0x2B3 JUMP JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x278 JUMPI DUP1 PUSH1 0x1 ADD SWAP7 POP PUSH2 0x2B3 JUMP JUMPDEST DUP1 DUP6 GT ISZERO DUP1 ISZERO PUSH2 0x287 JUMPI POP DUP4 DUP2 LT JUMPDEST PUSH2 0x28D JUMPI INVALID JUMPDEST PUSH2 0x299 DUP9 DUP9 DUP4 DUP9 PUSH2 0x871 JUMP JUMPDEST SWAP3 POP PUSH2 0x2AA DUP9 DUP3 PUSH1 0x1 ADD DUP9 DUP8 PUSH2 0x871 JUMP JUMPDEST SWAP2 POP PUSH2 0x2B9 SWAP1 POP JUMP JUMPDEST POP PUSH2 0x226 JUMP JUMPDEST SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DD PUSH2 0x2D1 DUP4 PUSH2 0x903 JUMP JUMPDEST PUSH2 0x991 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 DUP7 PUSH1 0x1 ADD SUB SWAP1 POP PUSH1 0x0 DUP9 DUP9 PUSH1 0x0 ADD DUP2 MLOAD DUP2 LT PUSH2 0x2F4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x1 LT PUSH2 0x32E JUMPI PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x346 JUMP JUMPDEST DUP10 DUP10 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x33D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x2 LT PUSH2 0x378 JUMPI PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x390 JUMP JUMPDEST DUP11 DUP11 PUSH1 0x2 ADD DUP2 MLOAD DUP2 LT PUSH2 0x387 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 PUSH1 0x3 LT PUSH2 0x3C2 JUMPI PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3DA JUMP JUMPDEST DUP12 DUP12 PUSH1 0x3 ADD DUP2 MLOAD DUP2 LT PUSH2 0x3D1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x4 LT PUSH2 0x40C JUMPI PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x424 JUMP JUMPDEST DUP13 DUP13 PUSH1 0x4 ADD DUP2 MLOAD DUP2 LT PUSH2 0x41B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP1 POP PUSH1 0x0 DUP7 PUSH1 0x5 LT PUSH2 0x456 JUMPI PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x46E JUMP JUMPDEST DUP14 DUP14 PUSH1 0x5 ADD DUP2 MLOAD DUP2 LT PUSH2 0x465 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP1 POP PUSH1 0x0 DUP8 PUSH1 0x6 LT PUSH2 0x4A0 JUMPI PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x4B8 JUMP JUMPDEST DUP15 DUP15 PUSH1 0x6 ADD DUP2 MLOAD DUP2 LT PUSH2 0x4AF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP1 POP DUP6 DUP8 SGT ISZERO PUSH2 0x4C6 JUMPI SWAP5 SWAP6 SWAP5 JUMPDEST DUP4 DUP6 SGT ISZERO PUSH2 0x4D2 JUMPI SWAP3 SWAP4 SWAP3 JUMPDEST DUP2 DUP4 SGT ISZERO PUSH2 0x4DE JUMPI SWAP1 SWAP2 SWAP1 JUMPDEST DUP5 DUP8 SGT ISZERO PUSH2 0x4EA JUMPI SWAP4 SWAP6 SWAP4 JUMPDEST DUP4 DUP7 SGT ISZERO PUSH2 0x4F6 JUMPI SWAP3 SWAP5 SWAP3 JUMPDEST DUP1 DUP4 SGT ISZERO PUSH2 0x500 JUMPI SWAP2 JUMPDEST DUP5 DUP7 SGT ISZERO PUSH2 0x50C JUMPI SWAP4 SWAP5 SWAP4 JUMPDEST DUP1 DUP3 SGT ISZERO PUSH2 0x516 JUMPI SWAP1 JUMPDEST DUP3 DUP8 SGT ISZERO PUSH2 0x522 JUMPI SWAP2 SWAP6 SWAP2 JUMPDEST DUP2 DUP7 SGT ISZERO PUSH2 0x52E JUMPI SWAP1 SWAP5 SWAP1 JUMPDEST DUP1 DUP6 SGT ISZERO PUSH2 0x538 JUMPI SWAP4 JUMPDEST DUP3 DUP7 SGT ISZERO PUSH2 0x544 JUMPI SWAP2 SWAP5 SWAP2 JUMPDEST DUP1 DUP5 SGT ISZERO PUSH2 0x54E JUMPI SWAP3 JUMPDEST DUP3 DUP6 SGT ISZERO PUSH2 0x55A JUMPI SWAP2 SWAP4 SWAP2 JUMPDEST DUP2 DUP5 SGT ISZERO PUSH2 0x566 JUMPI SWAP1 SWAP3 SWAP1 JUMPDEST DUP3 DUP5 SGT ISZERO PUSH2 0x572 JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST DUP14 DUP13 SUB DUP1 PUSH2 0x582 JUMPI DUP8 SWAP11 POP PUSH2 0x64F JUMP JUMPDEST DUP1 PUSH1 0x1 EQ ISZERO PUSH2 0x593 JUMPI DUP7 SWAP11 POP PUSH2 0x64F JUMP JUMPDEST DUP1 PUSH1 0x2 EQ ISZERO PUSH2 0x5A4 JUMPI DUP6 SWAP11 POP PUSH2 0x64F JUMP JUMPDEST DUP1 PUSH1 0x3 EQ ISZERO PUSH2 0x5B5 JUMPI DUP5 SWAP11 POP PUSH2 0x64F JUMP JUMPDEST DUP1 PUSH1 0x4 EQ ISZERO PUSH2 0x5C6 JUMPI DUP4 SWAP11 POP PUSH2 0x64F JUMP JUMPDEST DUP1 PUSH1 0x5 EQ ISZERO PUSH2 0x5D7 JUMPI DUP3 SWAP11 POP PUSH2 0x64F JUMP JUMPDEST DUP1 PUSH1 0x6 EQ ISZERO PUSH2 0x5E8 JUMPI DUP2 SWAP11 POP PUSH2 0x64F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6B31206F7574206F6620626F756E647300000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP15 DUP13 SUB DUP14 DUP14 EQ ISZERO PUSH2 0x66D JUMPI POP DUP11 SWAP10 POP PUSH2 0x2B9 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x684 JUMPI POP SWAP7 SWAP9 POP PUSH2 0x2B9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 EQ ISZERO PUSH2 0x69F JUMPI POP SWAP6 SWAP9 POP PUSH2 0x2B9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x2 EQ ISZERO PUSH2 0x6BA JUMPI POP SWAP5 SWAP9 POP PUSH2 0x2B9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x3 EQ ISZERO PUSH2 0x6D5 JUMPI POP SWAP4 SWAP9 POP PUSH2 0x2B9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x4 EQ ISZERO PUSH2 0x6F0 JUMPI POP SWAP3 SWAP9 POP PUSH2 0x2B9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x5 EQ ISZERO PUSH2 0x70B JUMPI POP SWAP2 SWAP9 POP PUSH2 0x2B9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x6 EQ ISZERO PUSH2 0x726 JUMPI POP SWAP1 SWAP9 POP PUSH2 0x2B9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6B32206F7574206F6620626F756E647300000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x2 DUP6 DUP6 ADD DIV DUP2 MLOAD DUP2 LT PUSH2 0x7A1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x1 DUP5 SUB SWAP4 POP PUSH1 0x1 DUP4 ADD SWAP3 POP JUMPDEST PUSH1 0x1 DUP5 ADD SWAP4 POP DUP1 DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x7CB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SLT PUSH2 0x7B8 JUMPI JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP DUP1 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x7EC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SGT PUSH2 0x7D9 JUMPI DUP3 DUP5 LT ISZERO PUSH2 0x85C JUMPI DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x80D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x821 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x835 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x848 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE PUSH2 0x865 JUMP JUMPDEST DUP3 SWAP2 POP POP PUSH2 0x86A JUMP JUMPDEST PUSH2 0x7B8 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 GT ISZERO PUSH2 0x880 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP3 GT ISZERO PUSH2 0x88D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP5 LT ISZERO PUSH2 0x8E4 JUMPI PUSH1 0x7 DUP5 DUP5 SUB LT ISZERO PUSH2 0x8B9 JUMPI PUSH1 0x0 PUSH2 0x8AF DUP7 DUP7 DUP7 DUP7 DUP8 PUSH2 0x2D6 JUMP JUMPDEST POP SWAP2 POP PUSH2 0x8FB SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8C6 DUP7 DUP7 DUP7 PUSH2 0x78D JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT PUSH2 0x8D7 JUMPI DUP1 SWAP4 POP PUSH2 0x8DE JUMP JUMPDEST DUP1 PUSH1 0x1 ADD SWAP5 POP JUMPDEST POP PUSH2 0x88D JUMP JUMPDEST DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x8F0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x91E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x948 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x98A JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x963 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x977 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x94E JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x0 LT PUSH2 0xA03 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6C697374206D757374206E6F7420626520656D70747900000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x2 DUP2 DIV PUSH1 0x1 DUP3 AND PUSH2 0xA42 JUMPI PUSH1 0x0 DUP1 PUSH2 0xA28 DUP7 PUSH1 0x0 PUSH1 0x1 DUP8 SUB PUSH1 0x1 DUP8 SUB DUP8 PUSH2 0x1E5 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xA37 DUP3 DUP3 PUSH2 0xA5B JUMP JUMPDEST SWAP5 POP POP POP POP POP PUSH2 0x1E0 JUMP JUMPDEST PUSH2 0xA52 DUP5 PUSH1 0x0 PUSH1 0x1 DUP6 SUB DUP5 PUSH2 0x871 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x1E0 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 SLT DUP1 ISZERO PUSH2 0xA6C JUMPI POP PUSH1 0x0 DUP3 SGT JUMPDEST DUP1 PUSH2 0xA82 JUMPI POP PUSH1 0x0 DUP4 SGT DUP1 ISZERO PUSH2 0xA82 JUMPI POP PUSH1 0x0 DUP3 SLT JUMPDEST ISZERO PUSH2 0xAA2 JUMPI PUSH1 0x2 PUSH2 0xA93 DUP5 DUP5 PUSH2 0xAD3 JUMP JUMPDEST DUP2 PUSH2 0xA9A JUMPI INVALID JUMPDEST SDIV SWAP1 POP PUSH2 0xACD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP1 DUP6 SMOD DUP2 DUP6 SMOD ADD SDIV SWAP1 POP PUSH2 0xAC9 PUSH2 0xAC3 PUSH1 0x2 DUP7 SDIV PUSH1 0x2 DUP7 SDIV PUSH2 0xAD3 JUMP JUMPDEST DUP3 PUSH2 0xAD3 JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0xAE8 JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0xAFD JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0xAFD JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0x86A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB53 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT INVALID MSTORE8 PUSH10 0x676E6564536166654D61 PUSH21 0x683A206164646974696F6E206F766572666C6F77A1 PUSH5 0x736F6C6343 STOP MOD MOD STOP EXP ",
"sourceMap": "82:360:52:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;82:360:52;;;;;;;"
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80630fb75cff1461003b578063115efb20146100fc575b600080fd5b6100e36004803603606081101561005157600080fd5b81019060208101813564010000000081111561006c57600080fd5b82018360208201111561007e57600080fd5b803590602001918460208302840111640100000000831117156100a057600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050823593505050602001356101b1565b6040805192835260208301919091528051918290030190f35b61019f6004803603602081101561011257600080fd5b81019060208101813564010000000081111561012d57600080fd5b82018360208201111561013f57600080fd5b8035906020019184602083028401116401000000008311171561016157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506101d2945050505050565b60408051918252519081900360200190f35b6000806101c6856000600188510387876101e5565b91509150935093915050565b60006101dd826102c3565b90505b919050565b6000808284106101f457600080fd5b8386111580156102045750848411155b61020d57600080fd5b82861115801561021d5750848311155b61022657600080fd5b600786860310156102475761023e87878787876102d6565b915091506102b9565b600061025488888861078d565b9050808411610265578095506102b3565b84811015610278578060010196506102b3565b80851115801561028757508381105b61028d57fe5b61029988888388610871565b92506102aa88826001018887610871565b91506102b99050565b50610226565b9550959350505050565b60006101dd6102d183610903565b610991565b6000806000868660010103905060008888600001815181106102f457fe5b6020026020010151905060008260011061032e577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610346565b89896001018151811061033d57fe5b60200260200101515b9050600083600210610378577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610390565b8a8a6002018151811061038757fe5b60200260200101515b90506000846003106103c2577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6103da565b8b8b600301815181106103d157fe5b60200260200101515b905060008560041061040c577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610424565b8c8c6004018151811061041b57fe5b60200260200101515b9050600086600510610456577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61046e565b8d8d6005018151811061046557fe5b60200260200101515b90506000876006106104a0577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6104b8565b8e8e600601815181106104af57fe5b60200260200101515b9050858713156104c6579495945b838513156104d2579293925b818313156104de579091905b848713156104ea579395935b838613156104f6579294925b8083131561050057915b8486131561050c579394935b8082131561051657905b82871315610522579195915b8186131561052e579094905b8085131561053857935b82861315610544579194915b8084131561054e57925b8285131561055a579193915b81841315610566579092905b82841315610572579192915b8d8c038061058257879a5061064f565b806001141561059357869a5061064f565b80600214156105a457859a5061064f565b80600314156105b557849a5061064f565b80600414156105c657839a5061064f565b80600514156105d757829a5061064f565b80600614156105e857819a5061064f565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6b31206f7574206f6620626f756e647300000000000000000000000000000000604482015290519081900360640190fd5b8e8c038d8d141561066d57508a99506102b998505050505050505050565b8061068457509698506102b9975050505050505050565b806001141561069f57509598506102b9975050505050505050565b80600214156106ba57509498506102b9975050505050505050565b80600314156106d557509398506102b9975050505050505050565b80600414156106f057509298506102b9975050505050505050565b806005141561070b57509198506102b9975050505050505050565b806006141561072657509098506102b9975050505050505050565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6b32206f7574206f6620626f756e647300000000000000000000000000000000604482015290519081900360640190fd5b60008084600285850104815181106107a157fe5b602002602001015190506001840393506001830192505b600184019350808585815181106107cb57fe5b6020026020010151126107b8575b600183039250808584815181106107ec57fe5b6020026020010151136107d9578284101561085c5784838151811061080d57fe5b602002602001015185858151811061082157fe5b602002602001015186868151811061083557fe5b6020026020010187868151811061084857fe5b602090810291909101019190915252610865565b8291505061086a565b6107b8565b9392505050565b60008184111561088057600080fd5b8282111561088d57600080fd5b828410156108e457600784840310156108b95760006108af86868686876102d6565b5091506108fb9050565b60006108c686868661078d565b90508083116108d7578093506108de565b8060010194505b5061088d565b8484815181106108f057fe5b602002602001015190505b949350505050565b606080825167ffffffffffffffff8111801561091e57600080fd5b50604051908082528060200260200182016040528015610948578160200160208202803683370190505b50905060005b835181101561098a5783818151811061096357fe5b602002602001015182828151811061097757fe5b602090810291909101015260010161094e565b5092915050565b60008151600010610a0357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6c697374206d757374206e6f7420626520656d70747900000000000000000000604482015290519081900360640190fd5b81516002810460018216610a4257600080610a288660006001870360018703876101e5565b9092509050610a378282610a5b565b9450505050506101e0565b610a528460006001850384610871565b925050506101e0565b60008083128015610a6c5750600082135b80610a825750600083138015610a825750600082125b15610aa2576002610a938484610ad3565b81610a9a57fe5b059050610acd565b6000600280850781850701059050610ac9610ac36002860560028605610ad3565b82610ad3565b9150505b92915050565b6000828201818312801590610ae85750838112155b80610afd5750600083128015610afd57508381125b61086a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180610b536021913960400191505060405180910390fdfe5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77a164736f6c6343000606000a",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xFB75CFF EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x115EFB20 EQ PUSH2 0xFC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1B1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x19F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x112 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x12D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x13F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x1D2 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1C6 DUP6 PUSH1 0x0 PUSH1 0x1 DUP9 MLOAD SUB DUP8 DUP8 PUSH2 0x1E5 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DD DUP3 PUSH2 0x2C3 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 LT PUSH2 0x1F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP7 GT ISZERO DUP1 ISZERO PUSH2 0x204 JUMPI POP DUP5 DUP5 GT ISZERO JUMPDEST PUSH2 0x20D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 GT ISZERO DUP1 ISZERO PUSH2 0x21D JUMPI POP DUP5 DUP4 GT ISZERO JUMPDEST PUSH2 0x226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x7 DUP7 DUP7 SUB LT ISZERO PUSH2 0x247 JUMPI PUSH2 0x23E DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0x2D6 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x254 DUP9 DUP9 DUP9 PUSH2 0x78D JUMP JUMPDEST SWAP1 POP DUP1 DUP5 GT PUSH2 0x265 JUMPI DUP1 SWAP6 POP PUSH2 0x2B3 JUMP JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x278 JUMPI DUP1 PUSH1 0x1 ADD SWAP7 POP PUSH2 0x2B3 JUMP JUMPDEST DUP1 DUP6 GT ISZERO DUP1 ISZERO PUSH2 0x287 JUMPI POP DUP4 DUP2 LT JUMPDEST PUSH2 0x28D JUMPI INVALID JUMPDEST PUSH2 0x299 DUP9 DUP9 DUP4 DUP9 PUSH2 0x871 JUMP JUMPDEST SWAP3 POP PUSH2 0x2AA DUP9 DUP3 PUSH1 0x1 ADD DUP9 DUP8 PUSH2 0x871 JUMP JUMPDEST SWAP2 POP PUSH2 0x2B9 SWAP1 POP JUMP JUMPDEST POP PUSH2 0x226 JUMP JUMPDEST SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DD PUSH2 0x2D1 DUP4 PUSH2 0x903 JUMP JUMPDEST PUSH2 0x991 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 DUP7 PUSH1 0x1 ADD SUB SWAP1 POP PUSH1 0x0 DUP9 DUP9 PUSH1 0x0 ADD DUP2 MLOAD DUP2 LT PUSH2 0x2F4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x1 LT PUSH2 0x32E JUMPI PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x346 JUMP JUMPDEST DUP10 DUP10 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x33D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x2 LT PUSH2 0x378 JUMPI PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x390 JUMP JUMPDEST DUP11 DUP11 PUSH1 0x2 ADD DUP2 MLOAD DUP2 LT PUSH2 0x387 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 PUSH1 0x3 LT PUSH2 0x3C2 JUMPI PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3DA JUMP JUMPDEST DUP12 DUP12 PUSH1 0x3 ADD DUP2 MLOAD DUP2 LT PUSH2 0x3D1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x4 LT PUSH2 0x40C JUMPI PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x424 JUMP JUMPDEST DUP13 DUP13 PUSH1 0x4 ADD DUP2 MLOAD DUP2 LT PUSH2 0x41B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP1 POP PUSH1 0x0 DUP7 PUSH1 0x5 LT PUSH2 0x456 JUMPI PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x46E JUMP JUMPDEST DUP14 DUP14 PUSH1 0x5 ADD DUP2 MLOAD DUP2 LT PUSH2 0x465 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP1 POP PUSH1 0x0 DUP8 PUSH1 0x6 LT PUSH2 0x4A0 JUMPI PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x4B8 JUMP JUMPDEST DUP15 DUP15 PUSH1 0x6 ADD DUP2 MLOAD DUP2 LT PUSH2 0x4AF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST SWAP1 POP DUP6 DUP8 SGT ISZERO PUSH2 0x4C6 JUMPI SWAP5 SWAP6 SWAP5 JUMPDEST DUP4 DUP6 SGT ISZERO PUSH2 0x4D2 JUMPI SWAP3 SWAP4 SWAP3 JUMPDEST DUP2 DUP4 SGT ISZERO PUSH2 0x4DE JUMPI SWAP1 SWAP2 SWAP1 JUMPDEST DUP5 DUP8 SGT ISZERO PUSH2 0x4EA JUMPI SWAP4 SWAP6 SWAP4 JUMPDEST DUP4 DUP7 SGT ISZERO PUSH2 0x4F6 JUMPI SWAP3 SWAP5 SWAP3 JUMPDEST DUP1 DUP4 SGT ISZERO PUSH2 0x500 JUMPI SWAP2 JUMPDEST DUP5 DUP7 SGT ISZERO PUSH2 0x50C JUMPI SWAP4 SWAP5 SWAP4 JUMPDEST DUP1 DUP3 SGT ISZERO PUSH2 0x516 JUMPI SWAP1 JUMPDEST DUP3 DUP8 SGT ISZERO PUSH2 0x522 JUMPI SWAP2 SWAP6 SWAP2 JUMPDEST DUP2 DUP7 SGT ISZERO PUSH2 0x52E JUMPI SWAP1 SWAP5 SWAP1 JUMPDEST DUP1 DUP6 SGT ISZERO PUSH2 0x538 JUMPI SWAP4 JUMPDEST DUP3 DUP7 SGT ISZERO PUSH2 0x544 JUMPI SWAP2 SWAP5 SWAP2 JUMPDEST DUP1 DUP5 SGT ISZERO PUSH2 0x54E JUMPI SWAP3 JUMPDEST DUP3 DUP6 SGT ISZERO PUSH2 0x55A JUMPI SWAP2 SWAP4 SWAP2 JUMPDEST DUP2 DUP5 SGT ISZERO PUSH2 0x566 JUMPI SWAP1 SWAP3 SWAP1 JUMPDEST DUP3 DUP5 SGT ISZERO PUSH2 0x572 JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST DUP14 DUP13 SUB DUP1 PUSH2 0x582 JUMPI DUP8 SWAP11 POP PUSH2 0x64F JUMP JUMPDEST DUP1 PUSH1 0x1 EQ ISZERO PUSH2 0x593 JUMPI DUP7 SWAP11 POP PUSH2 0x64F JUMP JUMPDEST DUP1 PUSH1 0x2 EQ ISZERO PUSH2 0x5A4 JUMPI DUP6 SWAP11 POP PUSH2 0x64F JUMP JUMPDEST DUP1 PUSH1 0x3 EQ ISZERO PUSH2 0x5B5 JUMPI DUP5 SWAP11 POP PUSH2 0x64F JUMP JUMPDEST DUP1 PUSH1 0x4 EQ ISZERO PUSH2 0x5C6 JUMPI DUP4 SWAP11 POP PUSH2 0x64F JUMP JUMPDEST DUP1 PUSH1 0x5 EQ ISZERO PUSH2 0x5D7 JUMPI DUP3 SWAP11 POP PUSH2 0x64F JUMP JUMPDEST DUP1 PUSH1 0x6 EQ ISZERO PUSH2 0x5E8 JUMPI DUP2 SWAP11 POP PUSH2 0x64F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6B31206F7574206F6620626F756E647300000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP15 DUP13 SUB DUP14 DUP14 EQ ISZERO PUSH2 0x66D JUMPI POP DUP11 SWAP10 POP PUSH2 0x2B9 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x684 JUMPI POP SWAP7 SWAP9 POP PUSH2 0x2B9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 EQ ISZERO PUSH2 0x69F JUMPI POP SWAP6 SWAP9 POP PUSH2 0x2B9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x2 EQ ISZERO PUSH2 0x6BA JUMPI POP SWAP5 SWAP9 POP PUSH2 0x2B9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x3 EQ ISZERO PUSH2 0x6D5 JUMPI POP SWAP4 SWAP9 POP PUSH2 0x2B9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x4 EQ ISZERO PUSH2 0x6F0 JUMPI POP SWAP3 SWAP9 POP PUSH2 0x2B9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x5 EQ ISZERO PUSH2 0x70B JUMPI POP SWAP2 SWAP9 POP PUSH2 0x2B9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x6 EQ ISZERO PUSH2 0x726 JUMPI POP SWAP1 SWAP9 POP PUSH2 0x2B9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6B32206F7574206F6620626F756E647300000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x2 DUP6 DUP6 ADD DIV DUP2 MLOAD DUP2 LT PUSH2 0x7A1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x1 DUP5 SUB SWAP4 POP PUSH1 0x1 DUP4 ADD SWAP3 POP JUMPDEST PUSH1 0x1 DUP5 ADD SWAP4 POP DUP1 DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x7CB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SLT PUSH2 0x7B8 JUMPI JUMPDEST PUSH1 0x1 DUP4 SUB SWAP3 POP DUP1 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x7EC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SGT PUSH2 0x7D9 JUMPI DUP3 DUP5 LT ISZERO PUSH2 0x85C JUMPI DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x80D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x821 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x835 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x848 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE PUSH2 0x865 JUMP JUMPDEST DUP3 SWAP2 POP POP PUSH2 0x86A JUMP JUMPDEST PUSH2 0x7B8 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 GT ISZERO PUSH2 0x880 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP3 GT ISZERO PUSH2 0x88D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP5 LT ISZERO PUSH2 0x8E4 JUMPI PUSH1 0x7 DUP5 DUP5 SUB LT ISZERO PUSH2 0x8B9 JUMPI PUSH1 0x0 PUSH2 0x8AF DUP7 DUP7 DUP7 DUP7 DUP8 PUSH2 0x2D6 JUMP JUMPDEST POP SWAP2 POP PUSH2 0x8FB SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8C6 DUP7 DUP7 DUP7 PUSH2 0x78D JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT PUSH2 0x8D7 JUMPI DUP1 SWAP4 POP PUSH2 0x8DE JUMP JUMPDEST DUP1 PUSH1 0x1 ADD SWAP5 POP JUMPDEST POP PUSH2 0x88D JUMP JUMPDEST DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x8F0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x91E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x948 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x98A JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x963 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x977 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x94E JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x0 LT PUSH2 0xA03 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6C697374206D757374206E6F7420626520656D70747900000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x2 DUP2 DIV PUSH1 0x1 DUP3 AND PUSH2 0xA42 JUMPI PUSH1 0x0 DUP1 PUSH2 0xA28 DUP7 PUSH1 0x0 PUSH1 0x1 DUP8 SUB PUSH1 0x1 DUP8 SUB DUP8 PUSH2 0x1E5 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xA37 DUP3 DUP3 PUSH2 0xA5B JUMP JUMPDEST SWAP5 POP POP POP POP POP PUSH2 0x1E0 JUMP JUMPDEST PUSH2 0xA52 DUP5 PUSH1 0x0 PUSH1 0x1 DUP6 SUB DUP5 PUSH2 0x871 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x1E0 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 SLT DUP1 ISZERO PUSH2 0xA6C JUMPI POP PUSH1 0x0 DUP3 SGT JUMPDEST DUP1 PUSH2 0xA82 JUMPI POP PUSH1 0x0 DUP4 SGT DUP1 ISZERO PUSH2 0xA82 JUMPI POP PUSH1 0x0 DUP3 SLT JUMPDEST ISZERO PUSH2 0xAA2 JUMPI PUSH1 0x2 PUSH2 0xA93 DUP5 DUP5 PUSH2 0xAD3 JUMP JUMPDEST DUP2 PUSH2 0xA9A JUMPI INVALID JUMPDEST SDIV SWAP1 POP PUSH2 0xACD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP1 DUP6 SMOD DUP2 DUP6 SMOD ADD SDIV SWAP1 POP PUSH2 0xAC9 PUSH2 0xAC3 PUSH1 0x2 DUP7 SDIV PUSH1 0x2 DUP7 SDIV PUSH2 0xAD3 JUMP JUMPDEST DUP3 PUSH2 0xAD3 JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0xAE8 JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0xAFD JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0xAFD JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0x86A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB53 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT INVALID MSTORE8 PUSH10 0x676E6564536166654D61 PUSH21 0x683A206164646974696F6E206F766572666C6F77A1 PUSH5 0x736F6C6343 STOP MOD MOD STOP EXP ",
"sourceMap": "82:360:52:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;82:360:52;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;240:200:52;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;240:200:52;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;240:200:52;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;240:200:52;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;240:200:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;240:200:52;;-1:-1:-1;;240:200:52;;;-1:-1:-1;;;240:200:52;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;112:124;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;112:124:52;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;112:124:52;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;112:124:52;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;112:124:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;112:124:52;;-1:-1:-1;112:124:52;;-1:-1:-1;;;;;112:124:52:i;:::-;;;;;;;;;;;;;;;;240:200;349:6;357;380:55;402:4;408:1;425;411:4;:11;:15;428:2;432;380:21;:55::i;:::-;373:62;;;;240:200;;;;;;:::o;112:124::-;186:6;209:22;226:4;209:16;:22::i;:::-;202:29;;112:124;;;;:::o;4922:800:11:-;5090:11;5103;5137:2;5132;:7;5124:16;;12:1:-1;9;2:12;5124:16:11;5160:2;5154;:8;;:20;;;;;5172:2;5166;:8;;5154:20;5146:29;;12:1:-1;9;2:12;5146:29:11;5195:2;5189;:8;;:20;;;;;5207:2;5201;:8;;5189:20;5181:29;;12:1:-1;9;2:12;5181:29:11;1490:1;5247:2;5242;:7;:35;5238:103;;;5296:36;5311:4;5317:2;5321;5325;5329;5296:14;:36::i;:::-;5289:43;;;;;;5238:103;5348:16;5367:23;5377:4;5383:2;5387;5367:9;:23::i;:::-;5348:42;;5408:8;5402:2;:14;5398:314;;5433:8;5428:13;;5398:314;;;5471:2;5460:8;:13;5456:256;;;5490:8;5501:1;5490:12;5485:17;;5456:256;;;5540:8;5534:2;:14;;:31;;;;;5563:2;5552:8;:13;5534:31;5527:39;;;;5583:35;5595:4;5601:2;5605:8;5615:2;5583:11;:35::i;:::-;5576:42;;5635:39;5647:4;5653:8;5664:1;5653:12;5667:2;5671;5635:11;:39::i;:::-;5628:46;-1:-1:-1;5684:19:11;;-1:-1:-1;5684:19:11;5456:256;5217:501;;;;4922:800;;;;;;;;:::o;595:132::-;671:6;694:28;711:10;716:4;711;:10::i;:::-;694:16;:28::i;1628:2197::-;1780:11;1793;2046;2069:2;2060;2065:1;2060:6;:11;2046:25;;2077:9;2089:4;2094:2;2099:1;2094:6;2089:12;;;;;;;;;;;;;;2077:24;;2107:9;2123:3;2119:1;:7;:32;;211:8;2119:32;;;2129:4;2134:2;2139:1;2134:6;2129:12;;;;;;;;;;;;;;2119:32;2107:44;;2157:9;2173:3;2169:1;:7;:32;;211:8;2169:32;;;2179:4;2184:2;2189:1;2184:6;2179:12;;;;;;;;;;;;;;2169:32;2157:44;;2207:9;2223:3;2219:1;:7;:32;;211:8;2219:32;;;2229:4;2234:2;2239:1;2234:6;2229:12;;;;;;;;;;;;;;2219:32;2207:44;;2257:9;2273:3;2269:1;:7;:32;;211:8;2269:32;;;2279:4;2284:2;2289:1;2284:6;2279:12;;;;;;;;;;;;;;2269:32;2257:44;;2307:9;2323:3;2319:1;:7;:32;;211:8;2319:32;;;2329:4;2334:2;2339:1;2334:6;2329:12;;;;;;;;;;;;;;2319:32;2307:44;;2357:9;2373:3;2369:1;:7;:32;;211:8;2369:32;;;2379:4;2384:2;2389:1;2384:6;2379:12;;;;;;;;;;;;;;2369:32;2357:44;;2417:2;2412;:7;2408:35;;;2434:2;;2438;2408:35;2457:2;2452;:7;2448:35;;;2474:2;;2478;2448:35;2497:2;2492;:7;2488:35;;;2514:2;;2518;2488:35;2537:2;2532;:7;2528:35;;;2554:2;;2558;2528:35;2577:2;2572;:7;2568:35;;;2594:2;;2598;2568:35;2617:2;2612;:7;2608:35;;;2634:2;2608:35;2657:2;2652;:7;2648:35;;;2674:2;;2678;2648:35;2697:2;2692;:7;2688:35;;;2714:2;2688:35;2737:2;2732;:7;2728:35;;;2754:2;;2758;2728:35;2777:2;2772;:7;2768:35;;;2794:2;;2798;2768:35;2817:2;2812;:7;2808:35;;;2834:2;2808:35;2857:2;2852;:7;2848:35;;;2874:2;;2878;2848:35;2897:2;2892;:7;2888:35;;;2914:2;2888:35;2937:2;2932;:7;2928:35;;;2954:2;;2958;2928:35;2977:2;2972;:7;2968:35;;;2994:2;;2998;2968:35;3017:2;3012;:7;3008:35;;;3034:2;;3038;3008:35;3066:7;;;3083:11;3079:302;;3104:2;3097:9;;3079:302;;;3122:6;3132:1;3122:11;3118:263;;;3143:2;3136:9;;3118:263;;;3161:6;3171:1;3161:11;3157:224;;;3182:2;3175:9;;3157:224;;;3200:6;3210:1;3200:11;3196:185;;;3221:2;3214:9;;3196:185;;;3239:6;3249:1;3239:11;3235:146;;;3260:2;3253:9;;3235:146;;;3278:6;3288:1;3278:11;3274:107;;;3299:2;3292:9;;3274:107;;;3317:6;3327:1;3317:11;3313:68;;;3338:2;3331:9;;3313:68;;;3353:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3313:68;3404:7;;;3421:8;;;3417:404;;;-1:-1:-1;3440:4:11;;-1:-1:-1;3432:19:11;;-1:-1:-1;;;;;;;;;3432:19:11;3417:404;3467:11;3463:358;;-1:-1:-1;3495:2:11;;-1:-1:-1;3481:17:11;;-1:-1:-1;;;;;;;;3481:17:11;3463:358;3514:6;3524:1;3514:11;3510:311;;;-1:-1:-1;3542:2:11;;-1:-1:-1;3528:17:11;;-1:-1:-1;;;;;;;;3528:17:11;3510:311;3561:6;3571:1;3561:11;3557:264;;;-1:-1:-1;3589:2:11;;-1:-1:-1;3575:17:11;;-1:-1:-1;;;;;;;;3575:17:11;3557:264;3608:6;3618:1;3608:11;3604:217;;;-1:-1:-1;3636:2:11;;-1:-1:-1;3622:17:11;;-1:-1:-1;;;;;;;;3622:17:11;3604:217;3655:6;3665:1;3655:11;3651:170;;;-1:-1:-1;3683:2:11;;-1:-1:-1;3669:17:11;;-1:-1:-1;;;;;;;;3669:17:11;3651:170;3702:6;3712:1;3702:11;3698:123;;;-1:-1:-1;3730:2:11;;-1:-1:-1;3716:17:11;;-1:-1:-1;;;;;;;;3716:17:11;3698:123;3749:6;3759:1;3749:11;3745:76;;;-1:-1:-1;3777:2:11;;-1:-1:-1;3763:17:11;;-1:-1:-1;;;;;;;;3763:17:11;3745:76;3793:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6044:1223;6143:7;;6311:4;6328:1;6317:7;;;6316:13;6311:19;;;;;;;;;;;;;;6296:34;;6342:1;6336:7;;;;6398:1;6392:7;;;;6405:858;6445:1;6439:7;;;;6474:5;6463:4;6468:2;6463:8;;;;;;;;;;;;;;:16;6426:55;;6488;6507:1;6501:7;;;;6536:5;6525:4;6530:2;6525:8;;;;;;;;;;;;;;:16;6488:55;;6559:2;6554;:7;6550:707;;;6597:4;6602:2;6597:8;;;;;;;;;;;;;;6607:4;6612:2;6607:8;;;;;;;;;;;;;;6574:4;6579:2;6574:8;;;;;;;;;;;;;6584:4;6589:2;6584:8;;;;;;;;;;;;;;;;;6573:43;;;;;6550:707;;;7246:2;7239:9;;;;;6550:707;6405:858;;6044:1223;;;;;;:::o;3981:773::-;4093:10;4127:1;4121:2;:7;;4113:16;;12:1:-1;9;2:12;4113:16:11;4148:2;4143:1;:7;;4135:16;;12:1:-1;9;2:12;4135:16:11;4169:2;4164;:7;4157:572;;;1490:1;4190:2;4185;:7;:35;4181:153;;;4232:13;4271:34;4286:4;4292:2;4296;4300:1;4303;4271:14;:34::i;:::-;-1:-1:-1;4255:50:11;-1:-1:-1;4315:10:11;;-1:-1:-1;4315:10:11;4181:153;4341:18;4362:23;4372:4;4378:2;4382;4362:9;:23::i;:::-;4341:44;;4402:10;4397:1;:15;4393:330;;4544:10;4539:15;;4393:330;;;4700:10;4713:1;4700:14;4695:19;;4393:330;4157:572;;;;4741:4;4746:2;4741:8;;;;;;;;;;;;;;4734:15;;3981:773;;;;;;;:::o;7396:246::-;7465:15;7490:21;7527:4;:11;7514:25;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7514:25:11;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;7514:25:11;-1:-1:-1;7490:49:11;-1:-1:-1;7550:9:11;7545:75;7569:4;:11;7565:1;:15;7545:75;;;7606:4;7611:1;7606:7;;;;;;;;;;;;;;7595:5;7601:1;7595:8;;;;;;;;;;;;;;;;;:18;7582:3;;7545:75;;;-1:-1:-1;7632:5:11;7396:246;-1:-1:-1;;7396:246:11:o;856:506::-;939:6;967:4;:11;963:1;:15;955:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1025:11;;1070:1;1064:7;;1081;;;1077:281;;1103:14;1125;1168:62;1183:4;1189:1;1198;1192:3;:7;1215:1;1201:11;:15;1218:11;1168:14;:62::i;:::-;1147:83;;-1:-1:-1;1147:83:11;-1:-1:-1;1245:36:11;1147:83;;1245:18;:36::i;:::-;1238:43;;;;;;;;1077:281;1309:42;1321:4;1327:1;1336;1330:3;:7;1339:11;1309;:42::i;:::-;1302:49;;;;;;1860:267:18;1930:6;1956:1;1951:2;:6;:16;;;;;1966:1;1961:2;:6;1951:16;1950:40;;;;1978:1;1973:2;:6;:16;;;;;1988:1;1983:2;:6;1973:16;1946:83;;;2021:1;2007:11;2011:2;2015;2007:3;:11::i;:::-;:15;;;;;;2000:22;;;;1946:83;2034:16;2073:1;2054:6;;;2063;;;2054:15;2053:21;;-1:-1:-1;2087:35:18;2091:19;2100:1;2095:2;:6;2108:1;2103:2;:6;2091:3;:19::i;:::-;2112:9;2087:3;:35::i;:::-;2080:42;;;1860:267;;;;;:::o;1435:196::-;1491:6;1516:5;;;1536:6;;;;;;:16;;;1551:1;1546;:6;;1536:16;1535:38;;;;1562:1;1558;:5;:14;;;;;1571:1;1567;:5;1558:14;1527:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"methodIdentifiers": {
"publicGet(int256[])": "115efb20",
"publicQuickselectTwo(int256[],uint256,uint256)": "0fb75cff"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.6.6+commit.6c089d02\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"list\",\"type\":\"int256[]\"}],\"name\":\"publicGet\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"list\",\"type\":\"int256[]\"},{\"internalType\":\"uint256\",\"name\":\"k1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"k2\",\"type\":\"uint256\"}],\"name\":\"publicQuickselectTwo\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/tests/MedianTestHelper.sol\":\"MedianTestHelper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/Median.sol\":{\"keccak256\":\"0x844b85b7864a30e3c89227419ade06b1e2314f810025c50ad22e7cbe4eb90691\",\"urls\":[\"bzz-raw://b75cfd1cfb09b00b075e5b2123255a54ae0d7a16136496487369e422db182508\",\"dweb:/ipfs/QmdkQTayL83SqSqnnF5azPFt3q3vjbx63NjuuezZyZgDCj\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/SignedSafeMath.sol\":{\"keccak256\":\"0x1a4f6b94292a5cfb16e5eb56a4c0a4395c1c10353452bd54d15fe4526506d336\",\"urls\":[\"bzz-raw://43457ed7b7207ec1f50e00127809769f109bb1ab91b84a5dbc3a19685170b634\",\"dweb:/ipfs/QmQBvs8PHAdU4tyrzZfkhJ8EDA1aLJbMWRu6VrKPrBfeFj\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/tests/MedianTestHelper.sol\":{\"keccak256\":\"0xa6067406d28adab216544da406ae1d0d7765eb4b787bd133d3a9f2ed88d83287\",\"urls\":[\"bzz-raw://52c93592b152373b28b0678e6cb462dc5e8e28b049c0efb40f7d745487fa28c0\",\"dweb:/ipfs/QmbGuw4UP4fTQipgUeodk8hWGzJ3S4kdYGpEgZEeUeviu3\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/vendor/SafeMathChainlink.sol\":{\"keccak256\":\"0x105f5e9491f3d0bbdd4f1c7627eb839d69b944bfd803028a01cc083597692c1f\",\"urls\":[\"bzz-raw://ec45a2748a024a947a921183d4102d5e206808588501d85ddc4f5668a009bc73\",\"dweb:/ipfs/QmRNAMpq7LdWFnJ7wWKGbUuAcURaGSS42PMxtQ4vjrHmp9\"]}},\"version\":1}",
"userdoc": {
"methods": {}
}
},
"sources": {
"tests/MedianTestHelper.sol": {
"id": 52
},
"Median.sol": {
"id": 11
},
"vendor/SafeMathChainlink.sol": {
"id": 67
},
"SignedSafeMath.sol": {
"id": 18
}
},
"sourceCodes": {
"tests/MedianTestHelper.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\nimport \"../Median.sol\";\n\ncontract MedianTestHelper {\n function publicGet(int256[] memory list)\n public\n pure\n returns (int256)\n {\n return Median.calculate(list);\n }\n\n function publicQuickselectTwo(int256[] memory list, uint256 k1, uint256 k2)\n public\n pure\n returns (int256, int256)\n {\n return Median.quickselectTwo(list, 0, list.length - 1, k1, k2);\n }\n}\n",
"Median.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\nimport \"./vendor/SafeMathChainlink.sol\";\nimport \"./SignedSafeMath.sol\";\n\nlibrary Median {\n using SignedSafeMath for int256;\n\n int256 constant INT_MAX = 2**255-1;\n\n /**\n * @notice Returns the sorted middle, or the average of the two middle indexed items if the\n * array has an even number of elements.\n * @dev The list passed as an argument isn't modified.\n * @dev This algorithm has expected runtime O(n), but for adversarially chosen inputs\n * the runtime is O(n^2).\n * @param list The list of elements to compare\n */\n function calculate(int256[] memory list)\n internal\n pure\n returns (int256)\n {\n return calculateInplace(copy(list));\n }\n\n /**\n * @notice See documentation for function calculate.\n * @dev The list passed as an argument may be permuted.\n */\n function calculateInplace(int256[] memory list)\n internal\n pure\n returns (int256)\n {\n require(0 < list.length, \"list must not be empty\");\n uint256 len = list.length;\n uint256 middleIndex = len / 2;\n if (len % 2 == 0) {\n int256 median1;\n int256 median2;\n (median1, median2) = quickselectTwo(list, 0, len - 1, middleIndex - 1, middleIndex);\n return SignedSafeMath.avg(median1, median2);\n } else {\n return quickselect(list, 0, len - 1, middleIndex);\n }\n }\n\n /**\n * @notice Maximum length of list that shortSelectTwo can handle\n */\n uint256 constant SHORTSELECTTWO_MAX_LENGTH = 7;\n\n /**\n * @notice Select the k1-th and k2-th element from list of length at most 7\n * @dev Uses an optimal sorting network\n */\n function shortSelectTwo(\n int256[] memory list,\n uint256 lo,\n uint256 hi,\n uint256 k1,\n uint256 k2\n )\n private\n pure\n returns (int256 k1th, int256 k2th)\n {\n // Uses an optimal sorting network (https://en.wikipedia.org/wiki/Sorting_network)\n // for lists of length 7. Network layout is taken from\n // http://jgamble.ripco.net/cgi-bin/nw.cgi?inputs=7&algorithm=hibbard&output=svg\n\n uint256 len = hi + 1 - lo;\n int256 x0 = list[lo + 0];\n int256 x1 = 1 < len ? list[lo + 1] : INT_MAX;\n int256 x2 = 2 < len ? list[lo + 2] : INT_MAX;\n int256 x3 = 3 < len ? list[lo + 3] : INT_MAX;\n int256 x4 = 4 < len ? list[lo + 4] : INT_MAX;\n int256 x5 = 5 < len ? list[lo + 5] : INT_MAX;\n int256 x6 = 6 < len ? list[lo + 6] : INT_MAX;\n\n if (x0 > x1) {(x0, x1) = (x1, x0);}\n if (x2 > x3) {(x2, x3) = (x3, x2);}\n if (x4 > x5) {(x4, x5) = (x5, x4);}\n if (x0 > x2) {(x0, x2) = (x2, x0);}\n if (x1 > x3) {(x1, x3) = (x3, x1);}\n if (x4 > x6) {(x4, x6) = (x6, x4);}\n if (x1 > x2) {(x1, x2) = (x2, x1);}\n if (x5 > x6) {(x5, x6) = (x6, x5);}\n if (x0 > x4) {(x0, x4) = (x4, x0);}\n if (x1 > x5) {(x1, x5) = (x5, x1);}\n if (x2 > x6) {(x2, x6) = (x6, x2);}\n if (x1 > x4) {(x1, x4) = (x4, x1);}\n if (x3 > x6) {(x3, x6) = (x6, x3);}\n if (x2 > x4) {(x2, x4) = (x4, x2);}\n if (x3 > x5) {(x3, x5) = (x5, x3);}\n if (x3 > x4) {(x3, x4) = (x4, x3);}\n\n uint256 index1 = k1 - lo;\n if (index1 == 0) {k1th = x0;}\n else if (index1 == 1) {k1th = x1;}\n else if (index1 == 2) {k1th = x2;}\n else if (index1 == 3) {k1th = x3;}\n else if (index1 == 4) {k1th = x4;}\n else if (index1 == 5) {k1th = x5;}\n else if (index1 == 6) {k1th = x6;}\n else {revert(\"k1 out of bounds\");}\n\n uint256 index2 = k2 - lo;\n if (k1 == k2) {return (k1th, k1th);}\n else if (index2 == 0) {return (k1th, x0);}\n else if (index2 == 1) {return (k1th, x1);}\n else if (index2 == 2) {return (k1th, x2);}\n else if (index2 == 3) {return (k1th, x3);}\n else if (index2 == 4) {return (k1th, x4);}\n else if (index2 == 5) {return (k1th, x5);}\n else if (index2 == 6) {return (k1th, x6);}\n else {revert(\"k2 out of bounds\");}\n }\n\n /**\n * @notice Selects the k-th ranked element from list, looking only at indices between lo and hi\n * (inclusive). Modifies list in-place.\n */\n function quickselect(int256[] memory list, uint256 lo, uint256 hi, uint256 k)\n private\n pure\n returns (int256 kth)\n {\n require(lo <= k);\n require(k <= hi);\n while (lo < hi) {\n if (hi - lo < SHORTSELECTTWO_MAX_LENGTH) {\n int256 ignore;\n (kth, ignore) = shortSelectTwo(list, lo, hi, k, k);\n return kth;\n }\n uint256 pivotIndex = partition(list, lo, hi);\n if (k <= pivotIndex) {\n // since pivotIndex < (original hi passed to partition),\n // termination is guaranteed in this case\n hi = pivotIndex;\n } else {\n // since (original lo passed to partition) <= pivotIndex,\n // termination is guaranteed in this case\n lo = pivotIndex + 1;\n }\n }\n return list[lo];\n }\n\n /**\n * @notice Selects the k1-th and k2-th ranked elements from list, looking only at indices between\n * lo and hi (inclusive). Modifies list in-place.\n */\n function quickselectTwo(\n int256[] memory list,\n uint256 lo,\n uint256 hi,\n uint256 k1,\n uint256 k2\n )\n internal // for testing\n pure\n returns (int256 k1th, int256 k2th)\n {\n require(k1 < k2);\n require(lo <= k1 && k1 <= hi);\n require(lo <= k2 && k2 <= hi);\n\n while (true) {\n if (hi - lo < SHORTSELECTTWO_MAX_LENGTH) {\n return shortSelectTwo(list, lo, hi, k1, k2);\n }\n uint256 pivotIdx = partition(list, lo, hi);\n if (k2 <= pivotIdx) {\n hi = pivotIdx;\n } else if (pivotIdx < k1) {\n lo = pivotIdx + 1;\n } else {\n assert(k1 <= pivotIdx && pivotIdx < k2);\n k1th = quickselect(list, lo, pivotIdx, k1);\n k2th = quickselect(list, pivotIdx + 1, hi, k2);\n return (k1th, k2th);\n }\n }\n }\n\n /**\n * @notice Partitions list in-place using Hoare's partitioning scheme.\n * Only elements of list between indices lo and hi (inclusive) will be modified.\n * Returns an index i, such that:\n * - lo <= i < hi\n * - forall j in [lo, i]. list[j] <= list[i]\n * - forall j in [i, hi]. list[i] <= list[j]\n */\n function partition(int256[] memory list, uint256 lo, uint256 hi)\n private\n pure\n returns (uint256)\n {\n // We don't care about overflow of the addition, because it would require a list\n // larger than any feasible computer's memory.\n int256 pivot = list[(lo + hi) / 2];\n lo -= 1; // this can underflow. that's intentional.\n hi += 1;\n while (true) {\n do {\n lo += 1;\n } while (list[lo] < pivot);\n do {\n hi -= 1;\n } while (list[hi] > pivot);\n if (lo < hi) {\n (list[lo], list[hi]) = (list[hi], list[lo]);\n } else {\n // Let orig_lo and orig_hi be the original values of lo and hi passed to partition.\n // Then, hi < orig_hi, because hi decreases *strictly* monotonically\n // in each loop iteration and\n // - either list[orig_hi] > pivot, in which case the first loop iteration\n // will achieve hi < orig_hi;\n // - or list[orig_hi] <= pivot, in which case at least two loop iterations are\n // needed:\n // - lo will have to stop at least once in the interval\n // [orig_lo, (orig_lo + orig_hi)/2]\n // - (orig_lo + orig_hi)/2 < orig_hi\n return hi;\n }\n }\n }\n\n /**\n * @notice Makes an in-memory copy of the array passed in\n * @param list Reference to the array to be copied\n */\n function copy(int256[] memory list)\n private\n pure\n returns(int256[] memory)\n {\n int256[] memory list2 = new int256[](list.length);\n for (uint256 i = 0; i < list.length; i++) {\n list2[i] = list[i];\n }\n return list2;\n }\n}\n",
"vendor/SafeMathChainlink.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathChainlink {\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n uint256 c = a - b;\n\n return c;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522\n if (a == 0) {\n return 0;\n }\n\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers. Reverts on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n // Solidity only automatically asserts when dividing by 0\n require(b > 0, \"SafeMath: division by zero\");\n uint256 c = a / b;\n // assert(a == b * c + a % b); // There is no case in which this doesn't hold\n\n return c;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * Reverts when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b != 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n}\n",
"SignedSafeMath.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\nlibrary SignedSafeMath {\n int256 constant private _INT256_MIN = -2**255;\n\n /**\n * @dev Multiplies two signed integers, reverts on overflow.\n */\n function mul(int256 a, int256 b) internal pure returns (int256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) {\n return 0;\n }\n\n require(!(a == -1 && b == _INT256_MIN), \"SignedSafeMath: multiplication overflow\");\n\n int256 c = a * b;\n require(c / a == b, \"SignedSafeMath: multiplication overflow\");\n\n return c;\n }\n\n /**\n * @dev Integer division of two signed integers truncating the quotient, reverts on division by zero.\n */\n function div(int256 a, int256 b) internal pure returns (int256) {\n require(b != 0, \"SignedSafeMath: division by zero\");\n require(!(b == -1 && a == _INT256_MIN), \"SignedSafeMath: division overflow\");\n\n int256 c = a / b;\n\n return c;\n }\n\n /**\n * @dev Subtracts two signed integers, reverts on overflow.\n */\n function sub(int256 a, int256 b) internal pure returns (int256) {\n int256 c = a - b;\n require((b >= 0 && c <= a) || (b < 0 && c > a), \"SignedSafeMath: subtraction overflow\");\n\n return c;\n }\n\n /**\n * @dev Adds two signed integers, reverts on overflow.\n */\n function add(int256 a, int256 b) internal pure returns (int256) {\n int256 c = a + b;\n require((b >= 0 && c >= a) || (b < 0 && c < a), \"SignedSafeMath: addition overflow\");\n\n return c;\n }\n\n /**\n * @notice Computes average of two signed integers, ensuring that the computation\n * doesn't overflow.\n * @dev If the result is not an integer, it is rounded towards zero. For example,\n * avg(-3, -4) = -3\n */\n function avg(int256 _a, int256 _b)\n internal\n pure\n returns (int256)\n {\n if ((_a < 0 && _b > 0) || (_a > 0 && _b < 0)) {\n return add(_a, _b) / 2;\n }\n int256 remainder = (_a % 2 + _b % 2) / 2;\n return add(add(_a / 2, _b / 2), remainder);\n }\n}\n"
},
"sourceTreeHashHex": "0xb93df0f76a2d20ad67fec55ea3998b55306488b11b98537105afcccecff292e9",
"compiler": {
"name": "solc",
"version": "soljson-v0.6.6+commit.6c089d02.js",
"settings": {
"optimizer": {
"runs": 1000000,
"enabled": true
},
"outputSelection": {
"*": {
"*": [
"abi",
"devdoc",
"userdoc",
"evm.bytecode.object",
"evm.bytecode.sourceMap",
"evm.deployedBytecode.object",
"evm.deployedBytecode.sourceMap",
"evm.methodIdentifiers",
"metadata"
]
}
},
"metadata": {
"bytecodeHash": "none"
},
"remappings": []
}
},
"chains": {}
}
\ No newline at end of file
{
"schemaVersion": "2.0.0",
"contractName": "MockOracle",
"compilerOutput": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_link",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "requestId",
"type": "bytes32"
}
],
"name": "CancelOracleRequest",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "specId",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "address",
"name": "requester",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "requestId",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "payment",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "callbackAddr",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes4",
"name": "callbackFunctionId",
"type": "bytes4"
},
{
"indexed": false,
"internalType": "uint256",
"name": "cancelExpiration",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "dataVersion",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "OracleRequest",
"type": "event"
},
{
"inputs": [],
"name": "EXPIRY_TIME",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_requestId",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "_payment",
"type": "uint256"
},
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
},
{
"internalType": "uint256",
"name": "_expiration",
"type": "uint256"
}
],
"name": "cancelOracleRequest",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_requestId",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "_data",
"type": "bytes32"
}
],
"name": "fulfillOracleRequest",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getChainlinkToken",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"name": "onTokenTransfer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "_payment",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "_specId",
"type": "bytes32"
},
{
"internalType": "address",
"name": "_callbackAddress",
"type": "address"
},
{
"internalType": "bytes4",
"name": "_callbackFunctionId",
"type": "bytes4"
},
{
"internalType": "uint256",
"name": "_nonce",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_dataVersion",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"name": "oracleRequest",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"methods": {
"cancelOracleRequest(bytes32,uint256,bytes4,uint256)": {
"details": "Given params must hash to a commitment stored on the contract in order for the request to be valid Emits CancelOracleRequest event.",
"params": {
"_expiration": "The time of the expiration for the request",
"_payment": "The amount of payment given (specified in wei)",
"_requestId": "The request ID"
}
},
"constructor": {
"details": "Sets the LinkToken address for the imported LinkTokenInterface",
"params": {
"_link": "The address of the LINK token"
}
},
"fulfillOracleRequest(bytes32,bytes32)": {
"details": "Given params must hash back to the commitment stored from `oracleRequest`. Will call the callback address' callback function without bubbling up error checking in a `require` so that the node can get paid.",
"params": {
"_data": "The data to return to the consuming contract",
"_requestId": "The fulfillment request ID that must match the requester's"
},
"returns": {
"_0": "Status if the external call was successful"
}
},
"getChainlinkToken()": {
"details": "This is the public implementation for chainlinkTokenAddress, which is an internal method of the ChainlinkClient contract"
},
"onTokenTransfer(address,uint256,bytes)": {
"details": "The data payload's first 2 words will be overwritten by the `_sender` and `_amount` values to ensure correctness. Calls oracleRequest.",
"params": {
"_amount": "Amount of LINK sent (specified in wei)",
"_data": "Payload of the transaction",
"_sender": "Address of the sender"
}
},
"oracleRequest(address,uint256,bytes32,address,bytes4,uint256,uint256,bytes)": {
"details": "Stores the hash of the params as the on-chain commitment for the request. Emits OracleRequest event for the Chainlink node to detect.",
"params": {
"_callbackAddress": "The callback address for the response",
"_callbackFunctionId": "The callback function ID for the response",
"_data": "The CBOR payload of the request",
"_dataVersion": "The specified data version",
"_nonce": "The nonce sent by the requester",
"_payment": "The amount of payment given (specified in wei)",
"_sender": "The sender of the request",
"_specId": "The Job Specification ID"
}
}
},
"title": "The Chainlink Mock Oracle contract"
},
"evm": {
"bytecode": {
"linkReferences": {},
"object": "0x608060405234801561001057600080fd5b506040516110863803806110868339818101604052602081101561003357600080fd5b5051600080546001600160a01b039092166001600160a01b0319909216919091179055611021806100656000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80634b602282116100505780634b602282146101b75780636ee4d553146101d1578063a4c0ed361461022257610072565b8063165d35e1146100775780631f8f238c146100a857806340429946146100df575b600080fd5b61007f6102ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100cb600480360360408110156100be57600080fd5b5080359060200135610306565b604080519115158252519081900360200190f35b6101b560048036036101008110156100f657600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013592604082013592606083013516917fffffffff000000000000000000000000000000000000000000000000000000006080820135169160a08201359160c081013591810190610100810160e082013564010000000081111561017657600080fd5b82018360208201111561018857600080fd5b803590602001918460018302840111640100000000831117156101aa57600080fd5b509092509050610604565b005b6101bf610a53565b60408051918252519081900360200190f35b6101b5600480360360808110156101e757600080fd5b508035906020810135907fffffffff000000000000000000000000000000000000000000000000000000006040820135169060600135610a59565b6101b56004803603606081101561023857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359181019060608101604082013564010000000081111561027557600080fd5b82018360208201111561028757600080fd5b803590602001918460018302840111640100000000831117156102a957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610c66945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b600082815260016020526040812054839073ffffffffffffffffffffffffffffffffffffffff1661039857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4d757374206861766520612076616c6964207265717565737449640000000000604482015290519081900360640190fd5b6103a0610ffd565b5060008481526001602081815260408084208151808301909252805473ffffffffffffffffffffffffffffffffffffffff811683527fffffffff0000000000000000000000000000000000000000000000000000000074010000000000000000000000000000000000000000820460e01b168385015294899052929091527fffffffffffffffff000000000000000000000000000000000000000000000000909216905562061a805a10156104b657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4d7573742070726f7669646520636f6e73756d657220656e6f75676820676173604482015290519081900360640190fd5b805160208083015160408051602481018a905260448082018a9052825180830390910181526064909101825292830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217825251825160009473ffffffffffffffffffffffffffffffffffffffff16939282918083835b6020831061059057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610553565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146105f2576040519150601f19603f3d011682016040523d82523d6000602084013e6105f7565b606091505b5090979650505050505050565b61060c6102ea565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106a557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d75737420757365204c494e4b20746f6b656e00000000000000000000000000604482015290519081900360640190fd5b600054869073ffffffffffffffffffffffffffffffffffffffff8083169116141561073157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f742063616c6c6261636b20746f204c494e4b000000000000000000604482015290519081900360640190fd5b604080517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d901b1660208083019190915260348083018990528351808403909101815260549092018352815191810191909120600081815260019092529190205473ffffffffffffffffffffffffffffffffffffffff161561081757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4d75737420757365206120756e69717565204944000000000000000000000000604482015290519081900360640190fd5b600061082b4261012c63ffffffff610f8216565b905060405180604001604052808a73ffffffffffffffffffffffffffffffffffffffff168152602001897bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152506001600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908360e01c0217905550905050897fd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c658d848e8d8d878d8d8d604051808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001858152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039c50909a5050505050505050505050a2505050505050505050505050565b61012c81565b60008481526001602052604090205473ffffffffffffffffffffffffffffffffffffffff16610ae957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4d75737420757365206120756e69717565204944000000000000000000000000604482015290519081900360640190fd5b42811115610b5857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f52657175657374206973206e6f74206578706972656400000000000000000000604482015290519081900360640190fd5b60008481526001602052604080822080547fffffffffffffffff0000000000000000000000000000000000000000000000001690555185917fa7842b9ec549398102c0d91b1b9919b2f20558aefdadf57528a95c6cd3292e9391a260008054604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101879052905173ffffffffffffffffffffffffffffffffffffffff9092169263a9059cbb926044808401936020939083900390910190829087803b158015610c2e57600080fd5b505af1158015610c42573d6000803e3d6000fd5b505050506040513d6020811015610c5857600080fd5b5051610c6057fe5b50505050565b610c6e6102ea565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d75737420757365204c494e4b20746f6b656e00000000000000000000000000604482015290519081900360640190fd5b8051819060441115610d7a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496e76616c69642072657175657374206c656e67746800000000000000000000604482015290519081900360640190fd5b602082015182907fffffffff0000000000000000000000000000000000000000000000000000000081167f404299460000000000000000000000000000000000000000000000000000000014610e3157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4d757374207573652077686974656c69737465642066756e6374696f6e730000604482015290519081900360640190fd5b85602485015284604485015260003073ffffffffffffffffffffffffffffffffffffffff16856040518082805190602001908083835b60208310610ea457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610e67565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610f04576040519150601f19603f3d011682016040523d82523d6000602084013e610f09565b606091505b5050905080610f7957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e61626c6520746f2063726561746520726571756573740000000000000000604482015290519081900360640190fd5b50505050505050565b600082820183811015610ff657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60408051808201909152600080825260208201529056fea164736f6c6343000606000a",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1086 CODESIZE SUB DUP1 PUSH2 0x1086 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1021 DUP1 PUSH2 0x65 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x72 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4B602282 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x4B602282 EQ PUSH2 0x1B7 JUMPI DUP1 PUSH4 0x6EE4D553 EQ PUSH2 0x1D1 JUMPI DUP1 PUSH4 0xA4C0ED36 EQ PUSH2 0x222 JUMPI PUSH2 0x72 JUMP JUMPDEST DUP1 PUSH4 0x165D35E1 EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0x1F8F238C EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x40429946 EQ PUSH2 0xDF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F PUSH2 0x2EA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xCB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x306 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x100 DUP2 LT ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP4 ADD CALLDATALOAD AND SWAP2 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP2 PUSH1 0xA0 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0xC0 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH2 0x100 DUP2 ADD PUSH1 0xE0 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x176 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x604 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1BF PUSH2 0xA53 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0xA59 JUMP JUMPDEST PUSH2 0x1B5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x287 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x2A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xC66 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP4 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x398 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D757374206861766520612076616C6964207265717565737449640000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3A0 PUSH2 0xFFD JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP4 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH21 0x10000000000000000000000000000000000000000 DUP3 DIV PUSH1 0xE0 SHL AND DUP4 DUP6 ADD MSTORE SWAP5 DUP10 SWAP1 MSTORE SWAP3 SWAP1 SWAP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP1 SSTORE PUSH3 0x61A80 GAS LT ISZERO PUSH2 0x4B6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D7573742070726F7669646520636F6E73756D657220656E6F75676820676173 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x24 DUP2 ADD DUP11 SWAP1 MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP11 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD DUP3 MSTORE SWAP3 DUP4 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR DUP3 MSTORE MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 DUP3 SWAP2 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x590 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x553 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x5F2 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x5F7 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x60C PUSH2 0x2EA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x6A5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D75737420757365204C494E4B20746F6B656E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD DUP7 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND SWAP2 AND EQ ISZERO PUSH2 0x731 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C6261636B20746F204C494E4B000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 DUP14 SWAP1 SHL AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x34 DUP1 DUP4 ADD DUP10 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x54 SWAP1 SWAP3 ADD DUP4 MSTORE DUP2 MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE SWAP2 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x817 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D75737420757365206120756E69717565204944000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x82B TIMESTAMP PUSH2 0x12C PUSH4 0xFFFFFFFF PUSH2 0xF82 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE POP PUSH1 0x1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 ADD MLOAD DUP2 PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x20 DUP3 ADD MLOAD DUP2 PUSH1 0x0 ADD PUSH1 0x14 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH1 0xE0 SHR MUL OR SWAP1 SSTORE POP SWAP1 POP POP DUP10 PUSH32 0xD8D7ECC4800D25FA53CE0372F13A416D98907A7EF3D8D3BDD79CF4FE75529C65 DUP14 DUP5 DUP15 DUP14 DUP14 DUP8 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP13 POP SWAP1 SWAP11 POP POP POP POP POP POP POP POP POP POP POP LOG2 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x12C DUP2 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xAE9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D75737420757365206120756E69717565204944000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP DUP2 GT ISZERO PUSH2 0xB58 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x52657175657374206973206E6F74206578706972656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 AND SWAP1 SSTORE MLOAD DUP6 SWAP2 PUSH32 0xA7842B9EC549398102C0D91B1B9919B2F20558AEFDADF57528A95C6CD3292E93 SWAP2 LOG2 PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0xA9059CBB SWAP3 PUSH1 0x44 DUP1 DUP5 ADD SWAP4 PUSH1 0x20 SWAP4 SWAP1 DUP4 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC42 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0xC60 JUMPI INVALID JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xC6E PUSH2 0x2EA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xD07 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D75737420757365204C494E4B20746F6B656E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP2 SWAP1 PUSH1 0x44 GT ISZERO PUSH2 0xD7A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C69642072657175657374206C656E67746800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD DUP3 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH32 0x4042994600000000000000000000000000000000000000000000000000000000 EQ PUSH2 0xE31 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D757374207573652077686974656C69737465642066756E6374696F6E730000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP6 PUSH1 0x24 DUP6 ADD MSTORE DUP5 PUSH1 0x44 DUP6 ADD MSTORE PUSH1 0x0 ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xEA4 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xE67 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xF04 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xF09 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0xF79 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E61626C6520746F2063726561746520726571756573740000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xFF6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP MOD MOD STOP EXP ",
"sourceMap": "373:5737:53:-:0;;;1285:145;5:9:-1;2:2;;;27:1;24;17:12;2:2;1285:145:53;;;;;;;;;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1285:145:53;1339:9;:37;;-1:-1:-1;;;;;1339:37:53;;;-1:-1:-1;;;;;;1339:37:53;;;;;;;;;373:5737;;;;;;"
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c80634b602282116100505780634b602282146101b75780636ee4d553146101d1578063a4c0ed361461022257610072565b8063165d35e1146100775780631f8f238c146100a857806340429946146100df575b600080fd5b61007f6102ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100cb600480360360408110156100be57600080fd5b5080359060200135610306565b604080519115158252519081900360200190f35b6101b560048036036101008110156100f657600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013592604082013592606083013516917fffffffff000000000000000000000000000000000000000000000000000000006080820135169160a08201359160c081013591810190610100810160e082013564010000000081111561017657600080fd5b82018360208201111561018857600080fd5b803590602001918460018302840111640100000000831117156101aa57600080fd5b509092509050610604565b005b6101bf610a53565b60408051918252519081900360200190f35b6101b5600480360360808110156101e757600080fd5b508035906020810135907fffffffff000000000000000000000000000000000000000000000000000000006040820135169060600135610a59565b6101b56004803603606081101561023857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359181019060608101604082013564010000000081111561027557600080fd5b82018360208201111561028757600080fd5b803590602001918460018302840111640100000000831117156102a957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610c66945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b600082815260016020526040812054839073ffffffffffffffffffffffffffffffffffffffff1661039857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4d757374206861766520612076616c6964207265717565737449640000000000604482015290519081900360640190fd5b6103a0610ffd565b5060008481526001602081815260408084208151808301909252805473ffffffffffffffffffffffffffffffffffffffff811683527fffffffff0000000000000000000000000000000000000000000000000000000074010000000000000000000000000000000000000000820460e01b168385015294899052929091527fffffffffffffffff000000000000000000000000000000000000000000000000909216905562061a805a10156104b657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4d7573742070726f7669646520636f6e73756d657220656e6f75676820676173604482015290519081900360640190fd5b805160208083015160408051602481018a905260448082018a9052825180830390910181526064909101825292830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217825251825160009473ffffffffffffffffffffffffffffffffffffffff16939282918083835b6020831061059057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610553565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146105f2576040519150601f19603f3d011682016040523d82523d6000602084013e6105f7565b606091505b5090979650505050505050565b61060c6102ea565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106a557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d75737420757365204c494e4b20746f6b656e00000000000000000000000000604482015290519081900360640190fd5b600054869073ffffffffffffffffffffffffffffffffffffffff8083169116141561073157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f742063616c6c6261636b20746f204c494e4b000000000000000000604482015290519081900360640190fd5b604080517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d901b1660208083019190915260348083018990528351808403909101815260549092018352815191810191909120600081815260019092529190205473ffffffffffffffffffffffffffffffffffffffff161561081757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4d75737420757365206120756e69717565204944000000000000000000000000604482015290519081900360640190fd5b600061082b4261012c63ffffffff610f8216565b905060405180604001604052808a73ffffffffffffffffffffffffffffffffffffffff168152602001897bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152506001600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908360e01c0217905550905050897fd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c658d848e8d8d878d8d8d604051808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001858152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039c50909a5050505050505050505050a2505050505050505050505050565b61012c81565b60008481526001602052604090205473ffffffffffffffffffffffffffffffffffffffff16610ae957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4d75737420757365206120756e69717565204944000000000000000000000000604482015290519081900360640190fd5b42811115610b5857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f52657175657374206973206e6f74206578706972656400000000000000000000604482015290519081900360640190fd5b60008481526001602052604080822080547fffffffffffffffff0000000000000000000000000000000000000000000000001690555185917fa7842b9ec549398102c0d91b1b9919b2f20558aefdadf57528a95c6cd3292e9391a260008054604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101879052905173ffffffffffffffffffffffffffffffffffffffff9092169263a9059cbb926044808401936020939083900390910190829087803b158015610c2e57600080fd5b505af1158015610c42573d6000803e3d6000fd5b505050506040513d6020811015610c5857600080fd5b5051610c6057fe5b50505050565b610c6e6102ea565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d75737420757365204c494e4b20746f6b656e00000000000000000000000000604482015290519081900360640190fd5b8051819060441115610d7a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496e76616c69642072657175657374206c656e67746800000000000000000000604482015290519081900360640190fd5b602082015182907fffffffff0000000000000000000000000000000000000000000000000000000081167f404299460000000000000000000000000000000000000000000000000000000014610e3157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4d757374207573652077686974656c69737465642066756e6374696f6e730000604482015290519081900360640190fd5b85602485015284604485015260003073ffffffffffffffffffffffffffffffffffffffff16856040518082805190602001908083835b60208310610ea457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610e67565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610f04576040519150601f19603f3d011682016040523d82523d6000602084013e610f09565b606091505b5050905080610f7957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e61626c6520746f2063726561746520726571756573740000000000000000604482015290519081900360640190fd5b50505050505050565b600082820183811015610ff657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60408051808201909152600080825260208201529056fea164736f6c6343000606000a",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x72 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4B602282 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x4B602282 EQ PUSH2 0x1B7 JUMPI DUP1 PUSH4 0x6EE4D553 EQ PUSH2 0x1D1 JUMPI DUP1 PUSH4 0xA4C0ED36 EQ PUSH2 0x222 JUMPI PUSH2 0x72 JUMP JUMPDEST DUP1 PUSH4 0x165D35E1 EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0x1F8F238C EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x40429946 EQ PUSH2 0xDF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F PUSH2 0x2EA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xCB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x306 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x100 DUP2 LT ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP4 ADD CALLDATALOAD AND SWAP2 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP2 PUSH1 0xA0 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0xC0 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH2 0x100 DUP2 ADD PUSH1 0xE0 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x176 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x604 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1BF PUSH2 0xA53 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0xA59 JUMP JUMPDEST PUSH2 0x1B5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x287 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x2A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xC66 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP4 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x398 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D757374206861766520612076616C6964207265717565737449640000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3A0 PUSH2 0xFFD JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP4 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH21 0x10000000000000000000000000000000000000000 DUP3 DIV PUSH1 0xE0 SHL AND DUP4 DUP6 ADD MSTORE SWAP5 DUP10 SWAP1 MSTORE SWAP3 SWAP1 SWAP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP1 SSTORE PUSH3 0x61A80 GAS LT ISZERO PUSH2 0x4B6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D7573742070726F7669646520636F6E73756D657220656E6F75676820676173 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x24 DUP2 ADD DUP11 SWAP1 MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP11 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD DUP3 MSTORE SWAP3 DUP4 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR DUP3 MSTORE MLOAD DUP3 MLOAD PUSH1 0x0 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 DUP3 SWAP2 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x590 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x553 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x5F2 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x5F7 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x60C PUSH2 0x2EA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x6A5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D75737420757365204C494E4B20746F6B656E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD DUP7 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND SWAP2 AND EQ ISZERO PUSH2 0x731 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C6261636B20746F204C494E4B000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 DUP14 SWAP1 SHL AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x34 DUP1 DUP4 ADD DUP10 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x54 SWAP1 SWAP3 ADD DUP4 MSTORE DUP2 MLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE SWAP2 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x817 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D75737420757365206120756E69717565204944000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x82B TIMESTAMP PUSH2 0x12C PUSH4 0xFFFFFFFF PUSH2 0xF82 AND JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE POP PUSH1 0x1 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 ADD MLOAD DUP2 PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x20 DUP3 ADD MLOAD DUP2 PUSH1 0x0 ADD PUSH1 0x14 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH1 0xE0 SHR MUL OR SWAP1 SSTORE POP SWAP1 POP POP DUP10 PUSH32 0xD8D7ECC4800D25FA53CE0372F13A416D98907A7EF3D8D3BDD79CF4FE75529C65 DUP14 DUP5 DUP15 DUP14 DUP14 DUP8 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD DUP1 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP13 POP SWAP1 SWAP11 POP POP POP POP POP POP POP POP POP POP POP LOG2 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x12C DUP2 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xAE9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D75737420757365206120756E69717565204944000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST TIMESTAMP DUP2 GT ISZERO PUSH2 0xB58 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x52657175657374206973206E6F74206578706972656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 AND SWAP1 SSTORE MLOAD DUP6 SWAP2 PUSH32 0xA7842B9EC549398102C0D91B1B9919B2F20558AEFDADF57528A95C6CD3292E93 SWAP2 LOG2 PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0xA9059CBB SWAP3 PUSH1 0x44 DUP1 DUP5 ADD SWAP4 PUSH1 0x20 SWAP4 SWAP1 DUP4 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC42 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0xC60 JUMPI INVALID JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xC6E PUSH2 0x2EA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xD07 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D75737420757365204C494E4B20746F6B656E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP2 SWAP1 PUSH1 0x44 GT ISZERO PUSH2 0xD7A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C69642072657175657374206C656E67746800000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD DUP3 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH32 0x4042994600000000000000000000000000000000000000000000000000000000 EQ PUSH2 0xE31 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D757374207573652077686974656C69737465642066756E6374696F6E730000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP6 PUSH1 0x24 DUP6 ADD MSTORE DUP5 PUSH1 0x44 DUP6 ADD MSTORE PUSH1 0x0 ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xEA4 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xE67 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xF04 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xF09 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0xF79 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E61626C6520746F2063726561746520726571756573740000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xFF6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP MOD MOD STOP EXP ",
"sourceMap": "373:5737:53:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;373:5737:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;5413:134:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3458:773;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3458:773:53;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2091:862;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;2091:862:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;2091:862:53;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;2091:862:53;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;2091:862:53;;-1:-1:-1;2091:862:53;-1:-1:-1;2091:862:53;:::i;:::-;;485:47;;;:::i;:::-;;;;;;;;;;;;;;;;4729:481;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;4729:481:53;;;;;;;;;;;;;;;;;;;:::i;750:663:10:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;750:663:10;;;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;750:663:10;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;750:663:10;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;750:663:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;750:663:10;;-1:-1:-1;750:663:10;;-1:-1:-1;;;;;750:663:10:i;5413:134:53:-;5495:7;5532:9;;;5413:134;:::o;3458:773::-;3599:4;5769:23;;;:11;:23;;;;;:36;3567:10;;5769:50;:36;5761:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3618:18:::1;;:::i;:::-;-1:-1:-1::0;3639:23:53::1;::::0;;;:11:::1;:23;::::0;;;;;;;3618:44;;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;;;;::::0;;::::1;::::0;3675:23;;;;;;;;3668:30;;;;;;590:6:::1;3712:9;:39;;3704:84;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;4072:16:::0;;4117:22:::1;::::0;;::::1;::::0;4094:65:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;4094:65:53;;;;;;25:18:-1;;::::1;61:17:::0;;4094:65:53::1;182:15:-1;4094:65:53::0;;;::::1;179:29:-1::0;;;::::1;160:49:::0;;4072:88:53;;;4054:12:::1;::::0;4072:21:::1;;::::0;4094:65;4072:88;;;;25:18:-1;36:153:::1;66:2;61:3;58:11;36:153;;176:10:::0;;164:23;;139:12;;;;;98:2:::1;89:12:::0;;::::1;::::0;114::::1;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;;;4072:88:53;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;-1:-1:::0;4053:107:53;;3458:773;-1:-1:-1;;;;;;;3458:773:53:o;2091:862::-;1598:19:10;:17;:19::i;:::-;1584:33;;:10;:33;;;1576:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6057:9:53::1;::::0;2382:16;;6057:9:::1;6042:25:::0;;::::1;6057:9:::0;::::1;6042:25;;6034:61;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;2438:33:::2;::::0;;;::::2;::::0;;;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2438:33:53;;;;;;2428:44;;;;::::2;::::0;;;;2408:17:::2;2486:22:::0;;;:11:::2;:22:::0;;;;;;:35;2438:33:::2;2486:35;:49:::0;2478:82:::2;;;::::0;;::::2;::::0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;2616:18;2637:20;:3;523:9;2637:20;:7;:20;:::i;:::-;2616:41;;2689:68;;;;;;;;2706:16;2689:68;;;;;;2732:19;2689:68;;;;;::::0;2664:11:::2;:22;2676:9;2664:22;;;;;;;;;;;:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2790:7;2769:179;2805:7;2820:9;2837:8;2853:16;2877:19;2904:10;2922:12;2942:5;;2769:179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;;::::2;74:27:::0;2769:179:53::2;::::0;137:4:-1::2;117:14:::0;;::::2;133:9:::0;113:30:::2;157:16:::0;;::::2;2769:179:53::0;;::::2;::::0;-1:-1:-1;2769:179:53;;-1:-1:-1;;;;;;;;;;;2769:179:53::2;6101:1;;1647::10::1;2091:862:53::0;;;;;;;;;:::o;485:47::-;523:9;485:47;:::o;4729:481::-;4935:1;4887:23;;;:11;:23;;;;;:36;:50;:36;4879:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5041:3;5026:11;:18;;5018:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5085:23;;;;:11;:23;;;;;;5078:30;;;;;;5119:31;5097:10;;5119:31;;;5164:9;;;:40;;;;;;5183:10;5164:40;;;;;;;;;;;;:9;;;;;:18;;:40;;;;;;;;;;;;;;;;;:9;:40;;;2:2:-1;;;;27:1;24;17:12;2:2;5164:40:53;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5164:40:53;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5164:40:53;5157:48;;;;4729:481;;;;:::o;750:663:10:-;1598:19;:17;:19::i;:::-;1584:33;;:10;:33;;;1576:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:12;;892:5;;315:47;-1:-1:-1;2310:38:10::1;2302:73;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;2006:2:::2;1995:14:::0;::::2;1989:21:::0;929:5;;2029:39;;::::2;2045:23:::0;2029:39:::2;2021:82;;;::::0;;::::2;::::0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;1041:7:::3;1036:2;1029:5;1025:14;1018:31;1171:7;1166:2;1159:5;1155:14;1148:31;1284:12;1310:4;1302:26;;1329:5;1302:33;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10:::0;;164:23;;139:12;;;;;98:2:::3;89:12:::0;;::::3;::::0;114::::3;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;;;1302:33:10;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1283:52:10;;;1372:7;1364:44;;;::::0;;::::3;::::0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;2109:1;2381::::2;;1647::::1;750:663:::0;;;:::o;863:162:67:-;921:7;948:5;;;967:6;;;;959:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1019:1;863:162;-1:-1:-1;;;863:162:67:o;373:5737:53:-;;;;;;;;;;-1:-1:-1;373:5737:53;;;;;;;;:::o"
},
"methodIdentifiers": {
"EXPIRY_TIME()": "4b602282",
"cancelOracleRequest(bytes32,uint256,bytes4,uint256)": "6ee4d553",
"fulfillOracleRequest(bytes32,bytes32)": "1f8f238c",
"getChainlinkToken()": "165d35e1",
"onTokenTransfer(address,uint256,bytes)": "a4c0ed36",
"oracleRequest(address,uint256,bytes32,address,bytes4,uint256,uint256,bytes)": "40429946"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.6.6+commit.6c089d02\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_link\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"requestId\",\"type\":\"bytes32\"}],\"name\":\"CancelOracleRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"specId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"requestId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"payment\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"callbackAddr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"callbackFunctionId\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cancelExpiration\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"dataVersion\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"OracleRequest\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"EXPIRY_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"},{\"internalType\":\"uint256\",\"name\":\"_expiration\",\"type\":\"uint256\"}],\"name\":\"cancelOracleRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_data\",\"type\":\"bytes32\"}],\"name\":\"fulfillOracleRequest\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainlinkToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_specId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_callbackAddress\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"_callbackFunctionId\",\"type\":\"bytes4\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_dataVersion\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"oracleRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"cancelOracleRequest(bytes32,uint256,bytes4,uint256)\":{\"details\":\"Given params must hash to a commitment stored on the contract in order for the request to be valid Emits CancelOracleRequest event.\",\"params\":{\"_expiration\":\"The time of the expiration for the request\",\"_payment\":\"The amount of payment given (specified in wei)\",\"_requestId\":\"The request ID\"}},\"constructor\":{\"details\":\"Sets the LinkToken address for the imported LinkTokenInterface\",\"params\":{\"_link\":\"The address of the LINK token\"}},\"fulfillOracleRequest(bytes32,bytes32)\":{\"details\":\"Given params must hash back to the commitment stored from `oracleRequest`. Will call the callback address' callback function without bubbling up error checking in a `require` so that the node can get paid.\",\"params\":{\"_data\":\"The data to return to the consuming contract\",\"_requestId\":\"The fulfillment request ID that must match the requester's\"},\"returns\":{\"_0\":\"Status if the external call was successful\"}},\"getChainlinkToken()\":{\"details\":\"This is the public implementation for chainlinkTokenAddress, which is an internal method of the ChainlinkClient contract\"},\"onTokenTransfer(address,uint256,bytes)\":{\"details\":\"The data payload's first 2 words will be overwritten by the `_sender` and `_amount` values to ensure correctness. Calls oracleRequest.\",\"params\":{\"_amount\":\"Amount of LINK sent (specified in wei)\",\"_data\":\"Payload of the transaction\",\"_sender\":\"Address of the sender\"}},\"oracleRequest(address,uint256,bytes32,address,bytes4,uint256,uint256,bytes)\":{\"details\":\"Stores the hash of the params as the on-chain commitment for the request. Emits OracleRequest event for the Chainlink node to detect.\",\"params\":{\"_callbackAddress\":\"The callback address for the response\",\"_callbackFunctionId\":\"The callback function ID for the response\",\"_data\":\"The CBOR payload of the request\",\"_dataVersion\":\"The specified data version\",\"_nonce\":\"The nonce sent by the requester\",\"_payment\":\"The amount of payment given (specified in wei)\",\"_sender\":\"The sender of the request\",\"_specId\":\"The Job Specification ID\"}}},\"title\":\"The Chainlink Mock Oracle contract\"},\"userdoc\":{\"methods\":{\"cancelOracleRequest(bytes32,uint256,bytes4,uint256)\":{\"notice\":\"Allows requesters to cancel requests sent to this oracle contract. Will transfer the LINK sent for the request back to the requester's address.\"},\"constructor\":\"Deploy with the address of the LINK token\",\"fulfillOracleRequest(bytes32,bytes32)\":{\"notice\":\"Called by the Chainlink node to fulfill requests\"},\"getChainlinkToken()\":{\"notice\":\"Returns the address of the LINK token\"},\"onTokenTransfer(address,uint256,bytes)\":{\"notice\":\"Called when LINK is sent to the contract via `transferAndCall`\"},\"oracleRequest(address,uint256,bytes32,address,bytes4,uint256,uint256,bytes)\":{\"notice\":\"Creates the Chainlink request\"}},\"notice\":\"Chainlink smart contract developers can use this to test their contracts\"}},\"settings\":{\"compilationTarget\":{\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/tests/MockOracle.sol\":\"MockOracle\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/LinkTokenReceiver.sol\":{\"keccak256\":\"0xcbde7153731a1cd229fbef4dcbb0b5a7a3ff4782bca40cbc12f836c39e054769\",\"urls\":[\"bzz-raw://83a7d0e4f1704c3b5474eb98342fbeee00782232d797f4446d7413463d17e58c\",\"dweb:/ipfs/QmTWtHy88hXLaX1K3EzuEN11F2aAT3G2QjL2WnDwPg7Mqa\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/interfaces/ChainlinkRequestInterface.sol\":{\"keccak256\":\"0xe513c0f60edf13da7d82625489cf2008c7b66170f3b1ed1606b84c73f95b17ad\",\"urls\":[\"bzz-raw://78e083ef252b80bb63a5aa126bc7283cd9b88767dfdf0190d46802bc32756ecf\",\"dweb:/ipfs/QmdTyEQwX5ecoXR1rBh8DLDJpCYVDM85JjjR2sEJdE9wAA\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/interfaces/LinkTokenInterface.sol\":{\"keccak256\":\"0xe245a7be950c94d87bb775ae9ee9fbd693fbe2987778e6ce0b04605ea44b7b68\",\"urls\":[\"bzz-raw://bd2c3165d949fc66fe407b96eb3dc2092c7e800f4c073b411bf7b96de3e156c9\",\"dweb:/ipfs/QmcfJhR1Np4GsLWnww2Duqks2wEzYk8VDTvCAYy7MisG1r\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/tests/MockOracle.sol\":{\"keccak256\":\"0xfc10b0f8b30f95bd64d1fd2e4787a8c63571f651c13bd8eaee6e1faf0735c5a6\",\"urls\":[\"bzz-raw://9f22194f08b9cd2ca072026f45f1ae67a61b06625389014596cd651c7a05a6e1\",\"dweb:/ipfs/QmddjLP1u3eeS7ac2CsdZVpdyyKdjnsL14GBSPFcAeHatP\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/vendor/SafeMathChainlink.sol\":{\"keccak256\":\"0x105f5e9491f3d0bbdd4f1c7627eb839d69b944bfd803028a01cc083597692c1f\",\"urls\":[\"bzz-raw://ec45a2748a024a947a921183d4102d5e206808588501d85ddc4f5668a009bc73\",\"dweb:/ipfs/QmRNAMpq7LdWFnJ7wWKGbUuAcURaGSS42PMxtQ4vjrHmp9\"]}},\"version\":1}",
"userdoc": {
"methods": {
"cancelOracleRequest(bytes32,uint256,bytes4,uint256)": {
"notice": "Allows requesters to cancel requests sent to this oracle contract. Will transfer the LINK sent for the request back to the requester's address."
},
"constructor": "Deploy with the address of the LINK token",
"fulfillOracleRequest(bytes32,bytes32)": {
"notice": "Called by the Chainlink node to fulfill requests"
},
"getChainlinkToken()": {
"notice": "Returns the address of the LINK token"
},
"onTokenTransfer(address,uint256,bytes)": {
"notice": "Called when LINK is sent to the contract via `transferAndCall`"
},
"oracleRequest(address,uint256,bytes32,address,bytes4,uint256,uint256,bytes)": {
"notice": "Creates the Chainlink request"
}
},
"notice": "Chainlink smart contract developers can use this to test their contracts"
}
},
"sources": {
"tests/MockOracle.sol": {
"id": 53
},
"LinkTokenReceiver.sol": {
"id": 10
},
"interfaces/ChainlinkRequestInterface.sol": {
"id": 33
},
"interfaces/LinkTokenInterface.sol": {
"id": 36
},
"vendor/SafeMathChainlink.sol": {
"id": 67
}
},
"sourceCodes": {
"tests/MockOracle.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\nimport \"../LinkTokenReceiver.sol\";\nimport \"../interfaces/ChainlinkRequestInterface.sol\";\nimport \"../interfaces/LinkTokenInterface.sol\";\nimport \"../vendor/SafeMathChainlink.sol\";\n\n/**\n * @title The Chainlink Mock Oracle contract\n * @notice Chainlink smart contract developers can use this to test their contracts\n */\ncontract MockOracle is ChainlinkRequestInterface, LinkTokenReceiver {\n using SafeMathChainlink for uint256;\n\n uint256 constant public EXPIRY_TIME = 5 minutes;\n uint256 constant private MINIMUM_CONSUMER_GAS_LIMIT = 400000;\n \n struct Request {\n address callbackAddr;\n bytes4 callbackFunctionId;\n }\n\n LinkTokenInterface internal LinkToken;\n mapping(bytes32 => Request) private commitments;\n\n event OracleRequest(\n bytes32 indexed specId,\n address requester,\n bytes32 requestId,\n uint256 payment,\n address callbackAddr,\n bytes4 callbackFunctionId,\n uint256 cancelExpiration,\n uint256 dataVersion,\n bytes data\n );\n\n event CancelOracleRequest(\n bytes32 indexed requestId\n );\n\n /**\n * @notice Deploy with the address of the LINK token\n * @dev Sets the LinkToken address for the imported LinkTokenInterface\n * @param _link The address of the LINK token\n */\n constructor(\n address _link\n )\n public\n {\n LinkToken = LinkTokenInterface(_link); // external but already deployed and unalterable\n }\n\n /**\n * @notice Creates the Chainlink request\n * @dev Stores the hash of the params as the on-chain commitment for the request.\n * Emits OracleRequest event for the Chainlink node to detect.\n * @param _sender The sender of the request\n * @param _payment The amount of payment given (specified in wei)\n * @param _specId The Job Specification ID\n * @param _callbackAddress The callback address for the response\n * @param _callbackFunctionId The callback function ID for the response\n * @param _nonce The nonce sent by the requester\n * @param _dataVersion The specified data version\n * @param _data The CBOR payload of the request\n */\n function oracleRequest(\n address _sender,\n uint256 _payment,\n bytes32 _specId,\n address _callbackAddress,\n bytes4 _callbackFunctionId,\n uint256 _nonce,\n uint256 _dataVersion,\n bytes calldata _data\n )\n external\n override\n onlyLINK()\n checkCallbackAddress(_callbackAddress)\n {\n bytes32 requestId = keccak256(abi.encodePacked(_sender, _nonce));\n require(commitments[requestId].callbackAddr == address(0), \"Must use a unique ID\");\n // solhint-disable-next-line not-rely-on-time\n uint256 expiration = now.add(EXPIRY_TIME);\n\n commitments[requestId] = Request(\n _callbackAddress,\n _callbackFunctionId\n );\n\n emit OracleRequest(\n _specId,\n _sender,\n requestId,\n _payment,\n _callbackAddress,\n _callbackFunctionId,\n expiration,\n _dataVersion,\n _data);\n }\n\n /**\n * @notice Called by the Chainlink node to fulfill requests\n * @dev Given params must hash back to the commitment stored from `oracleRequest`.\n * Will call the callback address' callback function without bubbling up error\n * checking in a `require` so that the node can get paid.\n * @param _requestId The fulfillment request ID that must match the requester's\n * @param _data The data to return to the consuming contract\n * @return Status if the external call was successful\n */\n function fulfillOracleRequest(\n bytes32 _requestId,\n bytes32 _data\n )\n external\n isValidRequest(_requestId)\n returns (\n bool\n )\n {\n Request memory req = commitments[_requestId];\n delete commitments[_requestId];\n require(gasleft() >= MINIMUM_CONSUMER_GAS_LIMIT, \"Must provide consumer enough gas\");\n // All updates to the oracle's fulfillment should come before calling the\n // callback(addr+functionId) as it is untrusted.\n // See: https://solidity.readthedocs.io/en/develop/security-considerations.html#use-the-checks-effects-interactions-pattern\n (bool success, ) = req.callbackAddr.call(abi.encodeWithSelector(req.callbackFunctionId, _requestId, _data)); // solhint-disable-line avoid-low-level-calls\n return success;\n }\n\n /**\n * @notice Allows requesters to cancel requests sent to this oracle contract. Will transfer the LINK\n * sent for the request back to the requester's address.\n * @dev Given params must hash to a commitment stored on the contract in order for the request to be valid\n * Emits CancelOracleRequest event.\n * @param _requestId The request ID\n * @param _payment The amount of payment given (specified in wei)\n * @param _expiration The time of the expiration for the request\n */\n function cancelOracleRequest(\n bytes32 _requestId,\n uint256 _payment,\n bytes4,\n uint256 _expiration\n )\n external\n override\n {\n require(commitments[_requestId].callbackAddr != address(0), \"Must use a unique ID\");\n // solhint-disable-next-line not-rely-on-time\n require(_expiration <= now, \"Request is not expired\");\n\n delete commitments[_requestId];\n emit CancelOracleRequest(_requestId);\n\n assert(LinkToken.transfer(msg.sender, _payment));\n }\n\n /**\n * @notice Returns the address of the LINK token\n * @dev This is the public implementation for chainlinkTokenAddress, which is\n * an internal method of the ChainlinkClient contract\n */\n function getChainlinkToken()\n public\n view\n override\n returns (\n address\n )\n {\n return address(LinkToken);\n }\n\n // MODIFIERS\n\n /**\n * @dev Reverts if request ID does not exist\n * @param _requestId The given request ID to check in stored `commitments`\n */\n modifier isValidRequest(\n bytes32 _requestId\n ) {\n require(commitments[_requestId].callbackAddr != address(0), \"Must have a valid requestId\");\n _;\n }\n\n\n /**\n * @dev Reverts if the callback address is the LINK token\n * @param _to The callback address\n */\n modifier checkCallbackAddress(\n address _to\n ) {\n require(_to != address(LinkToken), \"Cannot callback to LINK\");\n _;\n }\n\n}\n",
"LinkTokenReceiver.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\nabstract contract LinkTokenReceiver {\n\n bytes4 constant private ORACLE_REQUEST_SELECTOR = 0x40429946;\n uint256 constant private SELECTOR_LENGTH = 4;\n uint256 constant private EXPECTED_REQUEST_WORDS = 2;\n uint256 constant private MINIMUM_REQUEST_LENGTH = SELECTOR_LENGTH + (32 * EXPECTED_REQUEST_WORDS);\n /**\n * @notice Called when LINK is sent to the contract via `transferAndCall`\n * @dev The data payload's first 2 words will be overwritten by the `_sender` and `_amount`\n * values to ensure correctness. Calls oracleRequest.\n * @param _sender Address of the sender\n * @param _amount Amount of LINK sent (specified in wei)\n * @param _data Payload of the transaction\n */\n function onTokenTransfer(\n address _sender,\n uint256 _amount,\n bytes memory _data\n )\n public\n onlyLINK\n validRequestLength(_data)\n permittedFunctionsForLINK(_data)\n {\n assembly {\n // solhint-disable-next-line avoid-low-level-calls\n mstore(add(_data, 36), _sender) // ensure correct sender is passed\n // solhint-disable-next-line avoid-low-level-calls\n mstore(add(_data, 68), _amount) // ensure correct amount is passed\n }\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, ) = address(this).delegatecall(_data); // calls oracleRequest\n require(success, \"Unable to create request\");\n }\n\n function getChainlinkToken() public view virtual returns (address);\n\n /**\n * @dev Reverts if not sent from the LINK token\n */\n modifier onlyLINK() {\n require(msg.sender == getChainlinkToken(), \"Must use LINK token\");\n _;\n }\n\n /**\n * @dev Reverts if the given data does not begin with the `oracleRequest` function selector\n * @param _data The data payload of the request\n */\n modifier permittedFunctionsForLINK(bytes memory _data) {\n bytes4 funcSelector;\n assembly {\n // solhint-disable-next-line avoid-low-level-calls\n funcSelector := mload(add(_data, 32))\n }\n require(funcSelector == ORACLE_REQUEST_SELECTOR, \"Must use whitelisted functions\");\n _;\n }\n\n /**\n * @dev Reverts if the given payload is less than needed to create a request\n * @param _data The request payload\n */\n modifier validRequestLength(bytes memory _data) {\n require(_data.length >= MINIMUM_REQUEST_LENGTH, \"Invalid request length\");\n _;\n }\n}\n",
"interfaces/ChainlinkRequestInterface.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\ninterface ChainlinkRequestInterface {\n function oracleRequest(\n address sender,\n uint256 requestPrice,\n bytes32 serviceAgreementID,\n address callbackAddress,\n bytes4 callbackFunctionId,\n uint256 nonce,\n uint256 dataVersion,\n bytes calldata data\n ) external;\n\n function cancelOracleRequest(\n bytes32 requestId,\n uint256 payment,\n bytes4 callbackFunctionId,\n uint256 expiration\n ) external;\n}\n",
"interfaces/LinkTokenInterface.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\ninterface LinkTokenInterface {\n function allowance(address owner, address spender) external view returns (uint256 remaining);\n function approve(address spender, uint256 value) external returns (bool success);\n function balanceOf(address owner) external view returns (uint256 balance);\n function decimals() external view returns (uint8 decimalPlaces);\n function decreaseApproval(address spender, uint256 addedValue) external returns (bool success);\n function increaseApproval(address spender, uint256 subtractedValue) external;\n function name() external view returns (string memory tokenName);\n function symbol() external view returns (string memory tokenSymbol);\n function totalSupply() external view returns (uint256 totalTokensIssued);\n function transfer(address to, uint256 value) external returns (bool success);\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool success);\n function transferFrom(address from, address to, uint256 value) external returns (bool success);\n}\n",
"vendor/SafeMathChainlink.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathChainlink {\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n uint256 c = a - b;\n\n return c;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522\n if (a == 0) {\n return 0;\n }\n\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers. Reverts on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n // Solidity only automatically asserts when dividing by 0\n require(b > 0, \"SafeMath: division by zero\");\n uint256 c = a / b;\n // assert(a == b * c + a % b); // There is no case in which this doesn't hold\n\n return c;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * Reverts when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b != 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n}\n"
},
"sourceTreeHashHex": "0x44d68e5746f389f820fae3c7ab7e39359256ee01043b8bcdabe1b98040b38ac5",
"compiler": {
"name": "solc",
"version": "soljson-v0.6.6+commit.6c089d02.js",
"settings": {
"optimizer": {
"runs": 1000000,
"enabled": true
},
"outputSelection": {
"*": {
"*": [
"abi",
"devdoc",
"userdoc",
"evm.bytecode.object",
"evm.bytecode.sourceMap",
"evm.deployedBytecode.object",
"evm.deployedBytecode.sourceMap",
"evm.methodIdentifiers",
"metadata"
]
}
},
"metadata": {
"bytecodeHash": "none"
},
"remappings": []
}
},
"chains": {}
}
\ No newline at end of file
{
"schemaVersion": "2.0.0",
"contractName": "MockV2Aggregator",
"compilerOutput": {
"abi": [
{
"inputs": [
{
"internalType": "int256",
"name": "_initialAnswer",
"type": "int256"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "int256",
"name": "current",
"type": "int256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "roundId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "updatedAt",
"type": "uint256"
}
],
"name": "AnswerUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "roundId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "startedBy",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "startedAt",
"type": "uint256"
}
],
"name": "NewRound",
"type": "event"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "getAnswer",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "getTimestamp",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "latestAnswer",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "latestRound",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "latestTimestamp",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "int256",
"name": "_answer",
"type": "int256"
}
],
"name": "updateAnswer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_roundId",
"type": "uint256"
},
{
"internalType": "int256",
"name": "_answer",
"type": "int256"
},
{
"internalType": "uint256",
"name": "_timestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_startedAt",
"type": "uint256"
}
],
"name": "updateRoundData",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"methods": {},
"title": "MockV2Aggregator"
},
"evm": {
"bytecode": {
"linkReferences": {},
"object": "0x608060405234801561001057600080fd5b5060405161027b38038061027b8339818101604052602081101561003357600080fd5b5051610047816001600160e01b0361004d16565b50610082565b600081815542600181815560028054909101808255835260036020908152604080852095909555905483526004905291902055565b6101ea806100916000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80639ab29f451161005b5780639ab29f45146100ac578063a87a20ce146100dd578063b5ab58dc146100fa578063b633620c146101175761007d565b806350d25bcd14610082578063668a0f021461009c5780638205bf6a146100a4575b600080fd5b61008a610134565b60408051918252519081900360200190f35b61008a61013a565b61008a610140565b6100db600480360360808110156100c257600080fd5b5080359060208101359060408101359060600135610146565b005b6100db600480360360208110156100f357600080fd5b5035610184565b61008a6004803603602081101561011057600080fd5b50356101b9565b61008a6004803603602081101561012d57600080fd5b50356101cb565b60005481565b60025481565b60015481565b600284815560008481556001849055948552600360209081526040808720959095558154865260048152848620939093555484526005909152912055565b600081815542600181815560028054909101808255835260036020908152604080852095909555905483526004905291902055565b60036020526000908152604090205481565b6004602052600090815260409020548156fea164736f6c6343000606000a",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x27B CODESIZE SUB DUP1 PUSH2 0x27B DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x47 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH2 0x4D AND JUMP JUMPDEST POP PUSH2 0x82 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 SSTORE TIMESTAMP PUSH1 0x1 DUP2 DUP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP1 SWAP2 ADD DUP1 DUP3 SSTORE DUP4 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP6 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP1 SLOAD DUP4 MSTORE PUSH1 0x4 SWAP1 MSTORE SWAP2 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH2 0x1EA DUP1 PUSH2 0x91 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9AB29F45 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x9AB29F45 EQ PUSH2 0xAC JUMPI DUP1 PUSH4 0xA87A20CE EQ PUSH2 0xDD JUMPI DUP1 PUSH4 0xB5AB58DC EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0xB633620C EQ PUSH2 0x117 JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x50D25BCD EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x668A0F02 EQ PUSH2 0x9C JUMPI DUP1 PUSH4 0x8205BF6A EQ PUSH2 0xA4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0x134 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x8A PUSH2 0x13A JUMP JUMPDEST PUSH2 0x8A PUSH2 0x140 JUMP JUMPDEST PUSH2 0xDB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0xC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x146 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xDB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x184 JUMP JUMPDEST PUSH2 0x8A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x110 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1B9 JUMP JUMPDEST PUSH2 0x8A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1CB JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 DUP5 DUP2 SSTORE PUSH1 0x0 DUP5 DUP2 SSTORE PUSH1 0x1 DUP5 SWAP1 SSTORE SWAP5 DUP6 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP8 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE DUP2 SLOAD DUP7 MSTORE PUSH1 0x4 DUP2 MSTORE DUP5 DUP7 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SLOAD DUP5 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE SWAP2 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 SSTORE TIMESTAMP PUSH1 0x1 DUP2 DUP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP1 SWAP2 ADD DUP1 DUP3 SSTORE DUP4 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP6 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP1 SLOAD DUP4 MSTORE PUSH1 0x4 SWAP1 MSTORE SWAP2 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP MOD MOD STOP EXP ",
"sourceMap": "373:1021:54:-:0;;;717:89;5:9:-1;2:2;;;27:1;24;17:12;2:2;717:89:54;;;;;;;;;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;717:89:54;773:28;717:89;-1:-1:-1;;;;;773:12:54;:28;:::i;:::-;717:89;373:1021;;810:231;869:12;:22;;;915:15;897;:33;;;936:11;:13;;;;;;;;955:22;;:9;:22;;;;;;;;:32;;;;1006:11;;993:25;;:12;:25;;;;;:43;810:231::o;373:1021::-;;;;;;;"
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80639ab29f451161005b5780639ab29f45146100ac578063a87a20ce146100dd578063b5ab58dc146100fa578063b633620c146101175761007d565b806350d25bcd14610082578063668a0f021461009c5780638205bf6a146100a4575b600080fd5b61008a610134565b60408051918252519081900360200190f35b61008a61013a565b61008a610140565b6100db600480360360808110156100c257600080fd5b5080359060208101359060408101359060600135610146565b005b6100db600480360360208110156100f357600080fd5b5035610184565b61008a6004803603602081101561011057600080fd5b50356101b9565b61008a6004803603602081101561012d57600080fd5b50356101cb565b60005481565b60025481565b60015481565b600284815560008481556001849055948552600360209081526040808720959095558154865260048152848620939093555484526005909152912055565b600081815542600181815560028054909101808255835260036020908152604080852095909555905483526004905291902055565b60036020526000908152604090205481565b6004602052600090815260409020548156fea164736f6c6343000606000a",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9AB29F45 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x9AB29F45 EQ PUSH2 0xAC JUMPI DUP1 PUSH4 0xA87A20CE EQ PUSH2 0xDD JUMPI DUP1 PUSH4 0xB5AB58DC EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0xB633620C EQ PUSH2 0x117 JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x50D25BCD EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x668A0F02 EQ PUSH2 0x9C JUMPI DUP1 PUSH4 0x8205BF6A EQ PUSH2 0xA4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0x134 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x8A PUSH2 0x13A JUMP JUMPDEST PUSH2 0x8A PUSH2 0x140 JUMP JUMPDEST PUSH2 0xDB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0xC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x146 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xDB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x184 JUMP JUMPDEST PUSH2 0x8A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x110 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1B9 JUMP JUMPDEST PUSH2 0x8A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1CB JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 DUP5 DUP2 SSTORE PUSH1 0x0 DUP5 DUP2 SSTORE PUSH1 0x1 DUP5 SWAP1 SSTORE SWAP5 DUP6 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP8 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE DUP2 SLOAD DUP7 MSTORE PUSH1 0x4 DUP2 MSTORE DUP5 DUP7 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SLOAD DUP5 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE SWAP2 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 SSTORE TIMESTAMP PUSH1 0x1 DUP2 DUP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP1 SWAP2 ADD DUP1 DUP3 SSTORE DUP4 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP6 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP1 SLOAD DUP4 MSTORE PUSH1 0x4 SWAP1 MSTORE SWAP2 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP MOD MOD STOP EXP ",
"sourceMap": "373:1021:54:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;373:1021:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;426:35:54;;;:::i;:::-;;;;;;;;;;;;;;;;508;;;:::i;465:39::-;;;:::i;1045:347::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;1045:347:54;;;;;;;;;;;;;;;;;:::i;:::-;;810:231;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;810:231:54;;:::i;548:52::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;548:52:54;;:::i;604:56::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;604:56:54;;:::i;426:35::-;;;;:::o;508:::-;;;;:::o;465:39::-;;;;:::o;1045:347::-;1177:11;:22;;;1205:12;:22;;;1233:15;:28;;;1267:22;;;:9;:22;;;;;;;;:32;;;;1318:11;;1305:25;;:12;:25;;;;;:38;;;;1362:11;1349:25;;:12;:25;;;;;:38;1045:347::o;810:231::-;869:12;:22;;;915:15;897;:33;;;936:11;:13;;;;;;;;955:22;;:9;:22;;;;;;;;:32;;;;1006:11;;993:25;;:12;:25;;;;;:43;810:231::o;548:52::-;;;;;;;;;;;;;:::o;604:56::-;;;;;;;;;;;;;:::o"
},
"methodIdentifiers": {
"getAnswer(uint256)": "b5ab58dc",
"getTimestamp(uint256)": "b633620c",
"latestAnswer()": "50d25bcd",
"latestRound()": "668a0f02",
"latestTimestamp()": "8205bf6a",
"updateAnswer(int256)": "a87a20ce",
"updateRoundData(uint256,int256,uint256,uint256)": "9ab29f45"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.6.6+commit.6c089d02\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"_initialAnswer\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"int256\",\"name\":\"current\",\"type\":\"int256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"}],\"name\":\"AnswerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"startedBy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"}],\"name\":\"NewRound\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getAnswer\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestAnswer\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"_answer\",\"type\":\"int256\"}],\"name\":\"updateAnswer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_roundId\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"_answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startedAt\",\"type\":\"uint256\"}],\"name\":\"updateRoundData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{},\"title\":\"MockV2Aggregator\"},\"userdoc\":{\"methods\":{},\"notice\":\"Based on the HistoricAggregator contractUse this contract when you need to test other contract's ability to read data from an aggregator contract, but how the aggregator got its answer is unimportant\"}},\"settings\":{\"compilationTarget\":{\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/tests/MockV2Aggregator.sol\":\"MockV2Aggregator\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/interfaces/AggregatorInterface.sol\":{\"keccak256\":\"0xbd2b9524ed06f150fefaf4ea600fa8b426d644f17c9f7ddd6d793c19557c23ca\",\"urls\":[\"bzz-raw://32e224693884f94929ab3128a1f780c517c8c294634f7f0ef56b411131fa9858\",\"dweb:/ipfs/QmYC99ZwJoPRSmBGV69uwQwdotVcGYC2AMUjLnS48PYiXq\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/tests/MockV2Aggregator.sol\":{\"keccak256\":\"0x36923274b53280eaf631df1ded24d01f450a3486bf110ea300831885929bf5f7\",\"urls\":[\"bzz-raw://f8508e1613eccd4bf21b817d7c7765dd90d08f28b62cf210e55ee8bb12156810\",\"dweb:/ipfs/QmXqUD7dgiLrMDatMuXTjXQrs786MAgByth1MAYtfWn387\"]}},\"version\":1}",
"userdoc": {
"methods": {},
"notice": "Based on the HistoricAggregator contractUse this contract when you need to test other contract's ability to read data from an aggregator contract, but how the aggregator got its answer is unimportant"
}
},
"sources": {
"tests/MockV2Aggregator.sol": {
"id": 54
},
"interfaces/AggregatorInterface.sol": {
"id": 28
}
},
"sourceCodes": {
"tests/MockV2Aggregator.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\nimport \"../interfaces/AggregatorInterface.sol\";\n\n/**\n * @title MockV2Aggregator\n * @notice Based on the HistoricAggregator contract\n * @notice Use this contract when you need to test\n * other contract's ability to read data from an\n * aggregator contract, but how the aggregator got\n * its answer is unimportant\n */\ncontract MockV2Aggregator is AggregatorInterface {\n int256 public override latestAnswer;\n uint256 public override latestTimestamp;\n uint256 public override latestRound;\n\n mapping(uint256 => int256) public override getAnswer;\n mapping(uint256 => uint256) public override getTimestamp;\n mapping(uint256 => uint256) private getStartedAt;\n\n constructor(\n int256 _initialAnswer\n ) public {\n updateAnswer(_initialAnswer);\n }\n\n function updateAnswer(\n int256 _answer\n ) public {\n latestAnswer = _answer;\n latestTimestamp = block.timestamp;\n latestRound++;\n getAnswer[latestRound] = _answer;\n getTimestamp[latestRound] = block.timestamp;\n }\n\n function updateRoundData(\n uint256 _roundId,\n int256 _answer,\n uint256 _timestamp,\n uint256 _startedAt\n ) public {\n latestRound = _roundId;\n latestAnswer = _answer;\n latestTimestamp = _timestamp;\n getAnswer[latestRound] = _answer;\n getTimestamp[latestRound] = _timestamp;\n getStartedAt[latestRound] = _startedAt;\n }\n}\n",
"interfaces/AggregatorInterface.sol": "// SPDX-License-Identifier: MIT\npragma solidity >=0.6.0;\n\ninterface AggregatorInterface {\n function latestAnswer() external view returns (int256);\n function latestTimestamp() external view returns (uint256);\n function latestRound() external view returns (uint256);\n function getAnswer(uint256 roundId) external view returns (int256);\n function getTimestamp(uint256 roundId) external view returns (uint256);\n\n event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);\n event NewRound(uint256 indexed roundId, address indexed startedBy, uint256 startedAt);\n}\n"
},
"sourceTreeHashHex": "0x83a63a9a5c963fbb566925c8aa3e6fca136bdc1d477f19d6e461a86b0ed39bf5",
"compiler": {
"name": "solc",
"version": "soljson-v0.6.6+commit.6c089d02.js",
"settings": {
"optimizer": {
"runs": 1000000,
"enabled": true
},
"outputSelection": {
"*": {
"*": [
"abi",
"devdoc",
"userdoc",
"evm.bytecode.object",
"evm.bytecode.sourceMap",
"evm.deployedBytecode.object",
"evm.deployedBytecode.sourceMap",
"evm.methodIdentifiers",
"metadata"
]
}
},
"metadata": {
"bytecodeHash": "none"
},
"remappings": []
}
},
"chains": {}
}
\ No newline at end of file
{
"schemaVersion": "2.0.0",
"contractName": "MockV3Aggregator",
"compilerOutput": {
"abi": [
{
"inputs": [
{
"internalType": "uint8",
"name": "_decimals",
"type": "uint8"
},
{
"internalType": "int256",
"name": "_initialAnswer",
"type": "int256"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "int256",
"name": "current",
"type": "int256"
},
{
"indexed": true,
"internalType": "uint256",
"name": "roundId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "updatedAt",
"type": "uint256"
}
],
"name": "AnswerUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "roundId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "startedBy",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "startedAt",
"type": "uint256"
}
],
"name": "NewRound",
"type": "event"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "description",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "getAnswer",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint80",
"name": "_roundId",
"type": "uint80"
}
],
"name": "getRoundData",
"outputs": [
{
"internalType": "uint80",
"name": "roundId",
"type": "uint80"
},
{
"internalType": "int256",
"name": "answer",
"type": "int256"
},
{
"internalType": "uint256",
"name": "startedAt",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "updatedAt",
"type": "uint256"
},
{
"internalType": "uint80",
"name": "answeredInRound",
"type": "uint80"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "getTimestamp",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "latestAnswer",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "latestRound",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "latestRoundData",
"outputs": [
{
"internalType": "uint80",
"name": "roundId",
"type": "uint80"
},
{
"internalType": "int256",
"name": "answer",
"type": "int256"
},
{
"internalType": "uint256",
"name": "startedAt",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "updatedAt",
"type": "uint256"
},
{
"internalType": "uint80",
"name": "answeredInRound",
"type": "uint80"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "latestTimestamp",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "int256",
"name": "_answer",
"type": "int256"
}
],
"name": "updateAnswer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint80",
"name": "_roundId",
"type": "uint80"
},
{
"internalType": "int256",
"name": "_answer",
"type": "int256"
},
{
"internalType": "uint256",
"name": "_timestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_startedAt",
"type": "uint256"
}
],
"name": "updateRoundData",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "version",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"methods": {},
"title": "MockV3Aggregator"
},
"evm": {
"bytecode": {
"linkReferences": {},
"object": "0x608060405234801561001057600080fd5b506040516104dd3803806104dd8339818101604052604081101561003357600080fd5b5080516020909101516000805460ff191660ff84161790556100548161005b565b50506100a2565b600181815542600281905560038054909201808355600090815260046020908152604080832095909555835482526005815284822083905592548152600690925291902055565b61042c806100b16000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80638205bf6a11610081578063b5ab58dc1161005b578063b5ab58dc14610268578063b633620c14610285578063feaf968c146102a2576100d4565b80638205bf6a146101db5780639a6fc8f5146101e3578063a87a20ce1461024b576100d4565b806354fd4d50116100b257806354fd4d501461014e578063668a0f02146101565780637284e4161461015e576100d4565b8063313ce567146100d95780634aa2011f146100f757806350d25bcd14610134575b600080fd5b6100e16102aa565b6040805160ff9092168252519081900360200190f35b6101326004803603608081101561010d57600080fd5b5069ffffffffffffffffffff81351690602081013590604081013590606001356102b3565b005b61013c610300565b60408051918252519081900360200190f35b61013c610306565b61013c61030b565b610166610311565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101a0578181015183820152602001610188565b50505050905090810190601f1680156101cd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61013c610348565b61020c600480360360208110156101f957600080fd5b503569ffffffffffffffffffff1661034e565b6040805169ffffffffffffffffffff96871681526020810195909552848101939093526060840191909152909216608082015290519081900360a00190f35b6101326004803603602081101561026157600080fd5b5035610387565b61013c6004803603602081101561027e57600080fd5b50356103ce565b61013c6004803603602081101561029b57600080fd5b50356103e0565b61020c6103f2565b60005460ff1681565b69ffffffffffffffffffff90931660038181556001849055600283905560009182526004602090815260408084209590955581548352600581528483209390935554815260069091522055565b60015481565b600081565b60035481565b60408051808201909152601f81527f76302e362f74657374732f4d6f636b563341676772656761746f722e736f6c00602082015290565b60025481565b69ffffffffffffffffffff8116600090815260046020908152604080832054600683528184205460059093529220549293919290918490565b600181815542600281905560038054909201808355600090815260046020908152604080832095909555835482526005815284822083905592548152600690925291902055565b60046020526000908152604090205481565b60056020526000908152604090205481565b6003546000818152600460209081526040808320546006835281842054600590935292205483909192939456fea164736f6c6343000606000a",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x4DD CODESIZE SUB DUP1 PUSH2 0x4DD DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF DUP5 AND OR SWAP1 SSTORE PUSH2 0x54 DUP2 PUSH2 0x5B JUMP JUMPDEST POP POP PUSH2 0xA2 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SSTORE TIMESTAMP PUSH1 0x2 DUP2 SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP1 SWAP3 ADD DUP1 DUP4 SSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE DUP4 SLOAD DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE DUP5 DUP3 KECCAK256 DUP4 SWAP1 SSTORE SWAP3 SLOAD DUP2 MSTORE PUSH1 0x6 SWAP1 SWAP3 MSTORE SWAP2 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH2 0x42C DUP1 PUSH2 0xB1 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xD4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8205BF6A GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xB5AB58DC GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xB5AB58DC EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0xB633620C EQ PUSH2 0x285 JUMPI DUP1 PUSH4 0xFEAF968C EQ PUSH2 0x2A2 JUMPI PUSH2 0xD4 JUMP JUMPDEST DUP1 PUSH4 0x8205BF6A EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0x9A6FC8F5 EQ PUSH2 0x1E3 JUMPI DUP1 PUSH4 0xA87A20CE EQ PUSH2 0x24B JUMPI PUSH2 0xD4 JUMP JUMPDEST DUP1 PUSH4 0x54FD4D50 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x14E JUMPI DUP1 PUSH4 0x668A0F02 EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x7284E416 EQ PUSH2 0x15E JUMPI PUSH2 0xD4 JUMP JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0xD9 JUMPI DUP1 PUSH4 0x4AA2011F EQ PUSH2 0xF7 JUMPI DUP1 PUSH4 0x50D25BCD EQ PUSH2 0x134 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE1 PUSH2 0x2AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x132 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x10D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x2B3 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x13C PUSH2 0x300 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x13C PUSH2 0x306 JUMP JUMPDEST PUSH2 0x13C PUSH2 0x30B JUMP JUMPDEST PUSH2 0x166 PUSH2 0x311 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1A0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x188 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1CD JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x13C PUSH2 0x348 JUMP JUMPDEST PUSH2 0x20C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x34E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE DUP5 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x60 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP3 AND PUSH1 0x80 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 RETURN JUMPDEST PUSH2 0x132 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x261 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x387 JUMP JUMPDEST PUSH2 0x13C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x27E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3CE JUMP JUMPDEST PUSH2 0x13C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x29B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3E0 JUMP JUMPDEST PUSH2 0x20C PUSH2 0x3F2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH10 0xFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND PUSH1 0x3 DUP2 DUP2 SSTORE PUSH1 0x1 DUP5 SWAP1 SSTORE PUSH1 0x2 DUP4 SWAP1 SSTORE PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE DUP2 SLOAD DUP4 MSTORE PUSH1 0x5 DUP2 MSTORE DUP5 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SLOAD DUP2 MSTORE PUSH1 0x6 SWAP1 SWAP2 MSTORE KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1F DUP2 MSTORE PUSH32 0x76302E362F74657374732F4D6F636B563341676772656761746F722E736F6C00 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x6 DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0x5 SWAP1 SWAP4 MSTORE SWAP3 KECCAK256 SLOAD SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 DUP5 SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SSTORE TIMESTAMP PUSH1 0x2 DUP2 SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP1 SWAP3 ADD DUP1 DUP4 SSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE DUP4 SLOAD DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE DUP5 DUP3 KECCAK256 DUP4 SWAP1 SSTORE SWAP3 SLOAD DUP2 MSTORE PUSH1 0x6 SWAP1 SWAP3 MSTORE SWAP2 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x6 DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0x5 SWAP1 SWAP4 MSTORE SWAP3 KECCAK256 SLOAD DUP4 SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP MOD MOD STOP EXP ",
"sourceMap": "373:2095:55:-:0;;;804:136;5:9:-1;2:2;;;27:1;24;17:12;2:2;804:136:55;;;;;;;;;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;804:136:55;;;;;;;881:8;:20;;-1:-1:-1;;881:20:55;;;;;;;907:28;804:136;907:12;:28::i;:::-;804:136;;373:2095;;944:280;1003:12;:22;;;1049:15;1031;:33;;;1070:11;:13;;;;;;;;-1:-1:-1;1089:22:55;;;:9;:22;;;;;;;;:32;;;;1140:11;;1127:25;;:12;:25;;;;;:43;;;1189:11;;1176:25;;:12;:25;;;;;;:43;944:280::o;373:2095::-;;;;;;;"
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c80638205bf6a11610081578063b5ab58dc1161005b578063b5ab58dc14610268578063b633620c14610285578063feaf968c146102a2576100d4565b80638205bf6a146101db5780639a6fc8f5146101e3578063a87a20ce1461024b576100d4565b806354fd4d50116100b257806354fd4d501461014e578063668a0f02146101565780637284e4161461015e576100d4565b8063313ce567146100d95780634aa2011f146100f757806350d25bcd14610134575b600080fd5b6100e16102aa565b6040805160ff9092168252519081900360200190f35b6101326004803603608081101561010d57600080fd5b5069ffffffffffffffffffff81351690602081013590604081013590606001356102b3565b005b61013c610300565b60408051918252519081900360200190f35b61013c610306565b61013c61030b565b610166610311565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101a0578181015183820152602001610188565b50505050905090810190601f1680156101cd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61013c610348565b61020c600480360360208110156101f957600080fd5b503569ffffffffffffffffffff1661034e565b6040805169ffffffffffffffffffff96871681526020810195909552848101939093526060840191909152909216608082015290519081900360a00190f35b6101326004803603602081101561026157600080fd5b5035610387565b61013c6004803603602081101561027e57600080fd5b50356103ce565b61013c6004803603602081101561029b57600080fd5b50356103e0565b61020c6103f2565b60005460ff1681565b69ffffffffffffffffffff90931660038181556001849055600283905560009182526004602090815260408084209590955581548352600581528483209390935554815260069091522055565b60015481565b600081565b60035481565b60408051808201909152601f81527f76302e362f74657374732f4d6f636b563341676772656761746f722e736f6c00602082015290565b60025481565b69ffffffffffffffffffff8116600090815260046020908152604080832054600683528184205460059093529220549293919290918490565b600181815542600281905560038054909201808355600090815260046020908152604080832095909555835482526005815284822083905592548152600690925291902055565b60046020526000908152604090205481565b60056020526000908152604090205481565b6003546000818152600460209081526040808320546006835281842054600590935292205483909192939456fea164736f6c6343000606000a",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xD4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8205BF6A GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xB5AB58DC GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xB5AB58DC EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0xB633620C EQ PUSH2 0x285 JUMPI DUP1 PUSH4 0xFEAF968C EQ PUSH2 0x2A2 JUMPI PUSH2 0xD4 JUMP JUMPDEST DUP1 PUSH4 0x8205BF6A EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0x9A6FC8F5 EQ PUSH2 0x1E3 JUMPI DUP1 PUSH4 0xA87A20CE EQ PUSH2 0x24B JUMPI PUSH2 0xD4 JUMP JUMPDEST DUP1 PUSH4 0x54FD4D50 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x14E JUMPI DUP1 PUSH4 0x668A0F02 EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x7284E416 EQ PUSH2 0x15E JUMPI PUSH2 0xD4 JUMP JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0xD9 JUMPI DUP1 PUSH4 0x4AA2011F EQ PUSH2 0xF7 JUMPI DUP1 PUSH4 0x50D25BCD EQ PUSH2 0x134 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE1 PUSH2 0x2AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x132 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x10D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x2B3 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x13C PUSH2 0x300 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x13C PUSH2 0x306 JUMP JUMPDEST PUSH2 0x13C PUSH2 0x30B JUMP JUMPDEST PUSH2 0x166 PUSH2 0x311 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1A0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x188 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1CD JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x13C PUSH2 0x348 JUMP JUMPDEST PUSH2 0x20C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x34E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE DUP5 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x60 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP3 AND PUSH1 0x80 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 RETURN JUMPDEST PUSH2 0x132 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x261 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x387 JUMP JUMPDEST PUSH2 0x13C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x27E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3CE JUMP JUMPDEST PUSH2 0x13C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x29B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3E0 JUMP JUMPDEST PUSH2 0x20C PUSH2 0x3F2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH10 0xFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND PUSH1 0x3 DUP2 DUP2 SSTORE PUSH1 0x1 DUP5 SWAP1 SSTORE PUSH1 0x2 DUP4 SWAP1 SSTORE PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE DUP2 SLOAD DUP4 MSTORE PUSH1 0x5 DUP2 MSTORE DUP5 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SLOAD DUP2 MSTORE PUSH1 0x6 SWAP1 SWAP2 MSTORE KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1F DUP2 MSTORE PUSH32 0x76302E362F74657374732F4D6F636B563341676772656761746F722E736F6C00 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x6 DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0x5 SWAP1 SWAP4 MSTORE SWAP3 KECCAK256 SLOAD SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 DUP5 SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SSTORE TIMESTAMP PUSH1 0x2 DUP2 SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP1 SWAP3 ADD DUP1 DUP4 SSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE DUP4 SLOAD DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE DUP5 DUP3 KECCAK256 DUP4 SWAP1 SSTORE SWAP3 SLOAD DUP2 MSTORE PUSH1 0x6 SWAP1 SWAP3 MSTORE SWAP2 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x6 DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0x5 SWAP1 SWAP4 MSTORE SWAP3 KECCAK256 SLOAD DUP4 SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP MOD MOD STOP EXP ",
"sourceMap": "373:2095:55:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;373:2095:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;479:30:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1228:346;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;1228:346:55;;;;;;;;;;;;;;;;;;;:::i;:::-;;513:35;;;:::i;:::-;;;;;;;;;;;;;;;;430:44;;;:::i;595:35::-;;;:::i;2327:139::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2327:139:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;552:39;;;:::i;1578:361::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1578:361:55;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;944:280;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;944:280:55;;:::i;635:52::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;635:52:55;;:::i;691:56::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;691:56:55;;:::i;1943:380::-;;;:::i;479:30::-;;;;;;:::o;1228:346::-;1359:22;;;;:11;:22;;;1387:12;:22;;;-1:-1:-1;1415:28:55;;;-1:-1:-1;1449:22:55;;;:9;:22;;;;;;;;:32;;;;1500:11;;1487:25;;:12;:25;;;;;:38;;;;1544:11;1531:25;;:12;:25;;;;:38;1228:346::o;513:35::-;;;;:::o;430:44::-;473:1;430:44;:::o;595:35::-;;;;:::o;2327:139::-;2421:40;;;;;;;;;;;;;;;;;2327:139;:::o;552:39::-;;;;:::o;1578:361::-;1833:19;;;1672:14;1833:19;;;:9;:19;;;;;;;;;1860:12;:22;;;;;;1890:12;:22;;;;;;1833:19;;;;1860:22;;1833:19;;1578:361::o;944:280::-;1003:12;:22;;;1049:15;1031;:33;;;1070:11;:13;;;;;;;;-1:-1:-1;1089:22:55;;;:9;:22;;;;;;;;:32;;;;1140:11;;1127:25;;:12;:25;;;;;:43;;;1189:11;;1176:25;;:12;:25;;;;;;:43;944:280::o;635:52::-;;;;;;;;;;;;;:::o;691:56::-;;;;;;;;;;;;;:::o;1943:380::-;2177:11;;2025:14;2197:22;;;:9;:22;;;;;;;;;2227:12;:25;;;;;;2260:12;:25;;;;;;2177:11;1943:380;;;;;:::o"
},
"methodIdentifiers": {
"decimals()": "313ce567",
"description()": "7284e416",
"getAnswer(uint256)": "b5ab58dc",
"getRoundData(uint80)": "9a6fc8f5",
"getTimestamp(uint256)": "b633620c",
"latestAnswer()": "50d25bcd",
"latestRound()": "668a0f02",
"latestRoundData()": "feaf968c",
"latestTimestamp()": "8205bf6a",
"updateAnswer(int256)": "a87a20ce",
"updateRoundData(uint80,int256,uint256,uint256)": "4aa2011f",
"version()": "54fd4d50"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.6.6+commit.6c089d02\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_decimals\",\"type\":\"uint8\"},{\"internalType\":\"int256\",\"name\":\"_initialAnswer\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"int256\",\"name\":\"current\",\"type\":\"int256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"}],\"name\":\"AnswerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"startedBy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"}],\"name\":\"NewRound\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"description\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getAnswer\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"}],\"name\":\"getRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestAnswer\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"_answer\",\"type\":\"int256\"}],\"name\":\"updateAnswer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"_answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startedAt\",\"type\":\"uint256\"}],\"name\":\"updateRoundData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{},\"title\":\"MockV3Aggregator\"},\"userdoc\":{\"methods\":{},\"notice\":\"Based on the FluxAggregator contractUse this contract when you need to test other contract's ability to read data from an aggregator contract, but how the aggregator got its answer is unimportant\"}},\"settings\":{\"compilationTarget\":{\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/tests/MockV3Aggregator.sol\":\"MockV3Aggregator\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/interfaces/AggregatorInterface.sol\":{\"keccak256\":\"0xbd2b9524ed06f150fefaf4ea600fa8b426d644f17c9f7ddd6d793c19557c23ca\",\"urls\":[\"bzz-raw://32e224693884f94929ab3128a1f780c517c8c294634f7f0ef56b411131fa9858\",\"dweb:/ipfs/QmYC99ZwJoPRSmBGV69uwQwdotVcGYC2AMUjLnS48PYiXq\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/interfaces/AggregatorV2V3Interface.sol\":{\"keccak256\":\"0xb2e32f1292bd9c3bc2f4823ae6457bb81a6497138a9bf454c46dae73553097d4\",\"urls\":[\"bzz-raw://7c43cffc680e119f38fa16950d57c29705f6351522fa0a2f3ac20cc0bfa5416c\",\"dweb:/ipfs/QmZtPBiuFkZfoCSx2M98HHbmCSY12VFHKZdtwFN1K1R5qD\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/interfaces/AggregatorV3Interface.sol\":{\"keccak256\":\"0x1862840d741dedb36e774534b877a13b5187555e3b78b8d2815f898b0dc02268\",\"urls\":[\"bzz-raw://64a15f4349aea6e60703f581a6280b71d6adb35ee74d2f3c4f130a2adc3efee3\",\"dweb:/ipfs/QmdVoSQvGfJNPnjQsAs7ZN3ueWghzTa72jSqzhGiQNDpkL\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/tests/MockV3Aggregator.sol\":{\"keccak256\":\"0x4cc3414cc680d73629043e68ddd298ef79a32775de0d6753b475e97567a28919\",\"urls\":[\"bzz-raw://22e76b1bb0e786a0db542f451092486562876c75d2b7ef897aada76940e65cef\",\"dweb:/ipfs/QmPEspBKftJtA1e3Z3KTrrrLeXS6obCdksE9RWMMoqvweS\"]}},\"version\":1}",
"userdoc": {
"methods": {},
"notice": "Based on the FluxAggregator contractUse this contract when you need to test other contract's ability to read data from an aggregator contract, but how the aggregator got its answer is unimportant"
}
},
"sources": {
"tests/MockV3Aggregator.sol": {
"id": 55
},
"interfaces/AggregatorV2V3Interface.sol": {
"id": 29
},
"interfaces/AggregatorInterface.sol": {
"id": 28
},
"interfaces/AggregatorV3Interface.sol": {
"id": 30
}
},
"sourceCodes": {
"tests/MockV3Aggregator.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\nimport \"../interfaces/AggregatorV2V3Interface.sol\";\n\n/**\n * @title MockV3Aggregator\n * @notice Based on the FluxAggregator contract\n * @notice Use this contract when you need to test\n * other contract's ability to read data from an\n * aggregator contract, but how the aggregator got\n * its answer is unimportant\n */\ncontract MockV3Aggregator is AggregatorV2V3Interface {\n uint256 constant public override version = 0;\n\n uint8 public override decimals;\n int256 public override latestAnswer;\n uint256 public override latestTimestamp;\n uint256 public override latestRound;\n\n mapping(uint256 => int256) public override getAnswer;\n mapping(uint256 => uint256) public override getTimestamp;\n mapping(uint256 => uint256) private getStartedAt;\n\n constructor(\n uint8 _decimals,\n int256 _initialAnswer\n ) public {\n decimals = _decimals;\n updateAnswer(_initialAnswer);\n }\n\n function updateAnswer(\n int256 _answer\n ) public {\n latestAnswer = _answer;\n latestTimestamp = block.timestamp;\n latestRound++;\n getAnswer[latestRound] = _answer;\n getTimestamp[latestRound] = block.timestamp;\n getStartedAt[latestRound] = block.timestamp;\n }\n\n function updateRoundData(\n uint80 _roundId,\n int256 _answer,\n uint256 _timestamp,\n uint256 _startedAt\n ) public {\n latestRound = _roundId;\n latestAnswer = _answer;\n latestTimestamp = _timestamp;\n getAnswer[latestRound] = _answer;\n getTimestamp[latestRound] = _timestamp;\n getStartedAt[latestRound] = _startedAt;\n }\n\n function getRoundData(uint80 _roundId)\n external\n view\n override\n returns (\n uint80 roundId,\n int256 answer,\n uint256 startedAt,\n uint256 updatedAt,\n uint80 answeredInRound\n )\n {\n return (\n _roundId,\n getAnswer[_roundId],\n getStartedAt[_roundId],\n getTimestamp[_roundId],\n _roundId\n );\n }\n\n function latestRoundData()\n external\n view\n override\n returns (\n uint80 roundId,\n int256 answer,\n uint256 startedAt,\n uint256 updatedAt,\n uint80 answeredInRound\n )\n {\n return (\n uint80(latestRound),\n getAnswer[latestRound],\n getStartedAt[latestRound],\n getTimestamp[latestRound],\n uint80(latestRound)\n );\n }\n\n function description()\n external\n view\n override\n returns (string memory)\n {\n return \"v0.6/tests/MockV3Aggregator.sol\";\n }\n}\n",
"interfaces/AggregatorV2V3Interface.sol": "// SPDX-License-Identifier: MIT\npragma solidity >=0.6.0;\n\nimport \"./AggregatorInterface.sol\";\nimport \"./AggregatorV3Interface.sol\";\n\ninterface AggregatorV2V3Interface is AggregatorInterface, AggregatorV3Interface\n{\n}\n",
"interfaces/AggregatorInterface.sol": "// SPDX-License-Identifier: MIT\npragma solidity >=0.6.0;\n\ninterface AggregatorInterface {\n function latestAnswer() external view returns (int256);\n function latestTimestamp() external view returns (uint256);\n function latestRound() external view returns (uint256);\n function getAnswer(uint256 roundId) external view returns (int256);\n function getTimestamp(uint256 roundId) external view returns (uint256);\n\n event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);\n event NewRound(uint256 indexed roundId, address indexed startedBy, uint256 startedAt);\n}\n",
"interfaces/AggregatorV3Interface.sol": "// SPDX-License-Identifier: MIT\npragma solidity >=0.6.0;\n\ninterface AggregatorV3Interface {\n\n function decimals() external view returns (uint8);\n function description() external view returns (string memory);\n function version() external view returns (uint256);\n\n // getRoundData and latestRoundData should both raise \"No data present\"\n // if they do not have data to report, instead of returning unset values\n // which could be misinterpreted as actual reported values.\n function getRoundData(uint80 _roundId)\n external\n view\n returns (\n uint80 roundId,\n int256 answer,\n uint256 startedAt,\n uint256 updatedAt,\n uint80 answeredInRound\n );\n function latestRoundData()\n external\n view\n returns (\n uint80 roundId,\n int256 answer,\n uint256 startedAt,\n uint256 updatedAt,\n uint80 answeredInRound\n );\n\n}\n"
},
"sourceTreeHashHex": "0xd57603a928768cc42db347694f85cbba984792a55e14a5510696804609e349b0",
"compiler": {
"name": "solc",
"version": "soljson-v0.6.6+commit.6c089d02.js",
"settings": {
"optimizer": {
"runs": 1000000,
"enabled": true
},
"outputSelection": {
"*": {
"*": [
"abi",
"devdoc",
"userdoc",
"evm.bytecode.object",
"evm.bytecode.sourceMap",
"evm.deployedBytecode.object",
"evm.deployedBytecode.sourceMap",
"evm.methodIdentifiers",
"metadata"
]
}
},
"metadata": {
"bytecodeHash": "none"
},
"remappings": []
}
},
"chains": {}
}
\ No newline at end of file
{
"schemaVersion": "2.0.0",
"contractName": "MultiWordConsumer",
"compilerOutput": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_link",
"type": "address"
},
{
"internalType": "address",
"name": "_oracle",
"type": "address"
},
{
"internalType": "bytes32",
"name": "_specId",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
}
],
"name": "ChainlinkCancelled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
}
],
"name": "ChainlinkFulfilled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "id",
"type": "bytes32"
}
],
"name": "ChainlinkRequested",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "requestId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes",
"name": "price",
"type": "bytes"
}
],
"name": "RequestFulfilled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "requestId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "first",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "second",
"type": "bytes32"
}
],
"name": "RequestMultipleFulfilled",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "_oracle",
"type": "address"
},
{
"internalType": "bytes32",
"name": "_requestId",
"type": "bytes32"
}
],
"name": "addExternalRequest",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_oracle",
"type": "address"
},
{
"internalType": "bytes32",
"name": "_requestId",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "_payment",
"type": "uint256"
},
{
"internalType": "bytes4",
"name": "_callbackFunctionId",
"type": "bytes4"
},
{
"internalType": "uint256",
"name": "_expiration",
"type": "uint256"
}
],
"name": "cancelRequest",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "currentPrice",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "first",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_requestId",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "_price",
"type": "bytes"
}
],
"name": "fulfillBytes",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_requestId",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "_first",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "_second",
"type": "bytes32"
}
],
"name": "fulfillMultipleParameters",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_currency",
"type": "string"
},
{
"internalType": "uint256",
"name": "_payment",
"type": "uint256"
}
],
"name": "requestEthereumPrice",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_currency",
"type": "string"
},
{
"internalType": "uint256",
"name": "_payment",
"type": "uint256"
},
{
"internalType": "address",
"name": "_callback",
"type": "address"
}
],
"name": "requestEthereumPriceByCallback",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_currency",
"type": "string"
},
{
"internalType": "uint256",
"name": "_payment",
"type": "uint256"
}
],
"name": "requestMultipleParameters",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "second",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "withdrawLink",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"methods": {}
},
"evm": {
"bytecode": {
"linkReferences": {},
"object": "0x6080604052600160045534801561001557600080fd5b50604051611a0e380380611a0e8339818101604052606081101561003857600080fd5b508051602082015160409092015190919061005b836001600160e01b0361007816565b61006d826001600160e01b0361009a16565b600655506100bc9050565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b611943806100cb6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806383db5cbc11610081578063c2fb85231161005b578063c2fb852314610376578063e89855ba14610423578063e8d5359d146104cb576100c9565b806383db5cbc146102495780638dc654a2146102f15780639d1b464a146102f9576100c9565b80635591a608116100b25780635591a608146101135780635a8ac02d1461018057806374961d4d14610188576100c9565b80633df4ddf4146100ce57806353389072146100e8575b600080fd5b6100d6610504565b60408051918252519081900360200190f35b610111600480360360608110156100fe57600080fd5b508035906020810135906040013561050a565b005b610111600480360360a081101561012957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020810135906040810135907fffffffff00000000000000000000000000000000000000000000000000000000606082013516906080013561061f565b6100d66106e6565b6101116004803603606081101561019e57600080fd5b8101906020810181356401000000008111156101b957600080fd5b8201836020820111156101cb57600080fd5b803590602001918460018302840111640100000000831117156101ed57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550508235935050506020013573ffffffffffffffffffffffffffffffffffffffff166106ec565b6101116004803603604081101561025f57600080fd5b81019060208101813564010000000081111561027a57600080fd5b82018360208201111561028c57600080fd5b803590602001918460018302840111640100000000831117156102ae57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610827915050565b610111610836565b6103016109f3565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561033b578181015183820152602001610323565b50505050905090810190601f1680156103685780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101116004803603604081101561038c57600080fd5b813591908101906040810160208201356401000000008111156103ae57600080fd5b8201836020820111156103c057600080fd5b803590602001918460018302840111640100000000831117156103e257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a9f945050505050565b6101116004803603604081101561043957600080fd5b81019060208101813564010000000081111561045457600080fd5b82018360208201111561046657600080fd5b8035906020019184600183028401116401000000008311171561048857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610c51915050565b610111600480360360408110156104e157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610d8b565b60085481565b600083815260056020526040902054839073ffffffffffffffffffffffffffffffffffffffff163314610588576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806118c86028913960400191505060405180910390fd5b60008181526005602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555182917f7cc135e0cebb02c3480ae5d74d377283180a2601f8f644edf7987b009316c63a91a28183857fd368a628c6f427add4c36c69828a9be4d937a803adfda79c1dbf7eb26cdf4bc460405160405180910390a45060089190915560095550565b604080517f6ee4d55300000000000000000000000000000000000000000000000000000000815260048101869052602481018590527fffffffff0000000000000000000000000000000000000000000000000000000084166044820152606481018390529051869173ffffffffffffffffffffffffffffffffffffffff831691636ee4d5539160848082019260009290919082900301818387803b1580156106c657600080fd5b505af11580156106da573d6000803e3d6000fd5b50505050505050505050565b60095481565b6106f46117bd565b60065461072290837fc2fb852300000000000000000000000000000000000000000000000000000000610d95565b90506107846040518060400160405280600381526020017f67657400000000000000000000000000000000000000000000000000000000008152506040518060800160405280604781526020016118f06047913983919063ffffffff610dc016565b604080516001808252818301909252606091816020015b606081526020019060019003908161079b57905050905084816000815181106107c057fe5b60200260200101819052506108156040518060400160405280600481526020017f70617468000000000000000000000000000000000000000000000000000000008152508284610def9092919063ffffffff16565b61081f8285610e5d565b505050505050565b6108328282306106ec565b5050565b6000610840610e8d565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925073ffffffffffffffffffffffffffffffffffffffff83169163a9059cbb91339184916370a08231916024808301926020929190829003018186803b1580156108b957600080fd5b505afa1580156108cd573d6000803e3d6000fd5b505050506040513d60208110156108e357600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff909316600484015260248301919091525160448083019260209291908290030181600087803b15801561095957600080fd5b505af115801561096d573d6000803e3d6000fd5b505050506040513d602081101561098357600080fd5b50516109f057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e61626c6520746f207472616e736665720000000000000000000000000000604482015290519081900360640190fd5b50565b6007805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610a975780601f10610a6c57610100808354040283529160200191610a97565b820191906000526020600020905b815481529060010190602001808311610a7a57829003601f168201915b505050505081565b600082815260056020526040902054829073ffffffffffffffffffffffffffffffffffffffff163314610b1d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806118c86028913960400191505060405180910390fd5b60008181526005602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555182917f7cc135e0cebb02c3480ae5d74d377283180a2601f8f644edf7987b009316c63a91a2816040518082805190602001908083835b60208310610bc657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b89565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990911692169190911790526040519201829003822093508692507f1a111c5dcf9a71088bd5e1797fdfaf399fec2afbb24aca247e4e3e9f4b61df919160009150a38151610c4b9060079060208501906117f2565b50505050565b610c596117bd565b600654610c8790307f5338907200000000000000000000000000000000000000000000000000000000610d95565b9050610ce96040518060400160405280600381526020017f67657400000000000000000000000000000000000000000000000000000000008152506040518060800160405280604781526020016118f06047913983919063ffffffff610dc016565b604080516001808252818301909252606091816020015b6060815260200190600190039081610d005790505090508381600081518110610d2557fe5b6020026020010181905250610d7a6040518060400160405280600481526020017f70617468000000000000000000000000000000000000000000000000000000008152508284610def9092919063ffffffff16565b610d848284610e5d565b5050505050565b6108328282610eaa565b610d9d6117bd565b610da56117bd565b610db78186868663ffffffff610f9116565b95945050505050565b6080830151610dd5908363ffffffff610ff316565b6080830151610dea908263ffffffff610ff316565b505050565b6080830151610e04908363ffffffff610ff316565b610e118360800151611010565b60005b8151811015610e4f57610e47828281518110610e2c57fe5b60200260200101518560800151610ff390919063ffffffff16565b600101610e14565b50610dea836080015161101b565b600354600090610e849073ffffffffffffffffffffffffffffffffffffffff168484611026565b90505b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff165b90565b600081815260056020526040902054819073ffffffffffffffffffffffffffffffffffffffff1615610f3d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5265717565737420697320616c72656164792070656e64696e67000000000000604482015290519081900360640190fd5b50600090815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610f996117bd565b610fa98560800151610100611263565b505091835273ffffffffffffffffffffffffffffffffffffffff1660208301527fffffffff0000000000000000000000000000000000000000000000000000000016604082015290565b611000826003835161129d565b610dea828263ffffffff6113a716565b6109f08160046113c1565b6109f08160076113c1565b6004546040805130606090811b60208084019190915260348084018690528451808503909101815260549093018452825192810192909220908601939093526000838152600590915281812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816179055905182917fb5e6e01e79f91267dc17b4e6314d5d4d03593d2ceee0fbb452b750bd70ea5af991a260025473ffffffffffffffffffffffffffffffffffffffff16634000aea08584611100876113dc565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561118457818101518382015260200161116c565b50505050905090810190601f1680156111b15780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1580156111d257600080fd5b505af11580156111e6573d6000803e3d6000fd5b505050506040513d60208110156111fc57600080fd5b5051611253576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806118a56023913960400191505060405180910390fd5b6004805460010190559392505050565b61126b611870565b60208206156112805760208206602003820191505b506020828101829052604080518085526000815290920101905290565b601781116112c4576112be8360e0600585901b16831763ffffffff6115c516565b50610dea565b60ff81116112fa576112e7836018611fe0600586901b161763ffffffff6115c516565b506112be8382600163ffffffff6115dd16565b61ffff81116113315761131e836019611fe0600586901b161763ffffffff6115c516565b506112be8382600263ffffffff6115dd16565b63ffffffff811161136a5761135783601a611fe0600586901b161763ffffffff6115c516565b506112be8382600463ffffffff6115dd16565b67ffffffffffffffff8111610dea5761139483601b611fe0600586901b161763ffffffff6115c516565b50610c4b8382600863ffffffff6115dd16565b6113af611870565b610e84838460000151518485516115fe565b610dea82601f611fe0600585901b161763ffffffff6115c516565b6060634042994660e01b60008084600001518560200151866040015187606001516001896080015160000151604051602401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156115085781810151838201526020016114f0565b50505050905090810190601f1680156115355780820380516001836020036101000a031916815260200191505b50604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909d169c909c17909b5250989950505050505050505050919050565b6115cd611870565b610e8483846000015151846116e6565b6115e5611870565b6115f6848560000151518585611731565b949350505050565b611606611870565b825182111561161457600080fd5b8460200151828501111561163e5761163e85611636876020015187860161178f565b6002026117a6565b60008086518051876020830101935080888701111561165d5787860182525b505050602084015b602084106116a257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09093019260209182019101611665565b5181517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60208690036101000a019081169019919091161790525083949350505050565b6116ee611870565b8360200151831061170a5761170a8485602001516002026117a6565b835180516020858301018481535080851415611727576001810182525b5093949350505050565b611739611870565b8460200151848301111561175657611756858584016002026117a6565b60006001836101000a0390508551838682010185831982511617815250805184870111156117845783860181525b509495945050505050565b6000818311156117a0575081610e87565b50919050565b81516117b28383611263565b50610c4b83826113a7565b6040805160a0810182526000808252602082018190529181018290526060810191909152608081016117ed611870565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061183357805160ff1916838001178555611860565b82800160010185558215611860579182015b82811115611860578251825591602001919060010190611845565b5061186c92915061188a565b5090565b604051806040016040528060608152602001600081525090565b610ea791905b8082111561186c576000815560010161189056fe756e61626c6520746f207472616e73666572416e6443616c6c20746f206f7261636c65536f75726365206d75737420626520746865206f7261636c65206f6620746865207265717565737468747470733a2f2f6d696e2d6170692e63727970746f636f6d706172652e636f6d2f646174612f70726963653f6673796d3d455448267473796d733d5553442c4555522c4a5059a164736f6c6343000606000a",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x1 PUSH1 0x4 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1A0E CODESIZE SUB DUP1 PUSH2 0x1A0E DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x5B DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH2 0x78 AND JUMP JUMPDEST PUSH2 0x6D DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH2 0x9A AND JUMP JUMPDEST PUSH1 0x6 SSTORE POP PUSH2 0xBC SWAP1 POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x1943 DUP1 PUSH2 0xCB PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x83DB5CBC GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xC2FB8523 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xC2FB8523 EQ PUSH2 0x376 JUMPI DUP1 PUSH4 0xE89855BA EQ PUSH2 0x423 JUMPI DUP1 PUSH4 0xE8D5359D EQ PUSH2 0x4CB JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x83DB5CBC EQ PUSH2 0x249 JUMPI DUP1 PUSH4 0x8DC654A2 EQ PUSH2 0x2F1 JUMPI DUP1 PUSH4 0x9D1B464A EQ PUSH2 0x2F9 JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x5591A608 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x5591A608 EQ PUSH2 0x113 JUMPI DUP1 PUSH4 0x5A8AC02D EQ PUSH2 0x180 JUMPI DUP1 PUSH4 0x74961D4D EQ PUSH2 0x188 JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x3DF4DDF4 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x53389072 EQ PUSH2 0xE8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6 PUSH2 0x504 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x111 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x50A JUMP JUMPDEST STOP JUMPDEST PUSH2 0x111 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x60 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x61F JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x6E6 JUMP JUMPDEST PUSH2 0x111 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x6EC JUMP JUMPDEST PUSH2 0x111 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x25F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x27A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x28C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x2AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP SWAP2 CALLDATALOAD SWAP3 POP PUSH2 0x827 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x111 PUSH2 0x836 JUMP JUMPDEST PUSH2 0x301 PUSH2 0x9F3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x33B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x323 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x368 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x111 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x38C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x3AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x3E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xA9F SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x111 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x439 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x454 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x466 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP SWAP2 CALLDATALOAD SWAP3 POP PUSH2 0xC51 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x111 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xD8B JUMP JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x588 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x18C8 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE MLOAD DUP3 SWAP2 PUSH32 0x7CC135E0CEBB02C3480AE5D74D377283180A2601F8F644EDF7987B009316C63A SWAP2 LOG2 DUP2 DUP4 DUP6 PUSH32 0xD368A628C6F427ADD4C36C69828A9BE4D937A803ADFDA79C1DBF7EB26CDF4BC4 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP PUSH1 0x8 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x9 SSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6EE4D55300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD DUP7 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP2 PUSH4 0x6EE4D553 SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x6F4 PUSH2 0x17BD JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x722 SWAP1 DUP4 PUSH32 0xC2FB852300000000000000000000000000000000000000000000000000000000 PUSH2 0xD95 JUMP JUMPDEST SWAP1 POP PUSH2 0x784 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x6765740000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x47 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x18F0 PUSH1 0x47 SWAP2 CODECOPY DUP4 SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xDC0 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x79B JUMPI SWAP1 POP POP SWAP1 POP DUP5 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x7C0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP PUSH2 0x815 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7061746800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP3 DUP5 PUSH2 0xDEF SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x81F DUP3 DUP6 PUSH2 0xE5D JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x832 DUP3 DUP3 ADDRESS PUSH2 0x6EC JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x840 PUSH2 0xE8D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP2 PUSH4 0xA9059CBB SWAP2 CALLER SWAP2 DUP5 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP7 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x959 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x96D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x983 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x9F0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E61626C6520746F207472616E736665720000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xA97 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xA6C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xA97 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA7A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xB1D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x18C8 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE MLOAD DUP3 SWAP2 PUSH32 0x7CC135E0CEBB02C3480AE5D74D377283180A2601F8F644EDF7987B009316C63A SWAP2 LOG2 DUP2 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xBC6 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB89 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 SWAP4 POP DUP7 SWAP3 POP PUSH32 0x1A111C5DCF9A71088BD5E1797FDFAF399FEC2AFBB24ACA247E4E3E9F4B61DF91 SWAP2 PUSH1 0x0 SWAP2 POP LOG3 DUP2 MLOAD PUSH2 0xC4B SWAP1 PUSH1 0x7 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x17F2 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xC59 PUSH2 0x17BD JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0xC87 SWAP1 ADDRESS PUSH32 0x5338907200000000000000000000000000000000000000000000000000000000 PUSH2 0xD95 JUMP JUMPDEST SWAP1 POP PUSH2 0xCE9 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x6765740000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x47 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x18F0 PUSH1 0x47 SWAP2 CODECOPY DUP4 SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xDC0 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0xD00 JUMPI SWAP1 POP POP SWAP1 POP DUP4 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xD25 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP PUSH2 0xD7A PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7061746800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP3 DUP5 PUSH2 0xDEF SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0xD84 DUP3 DUP5 PUSH2 0xE5D JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x832 DUP3 DUP3 PUSH2 0xEAA JUMP JUMPDEST PUSH2 0xD9D PUSH2 0x17BD JUMP JUMPDEST PUSH2 0xDA5 PUSH2 0x17BD JUMP JUMPDEST PUSH2 0xDB7 DUP2 DUP7 DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0xF91 AND JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0xDD5 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xFF3 AND JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0xDEA SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xFF3 AND JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0xE04 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xFF3 AND JUMP JUMPDEST PUSH2 0xE11 DUP4 PUSH1 0x80 ADD MLOAD PUSH2 0x1010 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xE4F JUMPI PUSH2 0xE47 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xE2C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD PUSH2 0xFF3 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xE14 JUMP JUMPDEST POP PUSH2 0xDEA DUP4 PUSH1 0x80 ADD MLOAD PUSH2 0x101B JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 SWAP1 PUSH2 0xE84 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1026 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0xF3D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265717565737420697320616C72656164792070656E64696E67000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0xF99 PUSH2 0x17BD JUMP JUMPDEST PUSH2 0xFA9 DUP6 PUSH1 0x80 ADD MLOAD PUSH2 0x100 PUSH2 0x1263 JUMP JUMPDEST POP POP SWAP2 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x40 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x1000 DUP3 PUSH1 0x3 DUP4 MLOAD PUSH2 0x129D JUMP JUMPDEST PUSH2 0xDEA DUP3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x13A7 AND JUMP JUMPDEST PUSH2 0x9F0 DUP2 PUSH1 0x4 PUSH2 0x13C1 JUMP JUMPDEST PUSH2 0x9F0 DUP2 PUSH1 0x7 PUSH2 0x13C1 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD ADDRESS PUSH1 0x60 SWAP1 DUP2 SHL PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x34 DUP1 DUP5 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x54 SWAP1 SWAP4 ADD DUP5 MSTORE DUP3 MLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 KECCAK256 SWAP1 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE DUP2 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND OR SWAP1 SSTORE SWAP1 MLOAD DUP3 SWAP2 PUSH32 0xB5E6E01E79F91267DC17B4E6314D5D4D03593D2CEEE0FBB452B750BD70EA5AF9 SWAP2 LOG2 PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x4000AEA0 DUP6 DUP5 PUSH2 0x1100 DUP8 PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1184 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x116C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11B1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x11E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1253 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x18A5 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x126B PUSH2 0x1870 JUMP JUMPDEST PUSH1 0x20 DUP3 MOD ISZERO PUSH2 0x1280 JUMPI PUSH1 0x20 DUP3 MOD PUSH1 0x20 SUB DUP3 ADD SWAP2 POP JUMPDEST POP PUSH1 0x20 DUP3 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP6 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 SWAP3 ADD ADD SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 GT PUSH2 0x12C4 JUMPI PUSH2 0x12BE DUP4 PUSH1 0xE0 PUSH1 0x5 DUP6 SWAP1 SHL AND DUP4 OR PUSH4 0xFFFFFFFF PUSH2 0x15C5 AND JUMP JUMPDEST POP PUSH2 0xDEA JUMP JUMPDEST PUSH1 0xFF DUP2 GT PUSH2 0x12FA JUMPI PUSH2 0x12E7 DUP4 PUSH1 0x18 PUSH2 0x1FE0 PUSH1 0x5 DUP7 SWAP1 SHL AND OR PUSH4 0xFFFFFFFF PUSH2 0x15C5 AND JUMP JUMPDEST POP PUSH2 0x12BE DUP4 DUP3 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x15DD AND JUMP JUMPDEST PUSH2 0xFFFF DUP2 GT PUSH2 0x1331 JUMPI PUSH2 0x131E DUP4 PUSH1 0x19 PUSH2 0x1FE0 PUSH1 0x5 DUP7 SWAP1 SHL AND OR PUSH4 0xFFFFFFFF PUSH2 0x15C5 AND JUMP JUMPDEST POP PUSH2 0x12BE DUP4 DUP3 PUSH1 0x2 PUSH4 0xFFFFFFFF PUSH2 0x15DD AND JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 GT PUSH2 0x136A JUMPI PUSH2 0x1357 DUP4 PUSH1 0x1A PUSH2 0x1FE0 PUSH1 0x5 DUP7 SWAP1 SHL AND OR PUSH4 0xFFFFFFFF PUSH2 0x15C5 AND JUMP JUMPDEST POP PUSH2 0x12BE DUP4 DUP3 PUSH1 0x4 PUSH4 0xFFFFFFFF PUSH2 0x15DD AND JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xDEA JUMPI PUSH2 0x1394 DUP4 PUSH1 0x1B PUSH2 0x1FE0 PUSH1 0x5 DUP7 SWAP1 SHL AND OR PUSH4 0xFFFFFFFF PUSH2 0x15C5 AND JUMP JUMPDEST POP PUSH2 0xC4B DUP4 DUP3 PUSH1 0x8 PUSH4 0xFFFFFFFF PUSH2 0x15DD AND JUMP JUMPDEST PUSH2 0x13AF PUSH2 0x1870 JUMP JUMPDEST PUSH2 0xE84 DUP4 DUP5 PUSH1 0x0 ADD MLOAD MLOAD DUP5 DUP6 MLOAD PUSH2 0x15FE JUMP JUMPDEST PUSH2 0xDEA DUP3 PUSH1 0x1F PUSH2 0x1FE0 PUSH1 0x5 DUP6 SWAP1 SHL AND OR PUSH4 0xFFFFFFFF PUSH2 0x15C5 AND JUMP JUMPDEST PUSH1 0x60 PUSH4 0x40429946 PUSH1 0xE0 SHL PUSH1 0x0 DUP1 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD PUSH1 0x1 DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0x0 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1508 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14F0 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1535 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP14 AND SWAP13 SWAP1 SWAP13 OR SWAP1 SWAP12 MSTORE POP SWAP9 SWAP10 POP POP POP POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x15CD PUSH2 0x1870 JUMP JUMPDEST PUSH2 0xE84 DUP4 DUP5 PUSH1 0x0 ADD MLOAD MLOAD DUP5 PUSH2 0x16E6 JUMP JUMPDEST PUSH2 0x15E5 PUSH2 0x1870 JUMP JUMPDEST PUSH2 0x15F6 DUP5 DUP6 PUSH1 0x0 ADD MLOAD MLOAD DUP6 DUP6 PUSH2 0x1731 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x1606 PUSH2 0x1870 JUMP JUMPDEST DUP3 MLOAD DUP3 GT ISZERO PUSH2 0x1614 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH1 0x20 ADD MLOAD DUP3 DUP6 ADD GT ISZERO PUSH2 0x163E JUMPI PUSH2 0x163E DUP6 PUSH2 0x1636 DUP8 PUSH1 0x20 ADD MLOAD DUP8 DUP7 ADD PUSH2 0x178F JUMP JUMPDEST PUSH1 0x2 MUL PUSH2 0x17A6 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 MLOAD DUP1 MLOAD DUP8 PUSH1 0x20 DUP4 ADD ADD SWAP4 POP DUP1 DUP9 DUP8 ADD GT ISZERO PUSH2 0x165D JUMPI DUP8 DUP7 ADD DUP3 MSTORE JUMPDEST POP POP POP PUSH1 0x20 DUP5 ADD JUMPDEST PUSH1 0x20 DUP5 LT PUSH2 0x16A2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1665 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP7 SWAP1 SUB PUSH2 0x100 EXP ADD SWAP1 DUP2 AND SWAP1 NOT SWAP2 SWAP1 SWAP2 AND OR SWAP1 MSTORE POP DUP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x16EE PUSH2 0x1870 JUMP JUMPDEST DUP4 PUSH1 0x20 ADD MLOAD DUP4 LT PUSH2 0x170A JUMPI PUSH2 0x170A DUP5 DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x2 MUL PUSH2 0x17A6 JUMP JUMPDEST DUP4 MLOAD DUP1 MLOAD PUSH1 0x20 DUP6 DUP4 ADD ADD DUP5 DUP2 MSTORE8 POP DUP1 DUP6 EQ ISZERO PUSH2 0x1727 JUMPI PUSH1 0x1 DUP2 ADD DUP3 MSTORE JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x1739 PUSH2 0x1870 JUMP JUMPDEST DUP5 PUSH1 0x20 ADD MLOAD DUP5 DUP4 ADD GT ISZERO PUSH2 0x1756 JUMPI PUSH2 0x1756 DUP6 DUP6 DUP5 ADD PUSH1 0x2 MUL PUSH2 0x17A6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP4 PUSH2 0x100 EXP SUB SWAP1 POP DUP6 MLOAD DUP4 DUP7 DUP3 ADD ADD DUP6 DUP4 NOT DUP3 MLOAD AND OR DUP2 MSTORE POP DUP1 MLOAD DUP5 DUP8 ADD GT ISZERO PUSH2 0x1784 JUMPI DUP4 DUP7 ADD DUP2 MSTORE JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT ISZERO PUSH2 0x17A0 JUMPI POP DUP2 PUSH2 0xE87 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 MLOAD PUSH2 0x17B2 DUP4 DUP4 PUSH2 0x1263 JUMP JUMPDEST POP PUSH2 0xC4B DUP4 DUP3 PUSH2 0x13A7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x17ED PUSH2 0x1870 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x1833 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1860 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1860 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1860 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1845 JUMP JUMPDEST POP PUSH2 0x186C SWAP3 SWAP2 POP PUSH2 0x188A JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0xEA7 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x186C JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1890 JUMP INVALID PUSH22 0x6E61626C6520746F207472616E73666572416E644361 PUSH13 0x6C20746F206F7261636C65536F PUSH22 0x726365206D75737420626520746865206F7261636C65 KECCAK256 PUSH16 0x66207468652072657175657374687474 PUSH17 0x733A2F2F6D696E2D6170692E6372797074 PUSH16 0x636F6D706172652E636F6D2F64617461 0x2F PUSH17 0x726963653F6673796D3D45544826747379 PUSH14 0x733D5553442C4555522C4A5059A1 PUSH5 0x736F6C6343 STOP MOD MOD STOP EXP ",
"sourceMap": "91:2779:56:-:0;;;1163:1:4;1132:32;;479:158:56;5:9:-1;2:2;;;27:1;24;17:12;2:2;479:158:56;;;;;;;;;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;479:158:56;;;;;;;;;;;;;;553:24;479:158;-1:-1:-1;;;;;553:17:56;:24;:::i;:::-;583:27;602:7;-1:-1:-1;;;;;583:18:56;:27;:::i;:::-;616:6;:16;-1:-1:-1;91:2779:56;;-1:-1:-1;91:2779:56;4834:94:4;4891:4;:32;;-1:-1:-1;;;;;;4891:32:4;-1:-1:-1;;;;;4891:32:4;;;;;;;;;;4834:94::o;4612:108::-;4672:6;:43;;-1:-1:-1;;;;;;4672:43:4;-1:-1:-1;;;;;4672:43:4;;;;;;;;;;4612:108::o;91:2779:56:-;;;;;;;"
},
"deployedBytecode": {
"immutableReferences": {},
"linkReferences": {},
"object": "0x608060405234801561001057600080fd5b50600436106100c95760003560e01c806383db5cbc11610081578063c2fb85231161005b578063c2fb852314610376578063e89855ba14610423578063e8d5359d146104cb576100c9565b806383db5cbc146102495780638dc654a2146102f15780639d1b464a146102f9576100c9565b80635591a608116100b25780635591a608146101135780635a8ac02d1461018057806374961d4d14610188576100c9565b80633df4ddf4146100ce57806353389072146100e8575b600080fd5b6100d6610504565b60408051918252519081900360200190f35b610111600480360360608110156100fe57600080fd5b508035906020810135906040013561050a565b005b610111600480360360a081101561012957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020810135906040810135907fffffffff00000000000000000000000000000000000000000000000000000000606082013516906080013561061f565b6100d66106e6565b6101116004803603606081101561019e57600080fd5b8101906020810181356401000000008111156101b957600080fd5b8201836020820111156101cb57600080fd5b803590602001918460018302840111640100000000831117156101ed57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550508235935050506020013573ffffffffffffffffffffffffffffffffffffffff166106ec565b6101116004803603604081101561025f57600080fd5b81019060208101813564010000000081111561027a57600080fd5b82018360208201111561028c57600080fd5b803590602001918460018302840111640100000000831117156102ae57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610827915050565b610111610836565b6103016109f3565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561033b578181015183820152602001610323565b50505050905090810190601f1680156103685780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101116004803603604081101561038c57600080fd5b813591908101906040810160208201356401000000008111156103ae57600080fd5b8201836020820111156103c057600080fd5b803590602001918460018302840111640100000000831117156103e257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a9f945050505050565b6101116004803603604081101561043957600080fd5b81019060208101813564010000000081111561045457600080fd5b82018360208201111561046657600080fd5b8035906020019184600183028401116401000000008311171561048857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610c51915050565b610111600480360360408110156104e157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610d8b565b60085481565b600083815260056020526040902054839073ffffffffffffffffffffffffffffffffffffffff163314610588576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806118c86028913960400191505060405180910390fd5b60008181526005602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555182917f7cc135e0cebb02c3480ae5d74d377283180a2601f8f644edf7987b009316c63a91a28183857fd368a628c6f427add4c36c69828a9be4d937a803adfda79c1dbf7eb26cdf4bc460405160405180910390a45060089190915560095550565b604080517f6ee4d55300000000000000000000000000000000000000000000000000000000815260048101869052602481018590527fffffffff0000000000000000000000000000000000000000000000000000000084166044820152606481018390529051869173ffffffffffffffffffffffffffffffffffffffff831691636ee4d5539160848082019260009290919082900301818387803b1580156106c657600080fd5b505af11580156106da573d6000803e3d6000fd5b50505050505050505050565b60095481565b6106f46117bd565b60065461072290837fc2fb852300000000000000000000000000000000000000000000000000000000610d95565b90506107846040518060400160405280600381526020017f67657400000000000000000000000000000000000000000000000000000000008152506040518060800160405280604781526020016118f06047913983919063ffffffff610dc016565b604080516001808252818301909252606091816020015b606081526020019060019003908161079b57905050905084816000815181106107c057fe5b60200260200101819052506108156040518060400160405280600481526020017f70617468000000000000000000000000000000000000000000000000000000008152508284610def9092919063ffffffff16565b61081f8285610e5d565b505050505050565b6108328282306106ec565b5050565b6000610840610e8d565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925073ffffffffffffffffffffffffffffffffffffffff83169163a9059cbb91339184916370a08231916024808301926020929190829003018186803b1580156108b957600080fd5b505afa1580156108cd573d6000803e3d6000fd5b505050506040513d60208110156108e357600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff909316600484015260248301919091525160448083019260209291908290030181600087803b15801561095957600080fd5b505af115801561096d573d6000803e3d6000fd5b505050506040513d602081101561098357600080fd5b50516109f057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e61626c6520746f207472616e736665720000000000000000000000000000604482015290519081900360640190fd5b50565b6007805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015610a975780601f10610a6c57610100808354040283529160200191610a97565b820191906000526020600020905b815481529060010190602001808311610a7a57829003601f168201915b505050505081565b600082815260056020526040902054829073ffffffffffffffffffffffffffffffffffffffff163314610b1d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806118c86028913960400191505060405180910390fd5b60008181526005602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555182917f7cc135e0cebb02c3480ae5d74d377283180a2601f8f644edf7987b009316c63a91a2816040518082805190602001908083835b60208310610bc657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b89565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990911692169190911790526040519201829003822093508692507f1a111c5dcf9a71088bd5e1797fdfaf399fec2afbb24aca247e4e3e9f4b61df919160009150a38151610c4b9060079060208501906117f2565b50505050565b610c596117bd565b600654610c8790307f5338907200000000000000000000000000000000000000000000000000000000610d95565b9050610ce96040518060400160405280600381526020017f67657400000000000000000000000000000000000000000000000000000000008152506040518060800160405280604781526020016118f06047913983919063ffffffff610dc016565b604080516001808252818301909252606091816020015b6060815260200190600190039081610d005790505090508381600081518110610d2557fe5b6020026020010181905250610d7a6040518060400160405280600481526020017f70617468000000000000000000000000000000000000000000000000000000008152508284610def9092919063ffffffff16565b610d848284610e5d565b5050505050565b6108328282610eaa565b610d9d6117bd565b610da56117bd565b610db78186868663ffffffff610f9116565b95945050505050565b6080830151610dd5908363ffffffff610ff316565b6080830151610dea908263ffffffff610ff316565b505050565b6080830151610e04908363ffffffff610ff316565b610e118360800151611010565b60005b8151811015610e4f57610e47828281518110610e2c57fe5b60200260200101518560800151610ff390919063ffffffff16565b600101610e14565b50610dea836080015161101b565b600354600090610e849073ffffffffffffffffffffffffffffffffffffffff168484611026565b90505b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff165b90565b600081815260056020526040902054819073ffffffffffffffffffffffffffffffffffffffff1615610f3d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5265717565737420697320616c72656164792070656e64696e67000000000000604482015290519081900360640190fd5b50600090815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610f996117bd565b610fa98560800151610100611263565b505091835273ffffffffffffffffffffffffffffffffffffffff1660208301527fffffffff0000000000000000000000000000000000000000000000000000000016604082015290565b611000826003835161129d565b610dea828263ffffffff6113a716565b6109f08160046113c1565b6109f08160076113c1565b6004546040805130606090811b60208084019190915260348084018690528451808503909101815260549093018452825192810192909220908601939093526000838152600590915281812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816179055905182917fb5e6e01e79f91267dc17b4e6314d5d4d03593d2ceee0fbb452b750bd70ea5af991a260025473ffffffffffffffffffffffffffffffffffffffff16634000aea08584611100876113dc565b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561118457818101518382015260200161116c565b50505050905090810190601f1680156111b15780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1580156111d257600080fd5b505af11580156111e6573d6000803e3d6000fd5b505050506040513d60208110156111fc57600080fd5b5051611253576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806118a56023913960400191505060405180910390fd5b6004805460010190559392505050565b61126b611870565b60208206156112805760208206602003820191505b506020828101829052604080518085526000815290920101905290565b601781116112c4576112be8360e0600585901b16831763ffffffff6115c516565b50610dea565b60ff81116112fa576112e7836018611fe0600586901b161763ffffffff6115c516565b506112be8382600163ffffffff6115dd16565b61ffff81116113315761131e836019611fe0600586901b161763ffffffff6115c516565b506112be8382600263ffffffff6115dd16565b63ffffffff811161136a5761135783601a611fe0600586901b161763ffffffff6115c516565b506112be8382600463ffffffff6115dd16565b67ffffffffffffffff8111610dea5761139483601b611fe0600586901b161763ffffffff6115c516565b50610c4b8382600863ffffffff6115dd16565b6113af611870565b610e84838460000151518485516115fe565b610dea82601f611fe0600585901b161763ffffffff6115c516565b6060634042994660e01b60008084600001518560200151866040015187606001516001896080015160000151604051602401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156115085781810151838201526020016114f0565b50505050905090810190601f1680156115355780820380516001836020036101000a031916815260200191505b50604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909d169c909c17909b5250989950505050505050505050919050565b6115cd611870565b610e8483846000015151846116e6565b6115e5611870565b6115f6848560000151518585611731565b949350505050565b611606611870565b825182111561161457600080fd5b8460200151828501111561163e5761163e85611636876020015187860161178f565b6002026117a6565b60008086518051876020830101935080888701111561165d5787860182525b505050602084015b602084106116a257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09093019260209182019101611665565b5181517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60208690036101000a019081169019919091161790525083949350505050565b6116ee611870565b8360200151831061170a5761170a8485602001516002026117a6565b835180516020858301018481535080851415611727576001810182525b5093949350505050565b611739611870565b8460200151848301111561175657611756858584016002026117a6565b60006001836101000a0390508551838682010185831982511617815250805184870111156117845783860181525b509495945050505050565b6000818311156117a0575081610e87565b50919050565b81516117b28383611263565b50610c4b83826113a7565b6040805160a0810182526000808252602082018190529181018290526060810191909152608081016117ed611870565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061183357805160ff1916838001178555611860565b82800160010185558215611860579182015b82811115611860578251825591602001919060010190611845565b5061186c92915061188a565b5090565b604051806040016040528060608152602001600081525090565b610ea791905b8082111561186c576000815560010161189056fe756e61626c6520746f207472616e73666572416e6443616c6c20746f206f7261636c65536f75726365206d75737420626520746865206f7261636c65206f6620746865207265717565737468747470733a2f2f6d696e2d6170692e63727970746f636f6d706172652e636f6d2f646174612f70726963653f6673796d3d455448267473796d733d5553442c4555522c4a5059a164736f6c6343000606000a",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x83DB5CBC GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xC2FB8523 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xC2FB8523 EQ PUSH2 0x376 JUMPI DUP1 PUSH4 0xE89855BA EQ PUSH2 0x423 JUMPI DUP1 PUSH4 0xE8D5359D EQ PUSH2 0x4CB JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x83DB5CBC EQ PUSH2 0x249 JUMPI DUP1 PUSH4 0x8DC654A2 EQ PUSH2 0x2F1 JUMPI DUP1 PUSH4 0x9D1B464A EQ PUSH2 0x2F9 JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x5591A608 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x5591A608 EQ PUSH2 0x113 JUMPI DUP1 PUSH4 0x5A8AC02D EQ PUSH2 0x180 JUMPI DUP1 PUSH4 0x74961D4D EQ PUSH2 0x188 JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x3DF4DDF4 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x53389072 EQ PUSH2 0xE8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6 PUSH2 0x504 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x111 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x50A JUMP JUMPDEST STOP JUMPDEST PUSH2 0x111 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x60 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x61F JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x6E6 JUMP JUMPDEST PUSH2 0x111 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x6EC JUMP JUMPDEST PUSH2 0x111 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x25F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x27A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x28C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x2AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP SWAP2 CALLDATALOAD SWAP3 POP PUSH2 0x827 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x111 PUSH2 0x836 JUMP JUMPDEST PUSH2 0x301 PUSH2 0x9F3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x33B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x323 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x368 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x111 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x38C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x3AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x3E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0xA9F SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x111 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x439 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x454 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x466 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP SWAP2 CALLDATALOAD SWAP3 POP PUSH2 0xC51 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x111 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xD8B JUMP JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x588 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x18C8 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE MLOAD DUP3 SWAP2 PUSH32 0x7CC135E0CEBB02C3480AE5D74D377283180A2601F8F644EDF7987B009316C63A SWAP2 LOG2 DUP2 DUP4 DUP6 PUSH32 0xD368A628C6F427ADD4C36C69828A9BE4D937A803ADFDA79C1DBF7EB26CDF4BC4 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP PUSH1 0x8 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x9 SSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6EE4D55300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD DUP7 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP2 PUSH4 0x6EE4D553 SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x6F4 PUSH2 0x17BD JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x722 SWAP1 DUP4 PUSH32 0xC2FB852300000000000000000000000000000000000000000000000000000000 PUSH2 0xD95 JUMP JUMPDEST SWAP1 POP PUSH2 0x784 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x6765740000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x47 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x18F0 PUSH1 0x47 SWAP2 CODECOPY DUP4 SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xDC0 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x79B JUMPI SWAP1 POP POP SWAP1 POP DUP5 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x7C0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP PUSH2 0x815 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7061746800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP3 DUP5 PUSH2 0xDEF SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x81F DUP3 DUP6 PUSH2 0xE5D JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x832 DUP3 DUP3 ADDRESS PUSH2 0x6EC JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x840 PUSH2 0xE8D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP2 PUSH4 0xA9059CBB SWAP2 CALLER SWAP2 DUP5 SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP7 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x959 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x96D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x983 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x9F0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E61626C6520746F207472616E736665720000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xA97 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xA6C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xA97 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA7A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xB1D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x18C8 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE MLOAD DUP3 SWAP2 PUSH32 0x7CC135E0CEBB02C3480AE5D74D377283180A2601F8F644EDF7987B009316C63A SWAP2 LOG2 DUP2 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xBC6 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB89 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 SWAP4 POP DUP7 SWAP3 POP PUSH32 0x1A111C5DCF9A71088BD5E1797FDFAF399FEC2AFBB24ACA247E4E3E9F4B61DF91 SWAP2 PUSH1 0x0 SWAP2 POP LOG3 DUP2 MLOAD PUSH2 0xC4B SWAP1 PUSH1 0x7 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x17F2 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xC59 PUSH2 0x17BD JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0xC87 SWAP1 ADDRESS PUSH32 0x5338907200000000000000000000000000000000000000000000000000000000 PUSH2 0xD95 JUMP JUMPDEST SWAP1 POP PUSH2 0xCE9 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x6765740000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x47 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x18F0 PUSH1 0x47 SWAP2 CODECOPY DUP4 SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xDC0 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0xD00 JUMPI SWAP1 POP POP SWAP1 POP DUP4 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xD25 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP PUSH2 0xD7A PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x7061746800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP3 DUP5 PUSH2 0xDEF SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0xD84 DUP3 DUP5 PUSH2 0xE5D JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x832 DUP3 DUP3 PUSH2 0xEAA JUMP JUMPDEST PUSH2 0xD9D PUSH2 0x17BD JUMP JUMPDEST PUSH2 0xDA5 PUSH2 0x17BD JUMP JUMPDEST PUSH2 0xDB7 DUP2 DUP7 DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0xF91 AND JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0xDD5 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xFF3 AND JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0xDEA SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xFF3 AND JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0xE04 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xFF3 AND JUMP JUMPDEST PUSH2 0xE11 DUP4 PUSH1 0x80 ADD MLOAD PUSH2 0x1010 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xE4F JUMPI PUSH2 0xE47 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xE2C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 PUSH1 0x80 ADD MLOAD PUSH2 0xFF3 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xE14 JUMP JUMPDEST POP PUSH2 0xDEA DUP4 PUSH1 0x80 ADD MLOAD PUSH2 0x101B JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 SWAP1 PUSH2 0xE84 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1026 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0xF3D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265717565737420697320616C72656164792070656E64696E67000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0xF99 PUSH2 0x17BD JUMP JUMPDEST PUSH2 0xFA9 DUP6 PUSH1 0x80 ADD MLOAD PUSH2 0x100 PUSH2 0x1263 JUMP JUMPDEST POP POP SWAP2 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x40 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x1000 DUP3 PUSH1 0x3 DUP4 MLOAD PUSH2 0x129D JUMP JUMPDEST PUSH2 0xDEA DUP3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x13A7 AND JUMP JUMPDEST PUSH2 0x9F0 DUP2 PUSH1 0x4 PUSH2 0x13C1 JUMP JUMPDEST PUSH2 0x9F0 DUP2 PUSH1 0x7 PUSH2 0x13C1 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD ADDRESS PUSH1 0x60 SWAP1 DUP2 SHL PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x34 DUP1 DUP5 ADD DUP7 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x54 SWAP1 SWAP4 ADD DUP5 MSTORE DUP3 MLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 KECCAK256 SWAP1 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE DUP2 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND OR SWAP1 SSTORE SWAP1 MLOAD DUP3 SWAP2 PUSH32 0xB5E6E01E79F91267DC17B4E6314D5D4D03593D2CEEE0FBB452B750BD70EA5AF9 SWAP2 LOG2 PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x4000AEA0 DUP6 DUP5 PUSH2 0x1100 DUP8 PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1184 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x116C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11B1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x11E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1253 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x18A5 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x126B PUSH2 0x1870 JUMP JUMPDEST PUSH1 0x20 DUP3 MOD ISZERO PUSH2 0x1280 JUMPI PUSH1 0x20 DUP3 MOD PUSH1 0x20 SUB DUP3 ADD SWAP2 POP JUMPDEST POP PUSH1 0x20 DUP3 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP6 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 SWAP3 ADD ADD SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 GT PUSH2 0x12C4 JUMPI PUSH2 0x12BE DUP4 PUSH1 0xE0 PUSH1 0x5 DUP6 SWAP1 SHL AND DUP4 OR PUSH4 0xFFFFFFFF PUSH2 0x15C5 AND JUMP JUMPDEST POP PUSH2 0xDEA JUMP JUMPDEST PUSH1 0xFF DUP2 GT PUSH2 0x12FA JUMPI PUSH2 0x12E7 DUP4 PUSH1 0x18 PUSH2 0x1FE0 PUSH1 0x5 DUP7 SWAP1 SHL AND OR PUSH4 0xFFFFFFFF PUSH2 0x15C5 AND JUMP JUMPDEST POP PUSH2 0x12BE DUP4 DUP3 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x15DD AND JUMP JUMPDEST PUSH2 0xFFFF DUP2 GT PUSH2 0x1331 JUMPI PUSH2 0x131E DUP4 PUSH1 0x19 PUSH2 0x1FE0 PUSH1 0x5 DUP7 SWAP1 SHL AND OR PUSH4 0xFFFFFFFF PUSH2 0x15C5 AND JUMP JUMPDEST POP PUSH2 0x12BE DUP4 DUP3 PUSH1 0x2 PUSH4 0xFFFFFFFF PUSH2 0x15DD AND JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 GT PUSH2 0x136A JUMPI PUSH2 0x1357 DUP4 PUSH1 0x1A PUSH2 0x1FE0 PUSH1 0x5 DUP7 SWAP1 SHL AND OR PUSH4 0xFFFFFFFF PUSH2 0x15C5 AND JUMP JUMPDEST POP PUSH2 0x12BE DUP4 DUP3 PUSH1 0x4 PUSH4 0xFFFFFFFF PUSH2 0x15DD AND JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xDEA JUMPI PUSH2 0x1394 DUP4 PUSH1 0x1B PUSH2 0x1FE0 PUSH1 0x5 DUP7 SWAP1 SHL AND OR PUSH4 0xFFFFFFFF PUSH2 0x15C5 AND JUMP JUMPDEST POP PUSH2 0xC4B DUP4 DUP3 PUSH1 0x8 PUSH4 0xFFFFFFFF PUSH2 0x15DD AND JUMP JUMPDEST PUSH2 0x13AF PUSH2 0x1870 JUMP JUMPDEST PUSH2 0xE84 DUP4 DUP5 PUSH1 0x0 ADD MLOAD MLOAD DUP5 DUP6 MLOAD PUSH2 0x15FE JUMP JUMPDEST PUSH2 0xDEA DUP3 PUSH1 0x1F PUSH2 0x1FE0 PUSH1 0x5 DUP6 SWAP1 SHL AND OR PUSH4 0xFFFFFFFF PUSH2 0x15C5 AND JUMP JUMPDEST PUSH1 0x60 PUSH4 0x40429946 PUSH1 0xE0 SHL PUSH1 0x0 DUP1 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD PUSH1 0x1 DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0x0 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1508 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14F0 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1535 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP14 AND SWAP13 SWAP1 SWAP13 OR SWAP1 SWAP12 MSTORE POP SWAP9 SWAP10 POP POP POP POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x15CD PUSH2 0x1870 JUMP JUMPDEST PUSH2 0xE84 DUP4 DUP5 PUSH1 0x0 ADD MLOAD MLOAD DUP5 PUSH2 0x16E6 JUMP JUMPDEST PUSH2 0x15E5 PUSH2 0x1870 JUMP JUMPDEST PUSH2 0x15F6 DUP5 DUP6 PUSH1 0x0 ADD MLOAD MLOAD DUP6 DUP6 PUSH2 0x1731 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x1606 PUSH2 0x1870 JUMP JUMPDEST DUP3 MLOAD DUP3 GT ISZERO PUSH2 0x1614 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH1 0x20 ADD MLOAD DUP3 DUP6 ADD GT ISZERO PUSH2 0x163E JUMPI PUSH2 0x163E DUP6 PUSH2 0x1636 DUP8 PUSH1 0x20 ADD MLOAD DUP8 DUP7 ADD PUSH2 0x178F JUMP JUMPDEST PUSH1 0x2 MUL PUSH2 0x17A6 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 MLOAD DUP1 MLOAD DUP8 PUSH1 0x20 DUP4 ADD ADD SWAP4 POP DUP1 DUP9 DUP8 ADD GT ISZERO PUSH2 0x165D JUMPI DUP8 DUP7 ADD DUP3 MSTORE JUMPDEST POP POP POP PUSH1 0x20 DUP5 ADD JUMPDEST PUSH1 0x20 DUP5 LT PUSH2 0x16A2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1665 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP7 SWAP1 SUB PUSH2 0x100 EXP ADD SWAP1 DUP2 AND SWAP1 NOT SWAP2 SWAP1 SWAP2 AND OR SWAP1 MSTORE POP DUP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x16EE PUSH2 0x1870 JUMP JUMPDEST DUP4 PUSH1 0x20 ADD MLOAD DUP4 LT PUSH2 0x170A JUMPI PUSH2 0x170A DUP5 DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x2 MUL PUSH2 0x17A6 JUMP JUMPDEST DUP4 MLOAD DUP1 MLOAD PUSH1 0x20 DUP6 DUP4 ADD ADD DUP5 DUP2 MSTORE8 POP DUP1 DUP6 EQ ISZERO PUSH2 0x1727 JUMPI PUSH1 0x1 DUP2 ADD DUP3 MSTORE JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x1739 PUSH2 0x1870 JUMP JUMPDEST DUP5 PUSH1 0x20 ADD MLOAD DUP5 DUP4 ADD GT ISZERO PUSH2 0x1756 JUMPI PUSH2 0x1756 DUP6 DUP6 DUP5 ADD PUSH1 0x2 MUL PUSH2 0x17A6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP4 PUSH2 0x100 EXP SUB SWAP1 POP DUP6 MLOAD DUP4 DUP7 DUP3 ADD ADD DUP6 DUP4 NOT DUP3 MLOAD AND OR DUP2 MSTORE POP DUP1 MLOAD DUP5 DUP8 ADD GT ISZERO PUSH2 0x1784 JUMPI DUP4 DUP7 ADD DUP2 MSTORE JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT ISZERO PUSH2 0x17A0 JUMPI POP DUP2 PUSH2 0xE87 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 MLOAD PUSH2 0x17B2 DUP4 DUP4 PUSH2 0x1263 JUMP JUMPDEST POP PUSH2 0xC4B DUP4 DUP3 PUSH2 0x13A7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x17ED PUSH2 0x1870 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x1833 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1860 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1860 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1860 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1845 JUMP JUMPDEST POP PUSH2 0x186C SWAP3 SWAP2 POP PUSH2 0x188A JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0xEA7 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x186C JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1890 JUMP INVALID PUSH22 0x6E61626C6520746F207472616E73666572416E644361 PUSH13 0x6C20746F206F7261636C65536F PUSH22 0x726365206D75737420626520746865206F7261636C65 KECCAK256 PUSH16 0x66207468652072657175657374687474 PUSH17 0x733A2F2F6D696E2D6170692E6372797074 PUSH16 0x636F6D706172652E636F6D2F64617461 0x2F PUSH17 0x726963653F6673796D3D45544826747379 PUSH14 0x733D5553442C4555522C4A5059A1 PUSH5 0x736F6C6343 STOP MOD MOD STOP EXP ",
"sourceMap": "91:2779:56:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;91:2779:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;197:20:56;;;:::i;:::-;;;;;;;;;;;;;;;;2411:255;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2411:255:56;;;;;;;;;;;;:::i;:::-;;1727:332;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;1727:332:56;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;221:21::-;;;:::i;802:462::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;802:462:56;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;802:462:56;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;802:462:56;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;802:462:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;802:462:56;;-1:-1:-1;;802:462:56;;;-1:-1:-1;;;802:462:56;;;;;;:::i;641:157::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;641:157:56;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;641:157:56;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;641:157:56;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;641:157:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;641:157:56;;-1:-1:-1;;641:157:56;;;-1:-1:-1;641:157:56;;-1:-1:-1;;641:157:56:i;2063:207::-;;;:::i;167:25::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;167:25:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2670:198;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;2670:198:56;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;2670:198:56;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;2670:198:56;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2670:198:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;2670:198:56;;-1:-1:-1;2670:198:56;;-1:-1:-1;;;;;2670:198:56:i;1268:455::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;1268:455:56;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;1268:455:56;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;1268:455:56;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1268:455:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1268:455:56;;-1:-1:-1;;1268:455:56;;;-1:-1:-1;1268:455:56;;-1:-1:-1;;1268:455:56:i;2274:133::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2274:133:56;;;;;;;;;:::i;197:20::-;;;;:::o;2411:255::-;8743:27:4;;;;:15;:27;;;;;;;;;;8729:10;:41;8721:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8840:27;;;;:15;:27;;;;;;8833:34;;;;;;8878:30;8856:10;;8878:30;;;2611:7:56::1;2603:6;2591:10;2566:53;;;;;;;;;;-1:-1:-1::0;2625:5:56::1;:14:::0;;;;2645:6:::1;:16:::0;-1:-1:-1;2411:255:56:o;1727:332::-;1969:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1955:7;;1969:29;;;;;;:85;;;;;1891:35;;1969:85;;;;;;;;1891:35;1969:29;:85;;;2:2:-1;;;;27:1;24;17:12;2:2;1969:85:56;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1969:85:56;;;;1727:332;;;;;;:::o;221:21::-;;;;:::o;802:462::-;917:28;;:::i;:::-;970:6;;948:68;;978:9;989:26;948:21;:68::i;:::-;917:99;;1022:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:3;;:89;;:7;:89;:::i;:::-;1140:15;;;1153:1;1140:15;;;;;;;;;1117:20;;1140:15;;;;;;;;;;;;;;;;;;;;1117:38;;1171:9;1161:4;1166:1;1161:7;;;;;;;;;;;;;:19;;;;1186:32;;;;;;;;;;;;;;;;;;1213:4;1186:3;:18;;:32;;;;;:::i;:::-;1224:35;1245:3;1250:8;1224:20;:35::i;:::-;;802:462;;;;;:::o;641:157::-;727:66;758:9;769:8;787:4;727:30;:66::i;:::-;641:157;;:::o;2063:207::-;2100:24;2146:23;:21;:23::i;:::-;2211:30;;;;;;2235:4;2211:30;;;;;;2100:70;;-1:-1:-1;2184:14:56;;;;;;2199:10;;2184:14;;2211:15;;:30;;;;;;;;;;;;;;2184:14;2211:30;;;2:2:-1;;;;27:1;24;17:12;2:2;2211:30:56;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2211:30:56;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2211:30:56;2184:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2211:30;;2184:58;;;;;;;-1:-1:-1;2184:58:56;;;;2:2:-1;;;;27:1;24;17:12;2:2;2184:58:56;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2184:58:56;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2184:58:56;2176:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2063:207;:::o;167:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2670:198::-;8743:27:4;;;;:15;:27;;;;;;;;;;8729:10;:41;8721:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8840:27;;;;:15;:27;;;;;;8833:34;;;;;;8878:30;8856:10;;8878:30;;;2829:6:56::1;2800:36;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10:::0;;164:23;;139:12;;;;;98:2:::1;89:12:::0;;::::1;::::0;114::::1;36:153;;;299:10:::0;344;;263:2:::1;259:12:::0;;;::::1;254:3;250:22;246:30:::0;;311:9;::::1;295:26:::0;;::::1;340:21:::0;::::1;377:20:::0;;;::::1;365:33:::0;;2800:36:56::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;2817:10:56;;-1:-1:-1;2800:36:56::1;::::0;-1:-1:-1;;;2800:36:56::1;2842:21:::0;;::::1;::::0;:12:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;2670:198:::0;;;:::o;1268:455::-;1359:28;;:::i;:::-;1412:6;;1390:85;;1428:4;1435:39;1390:21;:85::i;:::-;1359:116;;1481:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:3;;:89;;:7;:89;:::i;:::-;1599:15;;;1612:1;1599:15;;;;;;;;;1576:20;;1599:15;;;;;;;;;;;;;;;;;;;;1576:38;;1630:9;1620:4;1625:1;1620:7;;;;;;;;;;;;;:19;;;;1645:32;;;;;;;;;;;;;;;;;;1672:4;1645:3;:18;;:32;;;;;:::i;:::-;1683:35;1704:3;1709:8;1683:20;:35::i;:::-;;1268:455;;;;:::o;2274:133::-;2354:48;2382:7;2391:10;2354:27;:48::i;1767:295:4:-;1915:24;;:::i;:::-;1947:28;;:::i;:::-;1988:69;:3;2003:7;2012:16;2030:26;1988:69;:14;:69;:::i;:::-;1981:76;1767:295;-1:-1:-1;;;;;1767:295:4:o;1988:169:3:-;2090:8;;;;:27;;2112:4;2090:27;:21;:27;:::i;:::-;2123:8;;;;:29;;2145:6;2123:29;:21;:29;:::i;:::-;1988:169;;;:::o;3500:301::-;3616:8;;;;:27;;3638:4;3616:27;:21;:27;:::i;:::-;3649:21;:4;:8;;;:19;:21::i;:::-;3681:9;3676:93;3700:7;:14;3696:1;:18;3676:93;;;3729:33;3751:7;3759:1;3751:10;;;;;;;;;;;;;;3729:4;:8;;;:21;;:33;;;;:::i;:::-;3716:3;;3676:93;;;;3774:22;:4;:8;;;:20;:22::i;2369:189:4:-;2529:6;;2474:7;;2498:55;;2529:6;;2538:4;2544:8;2498:22;:55::i;:::-;2491:62;;2369:189;;;;;:::o;5293:110::-;5393:4;;;;5293:110;;:::o;5916:171::-;9142:1;9103:27;;;:15;:27;;;;;;6025:10;;9103:41;:27;:41;9095:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6045:27:4::1;::::0;;;:15:::1;:27;::::0;;;;:37;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;5916:171::o;998:365:3:-;1147:24;;:::i;:::-;1179:49;1200:4;:8;;;365:3;1179:20;:49::i;:::-;-1:-1:-1;;1234:13:3;;;1253:39;;:20;;;:39;1298:43;;:23;;;:43;1234:13;998:365::o;2793:210:64:-;2913:55;2924:3;386:1;2954:5;2948:19;2913:10;:55::i;:::-;2974:24;:3;2991:5;2974:24;:10;:24;:::i;3007:147::-;3100:49;3127:3;433:1;3100:26;:49::i;3305:155::-;3399:56;3426:3;577:1;3399:26;:56::i;3072:488:4:-;3268:12;;3245:36;;;3262:4;3245:36;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3245:36:4;;;;;;3235:47;;;;;;;;;3288:10;;;:25;;;;-1:-1:-1;3319:26:4;;;:15;:26;;;;;;:36;;;;3245;3319;;;;;3366:29;;3235:47;;3366:29;;;3409:4;;;;:20;3430:7;3439:8;3449:19;3463:4;3449:13;:19::i;:::-;3409:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3409:60:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3409:60:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3409:60:4;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3409:60:4;3401:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3515:12;:17;;3531:1;3515:17;;;3072:488;;;;;:::o;982:395:63:-;1052:13;;:::i;:::-;1088:2;1077:8;:13;:18;1073:71;;1134:2;1123:8;:13;1117:2;:20;1105:32;;;;1073:71;-1:-1:-1;1191:12:63;;;;:23;;;1254:4;1248:11;;1266:16;;;-1:-1:-1;1289:14:63;;1331:18;;;1323:27;1310:41;;1191:12;982:395::o;685:670:64:-;822:2;813:5;:11;810:541;;834:44;:3;856:20;866:1;857:10;;;856:20;;;834:44;:15;:44;:::i;:::-;;810:541;;;903:4;894:5;:13;891:460;;917:41;:3;954:2;940:10;949:1;940:10;;;;939:17;917:41;:15;:41;:::i;:::-;-1:-1:-1;966:23:64;:3;980:5;987:1;966:23;:13;:23;:::i;891:460::-;1014:6;1005:5;:15;1002:349;;1030:41;:3;1067:2;1053:10;1062:1;1053:10;;;;1052:17;1030:41;:15;:41;:::i;:::-;-1:-1:-1;1079:23:64;:3;1093:5;1100:1;1079:23;:13;:23;:::i;1002:349::-;1127:10;1118:5;:19;1115:236;;1147:41;:3;1184:2;1170:10;1179:1;1170:10;;;;1169:17;1147:41;:15;:41;:::i;:::-;-1:-1:-1;1196:23:64;:3;1210:5;1217:1;1196:23;:13;:23;:::i;1115:236::-;1244:18;1235:5;:27;1232:119;;1272:41;:3;1309:2;1295:10;1304:1;1295:10;;;;1294:17;1272:41;:15;:41;:::i;:::-;-1:-1:-1;1321:23:64;:3;1335:5;1342:1;1321:23;:13;:23;:::i;4536:155:63:-;4613:13;;:::i;:::-;4641:45;4647:3;4652;:7;;;:14;4668:4;4674;:11;4641:5;:45::i;1359:171:64:-;1484:41;:3;1521:2;1507:10;1516:1;1507:10;;;;1506:17;1484:41;:15;:41;:::i;7564:527:4:-;7652:12;7711:29;;;719:1;663;7961:4;:7;;;7976:4;:20;;;8004:4;:23;;;8035:4;:10;;;765:1;8073:4;:8;;;:12;;;7681:405;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7681:405:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7681:405:4;;;22:32:-1;26:21;;;22:32;6:49;;7681:405:4;;;49:4:-1;25:18;;61:17;;7681:405:4;182:15:-1;7681:405:4;;;;179:29:-1;;;;160:49;;;-1:-1;7681:405:4;;-1:-1:-1;;;;;;;;;;7564:527:4;;;:::o;5851:144:63:-;5925:13;;:::i;:::-;5953:37;5964:3;5969;:7;;;:14;5985:4;5953:10;:37::i;9543:154::-;9624:13;;:::i;:::-;9652:40;9661:3;9666;:7;;;:14;9682:4;9688:3;9652:8;:40::i;:::-;9645:47;9543:154;-1:-1:-1;;;;9543:154:63:o;2691:1140::-;2786:13;;:::i;:::-;2822:4;:11;2815:3;:18;;2807:27;;12:1:-1;9;2:12;2807:27:63;2857:3;:12;;;2851:3;2845;:9;:24;2841:90;;;2879:45;2886:3;2891:28;2895:3;:12;;;2915:3;2909;:9;2891:3;:28::i;:::-;2922:1;2891:32;2879:6;:45::i;:::-;2937:9;2952:8;3046:3;3040:10;3117:6;3111:13;3233:3;3228:2;3220:6;3216:15;3212:25;3204:33;;3317:6;3311:3;3306;3302:13;3299:25;3296:2;;;3359:3;3354;3350:13;3342:6;3335:29;3296:2;-1:-1:-1;;;3396:2:63;3386:13;;3457:129;3471:2;3464:3;:9;3457:129;;3526:10;;3513:24;;3475:9;;;;;3560:2;3552:10;;;;3570:9;3457:129;;;3695:10;3744:11;;3632:21;3640:2;:8;;;3632:3;:17;:21;3740:22;;;3707:9;;3691:26;;;;3782:21;3769:35;;-1:-1:-1;3823:3:63;2691:1140;;;;;;:::o;4985:619::-;5068:13;;:::i;:::-;5100:3;:12;;;5093:3;:19;5089:69;;5122:29;5129:3;5134;:12;;;5149:1;5134:16;5122:6;:29::i;:::-;5244:3;5238:10;5315:6;5309:13;5427:2;5421:3;5413:6;5409:16;5405:25;5451:4;5445;5437:19;;5522:6;5517:3;5514:15;5511:2;;;5567:1;5559:6;5555:14;5547:6;5540:30;5511:2;-1:-1:-1;5596:3:63;;4985:619;-1:-1:-1;;;;4985:619:63:o;8650:642::-;8739:13;;:::i;:::-;8776:3;:12;;;8770:3;8764;:9;:24;8760:73;;;8798:28;8805:3;8817;8811;:9;8824:1;8810:15;8798:6;:28::i;:::-;8839:9;8864:1;8858:3;8851;:10;:14;8839:26;;8951:3;8945:10;9066:3;9060;9052:6;9048:16;9044:26;9122:4;9114;9110:9;9103:4;9097:11;9093:27;9090:37;9084:4;9077:51;;9210:6;9204:13;9198:3;9193;9189:13;9186:32;9183:2;;;9253:3;9248;9244:13;9236:6;9229:29;9183:2;-1:-1:-1;9284:3:63;;8650:642;-1:-1:-1;;;;;8650:642:63:o;1929:114::-;1979:4;1999:1;1995;:5;1991:34;;;-1:-1:-1;2017:1:63;2010:8;;1991:34;-1:-1:-1;2037:1:63;1929:114;-1:-1:-1;1929:114:63:o;1772:153::-;1863:7;;1876:19;1863:3;1886:8;1876:4;:19::i;:::-;;1901;1908:3;1913:6;1901;:19::i;91:2779:56:-;;;;;;;;;-1:-1:-1;91:2779:56;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;91:2779:56;;;-1:-1:-1;91:2779:56;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;"
},
"methodIdentifiers": {
"addExternalRequest(address,bytes32)": "e8d5359d",
"cancelRequest(address,bytes32,uint256,bytes4,uint256)": "5591a608",
"currentPrice()": "9d1b464a",
"first()": "3df4ddf4",
"fulfillBytes(bytes32,bytes)": "c2fb8523",
"fulfillMultipleParameters(bytes32,bytes32,bytes32)": "53389072",
"requestEthereumPrice(string,uint256)": "83db5cbc",
"requestEthereumPriceByCallback(string,uint256,address)": "74961d4d",
"requestMultipleParameters(string,uint256)": "e89855ba",
"second()": "5a8ac02d",
"withdrawLink()": "8dc654a2"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.6.6+commit.6c089d02\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_link\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oracle\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_specId\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"ChainlinkCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"ChainlinkFulfilled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"ChainlinkRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"requestId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"price\",\"type\":\"bytes\"}],\"name\":\"RequestFulfilled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"requestId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"first\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"second\",\"type\":\"bytes32\"}],\"name\":\"RequestMultipleFulfilled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oracle\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"}],\"name\":\"addExternalRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oracle\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"_callbackFunctionId\",\"type\":\"bytes4\"},{\"internalType\":\"uint256\",\"name\":\"_expiration\",\"type\":\"uint256\"}],\"name\":\"cancelRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentPrice\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"first\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_price\",\"type\":\"bytes\"}],\"name\":\"fulfillBytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_first\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_second\",\"type\":\"bytes32\"}],\"name\":\"fulfillMultipleParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_currency\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"}],\"name\":\"requestEthereumPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_currency\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_callback\",\"type\":\"address\"}],\"name\":\"requestEthereumPriceByCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_currency\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"}],\"name\":\"requestMultipleParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"second\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawLink\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/tests/MultiWordConsumer.sol\":\"MultiWordConsumer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/Chainlink.sol\":{\"keccak256\":\"0x7bef34fd97f611103c6113025e3d6af755f326069767e72266698f64258e62b6\",\"urls\":[\"bzz-raw://82125916319b872093aa8599d2c00bd07d363386a74a4d0268c6edf25c366f82\",\"dweb:/ipfs/QmXTnVy1XEw387NduvHHFQNmnzYTwFUhVz95kRvRrcwdHd\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/ChainlinkClient.sol\":{\"keccak256\":\"0x9f8883b8b5b76bba151e5f30d4c353b8a3f15ee3d97117deee4cccd91fe8640f\",\"urls\":[\"bzz-raw://ee9b132779ac24df4f8a5e45dfc256acc70eb5e43f715de36593e488f20a44ff\",\"dweb:/ipfs/QmagJ1htVpP2ZYLAdHEpSEMx1Xd3csbUHAhLctryVDsNFg\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/interfaces/ChainlinkRequestInterface.sol\":{\"keccak256\":\"0xe513c0f60edf13da7d82625489cf2008c7b66170f3b1ed1606b84c73f95b17ad\",\"urls\":[\"bzz-raw://78e083ef252b80bb63a5aa126bc7283cd9b88767dfdf0190d46802bc32756ecf\",\"dweb:/ipfs/QmdTyEQwX5ecoXR1rBh8DLDJpCYVDM85JjjR2sEJdE9wAA\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/interfaces/ENSInterface.sol\":{\"keccak256\":\"0xdef864af6e516477773ea246b73531b1836de5bea4ac1cfd8be6e7f4b3f3c3fd\",\"urls\":[\"bzz-raw://ad3346f5a393cd62d8de678a77d8dc323d8f9e21f0aaa504d0d0b990c8b61477\",\"dweb:/ipfs/QmQ2n8329Fzb7Zbzk5wqYvAfKJ9QPwTdCUmm9zUqhL67a1\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/interfaces/LinkTokenInterface.sol\":{\"keccak256\":\"0xe245a7be950c94d87bb775ae9ee9fbd693fbe2987778e6ce0b04605ea44b7b68\",\"urls\":[\"bzz-raw://bd2c3165d949fc66fe407b96eb3dc2092c7e800f4c073b411bf7b96de3e156c9\",\"dweb:/ipfs/QmcfJhR1Np4GsLWnww2Duqks2wEzYk8VDTvCAYy7MisG1r\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/interfaces/PointerInterface.sol\":{\"keccak256\":\"0x08aed19c3bef1ae2d90fc0d9d28a497fd7f312991ed08fedfe545de6b9a476e4\",\"urls\":[\"bzz-raw://b2e7b4acfbd4cfbd4c3e266011955954ec0f5a2323647e81b936c66cb35e1b5e\",\"dweb:/ipfs/QmXVrpdo76r2WhxE7gJPj3dGycZYKKvK39VNVaB7HyhAbT\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/tests/MultiWordConsumer.sol\":{\"keccak256\":\"0xc690089c2dc560fdbf88746d3c4327f5ac76f1815ee2f30a2320d1853562cc02\",\"urls\":[\"bzz-raw://5e3cdc07924537a174a0a0ea3f2235269cda51de807f5ae706881834efd37bf8\",\"dweb:/ipfs/QmUR9HkUD31Wqkf9Guwq4xaUDi5CmnUBw9AoWS1gJuyPKw\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/vendor/BufferChainlink.sol\":{\"keccak256\":\"0x14f13139229a2fef8f705f29f91de0bc81bcd5070ec75b4bd3fd82c1536ca685\",\"urls\":[\"bzz-raw://9a403d7f17b316c7b8837a25df0563de2a1c3121b7cd43473abce8ce6742bd29\",\"dweb:/ipfs/QmWZYi4xJGjPt1pEM7mS7XsA1eF2zpcxiiuGHuiTndXHo7\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/vendor/CBORChainlink.sol\":{\"keccak256\":\"0xe7c6e4290ac2a41a138e6bd89d89a2779f66847a5ee6fb5a6f2a3386e5ce589d\",\"urls\":[\"bzz-raw://1eb0e7821c4963b125b47c93e31cd6e073d2b87550651054fc526e63915d92ab\",\"dweb:/ipfs/QmVJq2sNTzX4Hfyway8JiY4RoQw4vQRSbzJWbsC7JsiyUs\"]},\"/home/thomas/workspace/chainlink/evm-contracts/src/v0.6/vendor/ENSResolver.sol\":{\"keccak256\":\"0xfd992937d215ad669f69e91fefbe62cad8973ae329b4e810ca9b26a1ae0b6bb7\",\"urls\":[\"bzz-raw://afb189e69fb705795bf41dea9ff20bab191164fc4876803168372f9bf1a1a0f1\",\"dweb:/ipfs/QmUBbNkFiJh9BrPepNVYMpxnEk1a5xqun8VT6Zb2jC3FtV\"]}},\"version\":1}",
"userdoc": {
"methods": {}
}
},
"sources": {
"tests/MultiWordConsumer.sol": {
"id": 56
},
"ChainlinkClient.sol": {
"id": 4
},
"Chainlink.sol": {
"id": 3
},
"vendor/CBORChainlink.sol": {
"id": 64
},
"vendor/BufferChainlink.sol": {
"id": 63
},
"interfaces/ENSInterface.sol": {
"id": 34
},
"interfaces/LinkTokenInterface.sol": {
"id": 36
},
"interfaces/ChainlinkRequestInterface.sol": {
"id": 33
},
"interfaces/PointerInterface.sol": {
"id": 38
},
"vendor/ENSResolver.sol": {
"id": 65
}
},
"sourceCodes": {
"tests/MultiWordConsumer.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\nimport \"../ChainlinkClient.sol\";\n\ncontract MultiWordConsumer is ChainlinkClient{\n bytes32 internal specId;\n bytes public currentPrice;\n\n bytes32 public first;\n bytes32 public second;\n\n event RequestFulfilled(\n bytes32 indexed requestId, // User-defined ID\n bytes indexed price\n );\n\n event RequestMultipleFulfilled(\n bytes32 indexed requestId,\n bytes32 indexed first,\n bytes32 indexed second\n );\n\n constructor(address _link, address _oracle, bytes32 _specId) public {\n setChainlinkToken(_link);\n setChainlinkOracle(_oracle);\n specId = _specId;\n }\n\n function requestEthereumPrice(string memory _currency, uint256 _payment) public {\n requestEthereumPriceByCallback(_currency, _payment, address(this));\n }\n\n function requestEthereumPriceByCallback(string memory _currency, uint256 _payment, address _callback) public {\n Chainlink.Request memory req = buildChainlinkRequest(specId, _callback, this.fulfillBytes.selector);\n req.add(\"get\", \"https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD,EUR,JPY\");\n string[] memory path = new string[](1);\n path[0] = _currency;\n req.addStringArray(\"path\", path);\n sendChainlinkRequest(req, _payment);\n }\n\n function requestMultipleParameters(string memory _currency, uint256 _payment) public {\n Chainlink.Request memory req = buildChainlinkRequest(specId, address(this), this.fulfillMultipleParameters.selector);\n req.add(\"get\", \"https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD,EUR,JPY\");\n string[] memory path = new string[](1);\n path[0] = _currency;\n req.addStringArray(\"path\", path);\n sendChainlinkRequest(req, _payment);\n }\n\n function cancelRequest(\n address _oracle,\n bytes32 _requestId,\n uint256 _payment,\n bytes4 _callbackFunctionId,\n uint256 _expiration\n ) public {\n ChainlinkRequestInterface requested = ChainlinkRequestInterface(_oracle);\n requested.cancelOracleRequest(_requestId, _payment, _callbackFunctionId, _expiration);\n }\n\n function withdrawLink() public {\n LinkTokenInterface _link = LinkTokenInterface(chainlinkTokenAddress());\n require(_link.transfer(msg.sender, _link.balanceOf(address(this))), \"Unable to transfer\");\n }\n\n function addExternalRequest(address _oracle, bytes32 _requestId) external {\n addChainlinkExternalRequest(_oracle, _requestId);\n }\n\n function fulfillMultipleParameters(bytes32 _requestId, bytes32 _first, bytes32 _second)\n public\n recordChainlinkFulfillment(_requestId)\n {\n emit RequestMultipleFulfilled(_requestId, _first, _second);\n first = _first;\n second = _second;\n }\n\n function fulfillBytes(bytes32 _requestId, bytes memory _price)\n public\n recordChainlinkFulfillment(_requestId)\n {\n emit RequestFulfilled(_requestId, _price);\n currentPrice = _price;\n }\n}",
"ChainlinkClient.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\nimport \"./Chainlink.sol\";\nimport \"./interfaces/ENSInterface.sol\";\nimport \"./interfaces/LinkTokenInterface.sol\";\nimport \"./interfaces/ChainlinkRequestInterface.sol\";\nimport \"./interfaces/PointerInterface.sol\";\nimport { ENSResolver as ENSResolver_Chainlink } from \"./vendor/ENSResolver.sol\";\n\n/**\n * @title The ChainlinkClient contract\n * @notice Contract writers can inherit this contract in order to create requests for the\n * Chainlink network\n */\ncontract ChainlinkClient {\n using Chainlink for Chainlink.Request;\n\n uint256 constant internal LINK = 10**18;\n uint256 constant private AMOUNT_OVERRIDE = 0;\n address constant private SENDER_OVERRIDE = address(0);\n uint256 constant private ARGS_VERSION = 1;\n bytes32 constant private ENS_TOKEN_SUBNAME = keccak256(\"link\");\n bytes32 constant private ENS_ORACLE_SUBNAME = keccak256(\"oracle\");\n address constant private LINK_TOKEN_POINTER = 0xC89bD4E1632D3A43CB03AAAd5262cbe4038Bc571;\n\n ENSInterface private ens;\n bytes32 private ensNode;\n LinkTokenInterface private link;\n ChainlinkRequestInterface private oracle;\n uint256 private requestCount = 1;\n mapping(bytes32 => address) private pendingRequests;\n\n event ChainlinkRequested(bytes32 indexed id);\n event ChainlinkFulfilled(bytes32 indexed id);\n event ChainlinkCancelled(bytes32 indexed id);\n\n /**\n * @notice Creates a request that can hold additional parameters\n * @param _specId The Job Specification ID that the request will be created for\n * @param _callbackAddress The callback address that the response will be sent to\n * @param _callbackFunctionSignature The callback function signature to use for the callback address\n * @return A Chainlink Request struct in memory\n */\n function buildChainlinkRequest(\n bytes32 _specId,\n address _callbackAddress,\n bytes4 _callbackFunctionSignature\n ) internal pure returns (Chainlink.Request memory) {\n Chainlink.Request memory req;\n return req.initialize(_specId, _callbackAddress, _callbackFunctionSignature);\n }\n\n /**\n * @notice Creates a Chainlink request to the stored oracle address\n * @dev Calls `chainlinkRequestTo` with the stored oracle address\n * @param _req The initialized Chainlink Request\n * @param _payment The amount of LINK to send for the request\n * @return requestId The request ID\n */\n function sendChainlinkRequest(Chainlink.Request memory _req, uint256 _payment)\n internal\n returns (bytes32)\n {\n return sendChainlinkRequestTo(address(oracle), _req, _payment);\n }\n\n /**\n * @notice Creates a Chainlink request to the specified oracle address\n * @dev Generates and stores a request ID, increments the local nonce, and uses `transferAndCall` to\n * send LINK which creates a request on the target oracle contract.\n * Emits ChainlinkRequested event.\n * @param _oracle The address of the oracle for the request\n * @param _req The initialized Chainlink Request\n * @param _payment The amount of LINK to send for the request\n * @return requestId The request ID\n */\n function sendChainlinkRequestTo(address _oracle, Chainlink.Request memory _req, uint256 _payment)\n internal\n returns (bytes32 requestId)\n {\n requestId = keccak256(abi.encodePacked(this, requestCount));\n _req.nonce = requestCount;\n pendingRequests[requestId] = _oracle;\n emit ChainlinkRequested(requestId);\n require(link.transferAndCall(_oracle, _payment, encodeRequest(_req)), \"unable to transferAndCall to oracle\");\n requestCount += 1;\n\n return requestId;\n }\n\n /**\n * @notice Allows a request to be cancelled if it has not been fulfilled\n * @dev Requires keeping track of the expiration value emitted from the oracle contract.\n * Deletes the request from the `pendingRequests` mapping.\n * Emits ChainlinkCancelled event.\n * @param _requestId The request ID\n * @param _payment The amount of LINK sent for the request\n * @param _callbackFunc The callback function specified for the request\n * @param _expiration The time of the expiration for the request\n */\n function cancelChainlinkRequest(\n bytes32 _requestId,\n uint256 _payment,\n bytes4 _callbackFunc,\n uint256 _expiration\n )\n internal\n {\n ChainlinkRequestInterface requested = ChainlinkRequestInterface(pendingRequests[_requestId]);\n delete pendingRequests[_requestId];\n emit ChainlinkCancelled(_requestId);\n requested.cancelOracleRequest(_requestId, _payment, _callbackFunc, _expiration);\n }\n\n /**\n * @notice Sets the stored oracle address\n * @param _oracle The address of the oracle contract\n */\n function setChainlinkOracle(address _oracle) internal {\n oracle = ChainlinkRequestInterface(_oracle);\n }\n\n /**\n * @notice Sets the LINK token address\n * @param _link The address of the LINK token contract\n */\n function setChainlinkToken(address _link) internal {\n link = LinkTokenInterface(_link);\n }\n\n /**\n * @notice Sets the Chainlink token address for the public\n * network as given by the Pointer contract\n */\n function setPublicChainlinkToken() internal {\n setChainlinkToken(PointerInterface(LINK_TOKEN_POINTER).getAddress());\n }\n\n /**\n * @notice Retrieves the stored address of the LINK token\n * @return The address of the LINK token\n */\n function chainlinkTokenAddress()\n internal\n view\n returns (address)\n {\n return address(link);\n }\n\n /**\n * @notice Retrieves the stored address of the oracle contract\n * @return The address of the oracle contract\n */\n function chainlinkOracleAddress()\n internal\n view\n returns (address)\n {\n return address(oracle);\n }\n\n /**\n * @notice Allows for a request which was created on another contract to be fulfilled\n * on this contract\n * @param _oracle The address of the oracle contract that will fulfill the request\n * @param _requestId The request ID used for the response\n */\n function addChainlinkExternalRequest(address _oracle, bytes32 _requestId)\n internal\n notPendingRequest(_requestId)\n {\n pendingRequests[_requestId] = _oracle;\n }\n\n /**\n * @notice Sets the stored oracle and LINK token contracts with the addresses resolved by ENS\n * @dev Accounts for subnodes having different resolvers\n * @param _ens The address of the ENS contract\n * @param _node The ENS node hash\n */\n function useChainlinkWithENS(address _ens, bytes32 _node)\n internal\n {\n ens = ENSInterface(_ens);\n ensNode = _node;\n bytes32 linkSubnode = keccak256(abi.encodePacked(ensNode, ENS_TOKEN_SUBNAME));\n ENSResolver_Chainlink resolver = ENSResolver_Chainlink(ens.resolver(linkSubnode));\n setChainlinkToken(resolver.addr(linkSubnode));\n updateChainlinkOracleWithENS();\n }\n\n /**\n * @notice Sets the stored oracle contract with the address resolved by ENS\n * @dev This may be called on its own as long as `useChainlinkWithENS` has been called previously\n */\n function updateChainlinkOracleWithENS()\n internal\n {\n bytes32 oracleSubnode = keccak256(abi.encodePacked(ensNode, ENS_ORACLE_SUBNAME));\n ENSResolver_Chainlink resolver = ENSResolver_Chainlink(ens.resolver(oracleSubnode));\n setChainlinkOracle(resolver.addr(oracleSubnode));\n }\n\n /**\n * @notice Encodes the request to be sent to the oracle contract\n * @dev The Chainlink node expects values to be in order for the request to be picked up. Order of types\n * will be validated in the oracle contract.\n * @param _req The initialized Chainlink Request\n * @return The bytes payload for the `transferAndCall` method\n */\n function encodeRequest(Chainlink.Request memory _req)\n private\n view\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n oracle.oracleRequest.selector,\n SENDER_OVERRIDE, // Sender value - overridden by onTokenTransfer by the requesting contract's address\n AMOUNT_OVERRIDE, // Amount value - overridden by onTokenTransfer by the actual amount of LINK sent\n _req.id,\n _req.callbackAddress,\n _req.callbackFunctionId,\n _req.nonce,\n ARGS_VERSION,\n _req.buf.buf);\n }\n\n /**\n * @notice Ensures that the fulfillment is valid for this contract\n * @dev Use if the contract developer prefers methods instead of modifiers for validation\n * @param _requestId The request ID for fulfillment\n */\n function validateChainlinkCallback(bytes32 _requestId)\n internal\n recordChainlinkFulfillment(_requestId)\n // solhint-disable-next-line no-empty-blocks\n {}\n\n /**\n * @dev Reverts if the sender is not the oracle of the request.\n * Emits ChainlinkFulfilled event.\n * @param _requestId The request ID for fulfillment\n */\n modifier recordChainlinkFulfillment(bytes32 _requestId) {\n require(msg.sender == pendingRequests[_requestId],\n \"Source must be the oracle of the request\");\n delete pendingRequests[_requestId];\n emit ChainlinkFulfilled(_requestId);\n _;\n }\n\n /**\n * @dev Reverts if the request is already pending\n * @param _requestId The request ID for fulfillment\n */\n modifier notPendingRequest(bytes32 _requestId) {\n require(pendingRequests[_requestId] == address(0), \"Request is already pending\");\n _;\n }\n}\n",
"Chainlink.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\nimport { CBORChainlink } from \"./vendor/CBORChainlink.sol\";\nimport { BufferChainlink } from \"./vendor/BufferChainlink.sol\";\n\n/**\n * @title Library for common Chainlink functions\n * @dev Uses imported CBOR library for encoding to buffer\n */\nlibrary Chainlink {\n uint256 internal constant defaultBufferSize = 256; // solhint-disable-line const-name-snakecase\n\n using CBORChainlink for BufferChainlink.buffer;\n\n struct Request {\n bytes32 id;\n address callbackAddress;\n bytes4 callbackFunctionId;\n uint256 nonce;\n BufferChainlink.buffer buf;\n }\n\n /**\n * @notice Initializes a Chainlink request\n * @dev Sets the ID, callback address, and callback function signature on the request\n * @param self The uninitialized request\n * @param _id The Job Specification ID\n * @param _callbackAddress The callback address\n * @param _callbackFunction The callback function signature\n * @return The initialized request\n */\n function initialize(\n Request memory self,\n bytes32 _id,\n address _callbackAddress,\n bytes4 _callbackFunction\n ) internal pure returns (Chainlink.Request memory) {\n BufferChainlink.init(self.buf, defaultBufferSize);\n self.id = _id;\n self.callbackAddress = _callbackAddress;\n self.callbackFunctionId = _callbackFunction;\n return self;\n }\n\n /**\n * @notice Sets the data for the buffer without encoding CBOR on-chain\n * @dev CBOR can be closed with curly-brackets {} or they can be left off\n * @param self The initialized request\n * @param _data The CBOR data\n */\n function setBuffer(Request memory self, bytes memory _data)\n internal pure\n {\n BufferChainlink.init(self.buf, _data.length);\n BufferChainlink.append(self.buf, _data);\n }\n\n /**\n * @notice Adds a string value to the request with a given key name\n * @param self The initialized request\n * @param _key The name of the key\n * @param _value The string value to add\n */\n function add(Request memory self, string memory _key, string memory _value)\n internal pure\n {\n self.buf.encodeString(_key);\n self.buf.encodeString(_value);\n }\n\n /**\n * @notice Adds a bytes value to the request with a given key name\n * @param self The initialized request\n * @param _key The name of the key\n * @param _value The bytes value to add\n */\n function addBytes(Request memory self, string memory _key, bytes memory _value)\n internal pure\n {\n self.buf.encodeString(_key);\n self.buf.encodeBytes(_value);\n }\n\n /**\n * @notice Adds a int256 value to the request with a given key name\n * @param self The initialized request\n * @param _key The name of the key\n * @param _value The int256 value to add\n */\n function addInt(Request memory self, string memory _key, int256 _value)\n internal pure\n {\n self.buf.encodeString(_key);\n self.buf.encodeInt(_value);\n }\n\n /**\n * @notice Adds a uint256 value to the request with a given key name\n * @param self The initialized request\n * @param _key The name of the key\n * @param _value The uint256 value to add\n */\n function addUint(Request memory self, string memory _key, uint256 _value)\n internal pure\n {\n self.buf.encodeString(_key);\n self.buf.encodeUInt(_value);\n }\n\n /**\n * @notice Adds an array of strings to the request with a given key name\n * @param self The initialized request\n * @param _key The name of the key\n * @param _values The array of string values to add\n */\n function addStringArray(Request memory self, string memory _key, string[] memory _values)\n internal pure\n {\n self.buf.encodeString(_key);\n self.buf.startArray();\n for (uint256 i = 0; i < _values.length; i++) {\n self.buf.encodeString(_values[i]);\n }\n self.buf.endSequence();\n }\n}\n",
"vendor/CBORChainlink.sol": "// SPDX-License-Identifier: MIT\npragma solidity >= 0.4.19;\n\nimport { BufferChainlink } from \"./BufferChainlink.sol\";\n\nlibrary CBORChainlink {\n using BufferChainlink for BufferChainlink.buffer;\n\n uint8 private constant MAJOR_TYPE_INT = 0;\n uint8 private constant MAJOR_TYPE_NEGATIVE_INT = 1;\n uint8 private constant MAJOR_TYPE_BYTES = 2;\n uint8 private constant MAJOR_TYPE_STRING = 3;\n uint8 private constant MAJOR_TYPE_ARRAY = 4;\n uint8 private constant MAJOR_TYPE_MAP = 5;\n uint8 private constant MAJOR_TYPE_TAG = 6;\n uint8 private constant MAJOR_TYPE_CONTENT_FREE = 7;\n\n uint8 private constant TAG_TYPE_BIGNUM = 2;\n uint8 private constant TAG_TYPE_NEGATIVE_BIGNUM = 3;\n\n function encodeType(\n BufferChainlink.buffer memory buf,\n uint8 major,\n uint value\n )\n private\n pure\n {\n if(value <= 23) {\n buf.appendUint8(uint8((major << 5) | value));\n } else if(value <= 0xFF) {\n buf.appendUint8(uint8((major << 5) | 24));\n buf.appendInt(value, 1);\n } else if(value <= 0xFFFF) {\n buf.appendUint8(uint8((major << 5) | 25));\n buf.appendInt(value, 2);\n } else if(value <= 0xFFFFFFFF) {\n buf.appendUint8(uint8((major << 5) | 26));\n buf.appendInt(value, 4);\n } else if(value <= 0xFFFFFFFFFFFFFFFF) {\n buf.appendUint8(uint8((major << 5) | 27));\n buf.appendInt(value, 8);\n }\n }\n\n function encodeIndefiniteLengthType(\n BufferChainlink.buffer memory buf,\n uint8 major\n )\n private\n pure\n {\n buf.appendUint8(uint8((major << 5) | 31));\n }\n\n function encodeUInt(\n BufferChainlink.buffer memory buf,\n uint value\n )\n internal\n pure\n {\n encodeType(buf, MAJOR_TYPE_INT, value);\n }\n\n function encodeInt(\n BufferChainlink.buffer memory buf,\n int value\n )\n internal\n pure\n {\n if(value < -0x10000000000000000) {\n encodeSignedBigNum(buf, value);\n } else if(value > 0xFFFFFFFFFFFFFFFF) {\n encodeBigNum(buf, value);\n } else if(value >= 0) {\n encodeType(buf, MAJOR_TYPE_INT, uint(value));\n } else {\n encodeType(buf, MAJOR_TYPE_NEGATIVE_INT, uint(-1 - value));\n }\n }\n\n function encodeBytes(\n BufferChainlink.buffer memory buf,\n bytes memory value\n )\n internal\n pure\n {\n encodeType(buf, MAJOR_TYPE_BYTES, value.length);\n buf.append(value);\n }\n\n function encodeBigNum(\n BufferChainlink.buffer memory buf,\n int value\n )\n internal\n pure\n {\n buf.appendUint8(uint8((MAJOR_TYPE_TAG << 5) | TAG_TYPE_BIGNUM));\n encodeBytes(buf, abi.encode(uint(value)));\n }\n\n function encodeSignedBigNum(\n BufferChainlink.buffer memory buf,\n int input\n )\n internal\n pure\n {\n buf.appendUint8(uint8((MAJOR_TYPE_TAG << 5) | TAG_TYPE_NEGATIVE_BIGNUM));\n encodeBytes(buf, abi.encode(uint(-1 - input)));\n }\n\n function encodeString(\n BufferChainlink.buffer memory buf,\n string memory value\n )\n internal\n pure\n {\n encodeType(buf, MAJOR_TYPE_STRING, bytes(value).length);\n buf.append(bytes(value));\n }\n\n function startArray(\n BufferChainlink.buffer memory buf\n )\n internal\n pure\n {\n encodeIndefiniteLengthType(buf, MAJOR_TYPE_ARRAY);\n }\n\n function startMap(\n BufferChainlink.buffer memory buf\n )\n internal\n pure\n {\n encodeIndefiniteLengthType(buf, MAJOR_TYPE_MAP);\n }\n\n function endSequence(\n BufferChainlink.buffer memory buf\n )\n internal\n pure\n {\n encodeIndefiniteLengthType(buf, MAJOR_TYPE_CONTENT_FREE);\n }\n}\n",
"vendor/BufferChainlink.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\n/**\n* @dev A library for working with mutable byte buffers in Solidity.\n*\n* Byte buffers are mutable and expandable, and provide a variety of primitives\n* for writing to them. At any time you can fetch a bytes object containing the\n* current contents of the buffer. The bytes object should not be stored between\n* operations, as it may change due to resizing of the buffer.\n*/\nlibrary BufferChainlink {\n /**\n * @dev Represents a mutable buffer. Buffers have a current value (buf) and\n * a capacity. The capacity may be longer than the current value, in\n * which case it can be extended without the need to allocate more memory.\n */\n struct buffer {\n bytes buf;\n uint capacity;\n }\n\n /**\n * @dev Initializes a buffer with an initial capacity.\n * @param buf The buffer to initialize.\n * @param capacity The number of bytes of space to allocate the buffer.\n * @return The buffer, for chaining.\n */\n function init(buffer memory buf, uint capacity) internal pure returns(buffer memory) {\n if (capacity % 32 != 0) {\n capacity += 32 - (capacity % 32);\n }\n // Allocate space for the buffer data\n buf.capacity = capacity;\n assembly {\n let ptr := mload(0x40)\n mstore(buf, ptr)\n mstore(ptr, 0)\n mstore(0x40, add(32, add(ptr, capacity)))\n }\n return buf;\n }\n\n /**\n * @dev Initializes a new buffer from an existing bytes object.\n * Changes to the buffer may mutate the original value.\n * @param b The bytes object to initialize the buffer with.\n * @return A new buffer.\n */\n function fromBytes(bytes memory b) internal pure returns(buffer memory) {\n buffer memory buf;\n buf.buf = b;\n buf.capacity = b.length;\n return buf;\n }\n\n function resize(buffer memory buf, uint capacity) private pure {\n bytes memory oldbuf = buf.buf;\n init(buf, capacity);\n append(buf, oldbuf);\n }\n\n function max(uint a, uint b) private pure returns(uint) {\n if (a > b) {\n return a;\n }\n return b;\n }\n\n /**\n * @dev Sets buffer length to 0.\n * @param buf The buffer to truncate.\n * @return The original buffer, for chaining..\n */\n function truncate(buffer memory buf) internal pure returns (buffer memory) {\n assembly {\n let bufptr := mload(buf)\n mstore(bufptr, 0)\n }\n return buf;\n }\n\n /**\n * @dev Writes a byte string to a buffer. Resizes if doing so would exceed\n * the capacity of the buffer.\n * @param buf The buffer to append to.\n * @param off The start offset to write to.\n * @param data The data to append.\n * @param len The number of bytes to copy.\n * @return The original buffer, for chaining.\n */\n function write(buffer memory buf, uint off, bytes memory data, uint len) internal pure returns(buffer memory) {\n require(len <= data.length);\n\n if (off + len > buf.capacity) {\n resize(buf, max(buf.capacity, len + off) * 2);\n }\n\n uint dest;\n uint src;\n assembly {\n // Memory address of the buffer data\n let bufptr := mload(buf)\n // Length of existing buffer data\n let buflen := mload(bufptr)\n // Start address = buffer address + offset + sizeof(buffer length)\n dest := add(add(bufptr, 32), off)\n // Update buffer length if we're extending it\n if gt(add(len, off), buflen) {\n mstore(bufptr, add(len, off))\n }\n src := add(data, 32)\n }\n\n // Copy word-length chunks while possible\n for (; len >= 32; len -= 32) {\n assembly {\n mstore(dest, mload(src))\n }\n dest += 32;\n src += 32;\n }\n\n // Copy remaining bytes\n uint mask = 256 ** (32 - len) - 1;\n assembly {\n let srcpart := and(mload(src), not(mask))\n let destpart := and(mload(dest), mask)\n mstore(dest, or(destpart, srcpart))\n }\n\n return buf;\n }\n\n /**\n * @dev Appends a byte string to a buffer. Resizes if doing so would exceed\n * the capacity of the buffer.\n * @param buf The buffer to append to.\n * @param data The data to append.\n * @param len The number of bytes to copy.\n * @return The original buffer, for chaining.\n */\n function append(buffer memory buf, bytes memory data, uint len) internal pure returns (buffer memory) {\n return write(buf, buf.buf.length, data, len);\n }\n\n /**\n * @dev Appends a byte string to a buffer. Resizes if doing so would exceed\n * the capacity of the buffer.\n * @param buf The buffer to append to.\n * @param data The data to append.\n * @return The original buffer, for chaining.\n */\n function append(buffer memory buf, bytes memory data) internal pure returns (buffer memory) {\n return write(buf, buf.buf.length, data, data.length);\n }\n\n /**\n * @dev Writes a byte to the buffer. Resizes if doing so would exceed the\n * capacity of the buffer.\n * @param buf The buffer to append to.\n * @param off The offset to write the byte at.\n * @param data The data to append.\n * @return The original buffer, for chaining.\n */\n function writeUint8(buffer memory buf, uint off, uint8 data) internal pure returns(buffer memory) {\n if (off >= buf.capacity) {\n resize(buf, buf.capacity * 2);\n }\n\n assembly {\n // Memory address of the buffer data\n let bufptr := mload(buf)\n // Length of existing buffer data\n let buflen := mload(bufptr)\n // Address = buffer address + sizeof(buffer length) + off\n let dest := add(add(bufptr, off), 32)\n mstore8(dest, data)\n // Update buffer length if we extended it\n if eq(off, buflen) {\n mstore(bufptr, add(buflen, 1))\n }\n }\n return buf;\n }\n\n /**\n * @dev Appends a byte to the buffer. Resizes if doing so would exceed the\n * capacity of the buffer.\n * @param buf The buffer to append to.\n * @param data The data to append.\n * @return The original buffer, for chaining.\n */\n function appendUint8(buffer memory buf, uint8 data) internal pure returns(buffer memory) {\n return writeUint8(buf, buf.buf.length, data);\n }\n\n /**\n * @dev Writes up to 32 bytes to the buffer. Resizes if doing so would\n * exceed the capacity of the buffer.\n * @param buf The buffer to append to.\n * @param off The offset to write at.\n * @param data The data to append.\n * @param len The number of bytes to write (left-aligned).\n * @return The original buffer, for chaining.\n */\n function write(buffer memory buf, uint off, bytes32 data, uint len) private pure returns(buffer memory) {\n if (len + off > buf.capacity) {\n resize(buf, (len + off) * 2);\n }\n\n uint mask = 256 ** len - 1;\n // Right-align data\n data = data >> (8 * (32 - len));\n assembly {\n // Memory address of the buffer data\n let bufptr := mload(buf)\n // Address = buffer address + sizeof(buffer length) + off + len\n let dest := add(add(bufptr, off), len)\n mstore(dest, or(and(mload(dest), not(mask)), data))\n // Update buffer length if we extended it\n if gt(add(off, len), mload(bufptr)) {\n mstore(bufptr, add(off, len))\n }\n }\n return buf;\n }\n\n /**\n * @dev Writes a bytes20 to the buffer. Resizes if doing so would exceed the\n * capacity of the buffer.\n * @param buf The buffer to append to.\n * @param off The offset to write at.\n * @param data The data to append.\n * @return The original buffer, for chaining.\n */\n function writeBytes20(buffer memory buf, uint off, bytes20 data) internal pure returns (buffer memory) {\n return write(buf, off, bytes32(data), 20);\n }\n\n /**\n * @dev Appends a bytes20 to the buffer. Resizes if doing so would exceed\n * the capacity of the buffer.\n * @param buf The buffer to append to.\n * @param data The data to append.\n * @return The original buffer, for chhaining.\n */\n function appendBytes20(buffer memory buf, bytes20 data) internal pure returns (buffer memory) {\n return write(buf, buf.buf.length, bytes32(data), 20);\n }\n\n /**\n * @dev Appends a bytes32 to the buffer. Resizes if doing so would exceed\n * the capacity of the buffer.\n * @param buf The buffer to append to.\n * @param data The data to append.\n * @return The original buffer, for chaining.\n */\n function appendBytes32(buffer memory buf, bytes32 data) internal pure returns (buffer memory) {\n return write(buf, buf.buf.length, data, 32);\n }\n\n /**\n * @dev Writes an integer to the buffer. Resizes if doing so would exceed\n * the capacity of the buffer.\n * @param buf The buffer to append to.\n * @param off The offset to write at.\n * @param data The data to append.\n * @param len The number of bytes to write (right-aligned).\n * @return The original buffer, for chaining.\n */\n function writeInt(buffer memory buf, uint off, uint data, uint len) private pure returns(buffer memory) {\n if (len + off > buf.capacity) {\n resize(buf, (len + off) * 2);\n }\n\n uint mask = 256 ** len - 1;\n assembly {\n // Memory address of the buffer data\n let bufptr := mload(buf)\n // Address = buffer address + off + sizeof(buffer length) + len\n let dest := add(add(bufptr, off), len)\n mstore(dest, or(and(mload(dest), not(mask)), data))\n // Update buffer length if we extended it\n if gt(add(off, len), mload(bufptr)) {\n mstore(bufptr, add(off, len))\n }\n }\n return buf;\n }\n\n /**\n * @dev Appends a byte to the end of the buffer. Resizes if doing so would\n * exceed the capacity of the buffer.\n * @param buf The buffer to append to.\n * @param data The data to append.\n * @return The original buffer.\n */\n function appendInt(buffer memory buf, uint data, uint len) internal pure returns(buffer memory) {\n return writeInt(buf, buf.buf.length, data, len);\n }\n}\n",
"interfaces/ENSInterface.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\ninterface ENSInterface {\n\n // Logged when the owner of a node assigns a new owner to a subnode.\n event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner);\n\n // Logged when the owner of a node transfers ownership to a new account.\n event Transfer(bytes32 indexed node, address owner);\n\n // Logged when the resolver for a node changes.\n event NewResolver(bytes32 indexed node, address resolver);\n\n // Logged when the TTL of a node changes\n event NewTTL(bytes32 indexed node, uint64 ttl);\n\n\n function setSubnodeOwner(bytes32 node, bytes32 label, address _owner) external;\n function setResolver(bytes32 node, address _resolver) external;\n function setOwner(bytes32 node, address _owner) external;\n function setTTL(bytes32 node, uint64 _ttl) external;\n function owner(bytes32 node) external view returns (address);\n function resolver(bytes32 node) external view returns (address);\n function ttl(bytes32 node) external view returns (uint64);\n\n}\n",
"interfaces/LinkTokenInterface.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\ninterface LinkTokenInterface {\n function allowance(address owner, address spender) external view returns (uint256 remaining);\n function approve(address spender, uint256 value) external returns (bool success);\n function balanceOf(address owner) external view returns (uint256 balance);\n function decimals() external view returns (uint8 decimalPlaces);\n function decreaseApproval(address spender, uint256 addedValue) external returns (bool success);\n function increaseApproval(address spender, uint256 subtractedValue) external;\n function name() external view returns (string memory tokenName);\n function symbol() external view returns (string memory tokenSymbol);\n function totalSupply() external view returns (uint256 totalTokensIssued);\n function transfer(address to, uint256 value) external returns (bool success);\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool success);\n function transferFrom(address from, address to, uint256 value) external returns (bool success);\n}\n",
"interfaces/ChainlinkRequestInterface.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\ninterface ChainlinkRequestInterface {\n function oracleRequest(\n address sender,\n uint256 requestPrice,\n bytes32 serviceAgreementID,\n address callbackAddress,\n bytes4 callbackFunctionId,\n uint256 nonce,\n uint256 dataVersion,\n bytes calldata data\n ) external;\n\n function cancelOracleRequest(\n bytes32 requestId,\n uint256 payment,\n bytes4 callbackFunctionId,\n uint256 expiration\n ) external;\n}\n",
"interfaces/PointerInterface.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\ninterface PointerInterface {\n function getAddress() external view returns (address);\n}\n",
"vendor/ENSResolver.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.6.0;\n\nabstract contract ENSResolver {\n function addr(bytes32 node) public view virtual returns (address);\n}\n"
},
"sourceTreeHashHex": "0xf06f588cd2820259a77e33568ae868237c445787443be35905d7cd083cba110c",
"compiler": {
"name": "solc",
"version": "soljson-v0.6.6+commit.6c089d02.js",
"settings": {
"optimizer": {
"runs": 1000000,
"enabled": true
},
"outputSelection": {
"*": {
"*": [
"abi",
"devdoc",
"userdoc",
"evm.bytecode.object",
"evm.bytecode.sourceMap",
"evm.deployedBytecode.object",
"evm.deployedBytecode.sourceMap",
"evm.methodIdentifiers",
"metadata"
]
}
},
"metadata": {
"bytecodeHash": "none"
},
"remappings": []
}
},
"chains": {}
}
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment