Socket
Socket
Sign inDemoInstall

@gnosis.pm/conditional-tokens-contracts

Package Overview
Dependencies
Maintainers
14
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@gnosis.pm/conditional-tokens-contracts - npm Package Compare versions

Comparing version 1.0.1 to 1.0.2

docs/audit/2020-01-20_accumulator_audit.pdf

0

.eslintrc.js

@@ -0,0 +0,0 @@ module.exports = {

@@ -0,0 +0,0 @@ {

2

build/contracts/Address.json

@@ -1,1 +0,1 @@

{"contractName":"Address","abi":[],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type,\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"openzeppelin-solidity/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1\",\"urls\":[\"bzzr://f7f6da60a184233fd666ac44e6fb2bd51ca6ebdc4867a310d368049aa4e62786\",\"dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3\"]}},\"version\":1}","bytecode":"0x60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7230582056e3206f490a3e4d7d25c7b745627969be3c7430ec0ed6689eb7ff8ca38866ec64736f6c634300050a0032","deployedBytecode":"0x73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7230582056e3206f490a3e4d7d25c7b745627969be3c7430ec0ed6689eb7ff8ca38866ec64736f6c634300050a0032","sourceMap":"94:863:11:-;;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","deployedSourceMap":"94:863:11:-;;;;;;;;","source":"pragma solidity ^0.5.0;\n\n/**\n * @dev Collection of functions related to the address type,\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * This test is non-exhaustive, and there may be false-negatives: during the\n * execution of a contract's constructor, its address will be reported as\n * not containing a contract.\n *\n * > It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies in extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\n }\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.0.16","updatedAt":"2019-12-09T11:33:40.950Z","devdoc":{"details":"Collection of functions related to the address type,","methods":{}},"userdoc":{"methods":{}}}
{"contractName":"Address","abi":[],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"openzeppelin-solidity/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0x1a8e5072509c5ea7365eb1d48030b9be865140c8fb779968da0a459a0e174a11\",\"urls\":[\"bzzr://4e1d23731da27602b8c552e54fb9976dadf8cf46a8f90a3c8c1b85fe044618b9\",\"dweb:/ipfs/Qmebp4nzPja645c9yXSdJkGq96oU3am3LUnG2K3R7XxyKf\"]}},\"version\":1}","bytecode":"0x60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72305820e5b49735dd38c3942b544252dec9559d00e135f0a7ae535200a08a0079b5aa6164736f6c634300050a0032","deployedBytecode":"0x73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72305820e5b49735dd38c3942b544252dec9559d00e135f0a7ae535200a08a0079b5aa6164736f6c634300050a0032","sourceMap":"93:2861:11:-;;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","deployedSourceMap":"93:2861:11:-;;;;;;;;","source":"pragma solidity ^0.5.5;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following \n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\n // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\n // for accounts without code, i.e. `keccak256('')`\n bytes32 codehash;\n bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\n // solhint-disable-next-line no-inline-assembly\n assembly { codehash := extcodehash(account) }\n return (codehash != accountHash && codehash != 0x0);\n }\n\n /**\n * @dev Converts an `address` into `address payable`. Note that this is\n * simply a type cast: the actual underlying value is not changed.\n *\n * _Available since v2.4.0._\n */\n function toPayable(address account) internal pure returns (address payable) {\n return address(uint160(account));\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n *\n * _Available since v2.4.0._\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-call-value\n (bool success, ) = recipient.call.value(amount)(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.2.5","updatedAt":"2020-09-16T22:12:38.871Z","devdoc":{"details":"Collection of functions related to the address type","methods":{}},"userdoc":{"methods":{}}}

@@ -1,1 +0,1 @@

{"contractName":"CTHelpers","abi":[],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/denis/projects/gnosis/conditional-tokens-contracts/contracts/CTHelpers.sol\":\"CTHelpers\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/denis/projects/gnosis/conditional-tokens-contracts/contracts/CTHelpers.sol\":{\"keccak256\":\"0x921eadb1d6cd0e742448334fb84c39b358a18cdeb7c6badbb89cae847d44a201\",\"urls\":[\"bzzr://54ea8cd3a2ef100710306ce15475573542ad5235ced471d59fa1744cfaea51c8\",\"dweb:/ipfs/Qme871evGa1PBSBnV9PisLhYnFnnahLmBuy5KakLSUKRPF\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x90e8c2521653bbb1768b05889c5760031e688d9cd361f167489b89215e201b95\",\"urls\":[\"bzzr://aa8b45b57edafc3d67bc5d916327ea16807fae33f753ca163ae0c4061b789766\",\"dweb:/ipfs/QmP5NaEwZthQeM2ESz4WTT3osrP7jhbvu7ocbttBi2JAw6\"]}},\"version\":1}","bytecode":"0x60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723058209652012900912f93872f1c23a87df86af89f55de77c9f5e874aa4337e62fbed664736f6c634300050a0032","deployedBytecode":"0x73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723058209652012900912f93872f1c23a87df86af89f55de77c9f5e874aa4337e62fbed664736f6c634300050a0032","sourceMap":"107:18313: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","deployedSourceMap":"107:18313:0:-;;;;;;;;","source":"pragma solidity ^0.5.1;\n\nimport { IERC20 } from \"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\";\n\nlibrary CTHelpers {\n /// @dev Constructs a condition ID from an oracle, a question ID, and the outcome slot count for the question.\n /// @param oracle The account assigned to report the result for the prepared condition.\n /// @param questionId An identifier for the question to be answered by the oracle.\n /// @param outcomeSlotCount The number of outcome slots which should be used for this condition. Must not exceed 256.\n function getConditionId(address oracle, bytes32 questionId, uint outcomeSlotCount) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(oracle, questionId, outcomeSlotCount));\n }\n\n uint constant P = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n uint constant B = 3;\n\n function sqrt(uint x) private pure returns (uint y) {\n uint p = P;\n // solium-disable-next-line security/no-inline-assembly\n assembly {\n // add chain generated via https://crypto.stackexchange.com/q/27179/71252\n // and transformed to the following program:\n\n // x=1; y=x+x; z=y+y; z=z+z; y=y+z; x=x+y; y=y+x; z=y+y; t=z+z; t=z+t; t=t+t;\n // t=t+t; z=z+t; x=x+z; z=x+x; z=z+z; y=y+z; z=y+y; z=z+z; z=z+z; z=y+z; x=x+z;\n // z=x+x; z=z+z; z=z+z; z=x+z; y=y+z; x=x+y; z=x+x; z=z+z; y=y+z; z=y+y; t=z+z;\n // t=t+t; t=t+t; z=z+t; x=x+z; y=y+x; z=y+y; z=z+z; z=z+z; x=x+z; z=x+x; z=z+z;\n // z=x+z; z=z+z; z=z+z; z=x+z; y=y+z; z=y+y; t=z+z; t=t+t; t=z+t; t=y+t; t=t+t;\n // t=t+t; t=t+t; t=t+t; z=z+t; x=x+z; z=x+x; z=x+z; y=y+z; z=y+y; z=y+z; z=z+z;\n // t=z+z; t=z+t; w=t+t; w=w+w; w=w+w; w=w+w; w=w+w; t=t+w; z=z+t; x=x+z; y=y+x;\n // z=y+y; x=x+z; y=y+x; x=x+y; y=y+x; x=x+y; z=x+x; z=x+z; z=z+z; y=y+z; z=y+y;\n // z=z+z; x=x+z; y=y+x; z=y+y; z=y+z; x=x+z; y=y+x; x=x+y; y=y+x; z=y+y; z=z+z;\n // z=y+z; x=x+z; z=x+x; z=x+z; y=y+z; x=x+y; y=y+x; x=x+y; y=y+x; z=y+y; z=y+z;\n // z=z+z; x=x+z; y=y+x; z=y+y; z=y+z; z=z+z; x=x+z; z=x+x; t=z+z; t=t+t; t=z+t;\n // t=x+t; t=t+t; t=t+t; t=t+t; t=t+t; z=z+t; y=y+z; x=x+y; y=y+x; x=x+y; z=x+x;\n // z=x+z; z=z+z; z=z+z; z=z+z; z=x+z; y=y+z; z=y+y; z=y+z; z=z+z; x=x+z; z=x+x;\n // z=x+z; y=y+z; x=x+y; z=x+x; z=z+z; y=y+z; x=x+y; z=x+x; y=y+z; x=x+y; y=y+x;\n // z=y+y; z=y+z; x=x+z; y=y+x; z=y+y; z=y+z; z=z+z; z=z+z; x=x+z; z=x+x; z=z+z;\n // z=z+z; z=x+z; y=y+z; x=x+y; z=x+x; t=x+z; t=t+t; t=t+t; z=z+t; y=y+z; z=y+y;\n // x=x+z; y=y+x; x=x+y; y=y+x; x=x+y; y=y+x; z=y+y; t=y+z; z=y+t; z=z+z; z=z+z;\n // z=t+z; x=x+z; y=y+x; x=x+y; y=y+x; x=x+y; z=x+x; z=x+z; y=y+z; x=x+y; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; res=y+x\n // res == (P + 1) // 4\n\n y := mulmod(x, x, p)\n {\n let z := mulmod(y, y, p)\n z := mulmod(z, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n {\n let t := mulmod(z, z, p)\n t := mulmod(z, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n z := mulmod(z, t, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(y, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n t := mulmod(z, z, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n z := mulmod(z, t, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n z := mulmod(x, z, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n t := mulmod(z, z, p)\n t := mulmod(t, t, p)\n t := mulmod(z, t, p)\n t := mulmod(y, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n z := mulmod(z, t, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n z := mulmod(z, z, p)\n t := mulmod(z, z, p)\n t := mulmod(z, t, p)\n {\n let w := mulmod(t, t, p)\n w := mulmod(w, w, p)\n w := mulmod(w, w, p)\n w := mulmod(w, w, p)\n w := mulmod(w, w, p)\n t := mulmod(t, w, p)\n }\n z := mulmod(z, t, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n z := mulmod(z, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(z, z, p)\n z := mulmod(y, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n t := mulmod(z, z, p)\n t := mulmod(t, t, p)\n t := mulmod(z, t, p)\n t := mulmod(x, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n z := mulmod(z, t, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n t := mulmod(x, z, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n z := mulmod(z, t, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n t := mulmod(y, z, p)\n z := mulmod(y, t, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(t, z, p)\n }\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n }\n x := mulmod(x, y, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n y := mulmod(y, x, p)\n }\n }\n\n /// @dev Constructs an outcome collection ID from a parent collection and an outcome collection.\n /// @param parentCollectionId Collection ID of the parent outcome collection, or bytes32(0) if there's no parent.\n /// @param conditionId Condition ID of the outcome collection to combine with the parent outcome collection.\n /// @param indexSet Index set of the outcome collection to combine with the parent outcome collection.\n function getCollectionId(bytes32 parentCollectionId, bytes32 conditionId, uint indexSet) internal view returns (bytes32) {\n uint x1 = uint(keccak256(abi.encodePacked(conditionId, indexSet)));\n bool odd = x1 >> 255 != 0;\n uint y1;\n uint yy;\n do {\n x1 = addmod(x1, 1, P);\n yy = addmod(mulmod(x1, mulmod(x1, x1, P), P), B, P);\n y1 = sqrt(yy);\n } while(mulmod(y1, y1, P) != yy);\n if(odd && y1 % 2 == 0 || !odd && y1 % 2 == 1)\n y1 = P - y1;\n\n uint x2 = uint(parentCollectionId);\n if(x2 != 0) {\n odd = x2 >> 254 != 0;\n x2 = (x2 << 2) >> 2;\n yy = addmod(mulmod(x2, mulmod(x2, x2, P), P), B, P);\n uint y2 = sqrt(yy);\n if(odd && y2 % 2 == 0 || !odd && y2 % 2 == 1)\n y2 = P - y2;\n require(mulmod(y2, y2, P) == yy, \"invalid parent collection ID\");\n\n (bool success, bytes memory ret) = address(6).staticcall(abi.encode(x1, y1, x2, y2));\n require(success, \"ecadd failed\");\n (x1, y1) = abi.decode(ret, (uint, uint));\n }\n\n if(y1 % 2 == 1)\n x1 ^= 1 << 254;\n\n return bytes32(x1);\n }\n\n /// @dev Constructs a position ID from a collateral token and an outcome collection. These IDs are used as the ERC-1155 ID for this contract.\n /// @param collateralToken Collateral token which backs the position.\n /// @param collectionId ID of the outcome collection associated with this position.\n function getPositionId(IERC20 collateralToken, bytes32 collectionId) internal pure returns (uint) {\n return uint(keccak256(abi.encodePacked(collateralToken, collectionId)));\n }\n}","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.0.16","updatedAt":"2019-12-09T11:33:40.907Z","devdoc":{"methods":{}},"userdoc":{"methods":{}}}
{"contractName":"CTHelpers","abi":[],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/CTHelpers.sol\":\"CTHelpers\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/CTHelpers.sol\":{\"keccak256\":\"0x921eadb1d6cd0e742448334fb84c39b358a18cdeb7c6badbb89cae847d44a201\",\"urls\":[\"bzzr://54ea8cd3a2ef100710306ce15475573542ad5235ced471d59fa1744cfaea51c8\",\"dweb:/ipfs/Qme871evGa1PBSBnV9PisLhYnFnnahLmBuy5KakLSUKRPF\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzzr://cf2d583b8dce38d0617fdcd65f2fd9f126fe17b7f683b5a515ea9d2762d8b062\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]}},\"version\":1}","bytecode":"0x60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72305820cfdf079efcd61c65802c237dc230b449ca5878e8a0c407b6253dfe1357d1546864736f6c634300050a0032","deployedBytecode":"0x73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72305820cfdf079efcd61c65802c237dc230b449ca5878e8a0c407b6253dfe1357d1546864736f6c634300050a0032","sourceMap":"107:18313: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","deployedSourceMap":"107:18313:0:-;;;;;;;;","source":"pragma solidity ^0.5.1;\n\nimport { IERC20 } from \"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\";\n\nlibrary CTHelpers {\n /// @dev Constructs a condition ID from an oracle, a question ID, and the outcome slot count for the question.\n /// @param oracle The account assigned to report the result for the prepared condition.\n /// @param questionId An identifier for the question to be answered by the oracle.\n /// @param outcomeSlotCount The number of outcome slots which should be used for this condition. Must not exceed 256.\n function getConditionId(address oracle, bytes32 questionId, uint outcomeSlotCount) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(oracle, questionId, outcomeSlotCount));\n }\n\n uint constant P = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n uint constant B = 3;\n\n function sqrt(uint x) private pure returns (uint y) {\n uint p = P;\n // solium-disable-next-line security/no-inline-assembly\n assembly {\n // add chain generated via https://crypto.stackexchange.com/q/27179/71252\n // and transformed to the following program:\n\n // x=1; y=x+x; z=y+y; z=z+z; y=y+z; x=x+y; y=y+x; z=y+y; t=z+z; t=z+t; t=t+t;\n // t=t+t; z=z+t; x=x+z; z=x+x; z=z+z; y=y+z; z=y+y; z=z+z; z=z+z; z=y+z; x=x+z;\n // z=x+x; z=z+z; z=z+z; z=x+z; y=y+z; x=x+y; z=x+x; z=z+z; y=y+z; z=y+y; t=z+z;\n // t=t+t; t=t+t; z=z+t; x=x+z; y=y+x; z=y+y; z=z+z; z=z+z; x=x+z; z=x+x; z=z+z;\n // z=x+z; z=z+z; z=z+z; z=x+z; y=y+z; z=y+y; t=z+z; t=t+t; t=z+t; t=y+t; t=t+t;\n // t=t+t; t=t+t; t=t+t; z=z+t; x=x+z; z=x+x; z=x+z; y=y+z; z=y+y; z=y+z; z=z+z;\n // t=z+z; t=z+t; w=t+t; w=w+w; w=w+w; w=w+w; w=w+w; t=t+w; z=z+t; x=x+z; y=y+x;\n // z=y+y; x=x+z; y=y+x; x=x+y; y=y+x; x=x+y; z=x+x; z=x+z; z=z+z; y=y+z; z=y+y;\n // z=z+z; x=x+z; y=y+x; z=y+y; z=y+z; x=x+z; y=y+x; x=x+y; y=y+x; z=y+y; z=z+z;\n // z=y+z; x=x+z; z=x+x; z=x+z; y=y+z; x=x+y; y=y+x; x=x+y; y=y+x; z=y+y; z=y+z;\n // z=z+z; x=x+z; y=y+x; z=y+y; z=y+z; z=z+z; x=x+z; z=x+x; t=z+z; t=t+t; t=z+t;\n // t=x+t; t=t+t; t=t+t; t=t+t; t=t+t; z=z+t; y=y+z; x=x+y; y=y+x; x=x+y; z=x+x;\n // z=x+z; z=z+z; z=z+z; z=z+z; z=x+z; y=y+z; z=y+y; z=y+z; z=z+z; x=x+z; z=x+x;\n // z=x+z; y=y+z; x=x+y; z=x+x; z=z+z; y=y+z; x=x+y; z=x+x; y=y+z; x=x+y; y=y+x;\n // z=y+y; z=y+z; x=x+z; y=y+x; z=y+y; z=y+z; z=z+z; z=z+z; x=x+z; z=x+x; z=z+z;\n // z=z+z; z=x+z; y=y+z; x=x+y; z=x+x; t=x+z; t=t+t; t=t+t; z=z+t; y=y+z; z=y+y;\n // x=x+z; y=y+x; x=x+y; y=y+x; x=x+y; y=y+x; z=y+y; t=y+z; z=y+t; z=z+z; z=z+z;\n // z=t+z; x=x+z; y=y+x; x=x+y; y=y+x; x=x+y; z=x+x; z=x+z; y=y+z; x=x+y; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; res=y+x\n // res == (P + 1) // 4\n\n y := mulmod(x, x, p)\n {\n let z := mulmod(y, y, p)\n z := mulmod(z, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n {\n let t := mulmod(z, z, p)\n t := mulmod(z, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n z := mulmod(z, t, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(y, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n t := mulmod(z, z, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n z := mulmod(z, t, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n z := mulmod(x, z, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n t := mulmod(z, z, p)\n t := mulmod(t, t, p)\n t := mulmod(z, t, p)\n t := mulmod(y, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n z := mulmod(z, t, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n z := mulmod(z, z, p)\n t := mulmod(z, z, p)\n t := mulmod(z, t, p)\n {\n let w := mulmod(t, t, p)\n w := mulmod(w, w, p)\n w := mulmod(w, w, p)\n w := mulmod(w, w, p)\n w := mulmod(w, w, p)\n t := mulmod(t, w, p)\n }\n z := mulmod(z, t, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n z := mulmod(z, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(z, z, p)\n z := mulmod(y, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n t := mulmod(z, z, p)\n t := mulmod(t, t, p)\n t := mulmod(z, t, p)\n t := mulmod(x, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n z := mulmod(z, t, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n t := mulmod(x, z, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n z := mulmod(z, t, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n t := mulmod(y, z, p)\n z := mulmod(y, t, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(t, z, p)\n }\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n }\n x := mulmod(x, y, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n y := mulmod(y, x, p)\n }\n }\n\n /// @dev Constructs an outcome collection ID from a parent collection and an outcome collection.\n /// @param parentCollectionId Collection ID of the parent outcome collection, or bytes32(0) if there's no parent.\n /// @param conditionId Condition ID of the outcome collection to combine with the parent outcome collection.\n /// @param indexSet Index set of the outcome collection to combine with the parent outcome collection.\n function getCollectionId(bytes32 parentCollectionId, bytes32 conditionId, uint indexSet) internal view returns (bytes32) {\n uint x1 = uint(keccak256(abi.encodePacked(conditionId, indexSet)));\n bool odd = x1 >> 255 != 0;\n uint y1;\n uint yy;\n do {\n x1 = addmod(x1, 1, P);\n yy = addmod(mulmod(x1, mulmod(x1, x1, P), P), B, P);\n y1 = sqrt(yy);\n } while(mulmod(y1, y1, P) != yy);\n if(odd && y1 % 2 == 0 || !odd && y1 % 2 == 1)\n y1 = P - y1;\n\n uint x2 = uint(parentCollectionId);\n if(x2 != 0) {\n odd = x2 >> 254 != 0;\n x2 = (x2 << 2) >> 2;\n yy = addmod(mulmod(x2, mulmod(x2, x2, P), P), B, P);\n uint y2 = sqrt(yy);\n if(odd && y2 % 2 == 0 || !odd && y2 % 2 == 1)\n y2 = P - y2;\n require(mulmod(y2, y2, P) == yy, \"invalid parent collection ID\");\n\n (bool success, bytes memory ret) = address(6).staticcall(abi.encode(x1, y1, x2, y2));\n require(success, \"ecadd failed\");\n (x1, y1) = abi.decode(ret, (uint, uint));\n }\n\n if(y1 % 2 == 1)\n x1 ^= 1 << 254;\n\n return bytes32(x1);\n }\n\n /// @dev Constructs a position ID from a collateral token and an outcome collection. These IDs are used as the ERC-1155 ID for this contract.\n /// @param collateralToken Collateral token which backs the position.\n /// @param collectionId ID of the outcome collection associated with this position.\n function getPositionId(IERC20 collateralToken, bytes32 collectionId) internal pure returns (uint) {\n return uint(keccak256(abi.encodePacked(collateralToken, collectionId)));\n }\n}","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.2.5","updatedAt":"2020-09-16T22:12:38.807Z","devdoc":{"methods":{}},"userdoc":{"methods":{}}}

@@ -1,1 +0,1 @@

{"contractName":"ERC1155","abi":[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"ids","type":"uint256[]"},{"indexed":false,"name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"value","type":"string"},{"indexed":true,"name":"id","type":"uint256"}],"name":"URI","type":"event"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owners","type":"address[]"},{"name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"id","type":"uint256"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"ids","type":"uint256[]"},{"name":"values","type":"uint256[]"},{"name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"ids\",\"type\":\"uint256[]\"},{\"name\":\"values\",\"type\":\"uint256[]\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owners\",\"type\":\"address[]\"},{\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"id\",\"type\":\"uint256\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Implementation of the basic standard multi-token. See https://eips.ethereum.org/EIPS/eip-1155 Originally based on code by Enjin: https://github.com/enjin/erc-1155\",\"methods\":{\"balanceOf(address,uint256)\":{\"details\":\"Get the specified address' balance for token with specified ID.\",\"params\":{\"id\":\"ID of the token\",\"owner\":\"The address of the token holder\"},\"return\":\"The owner's balance of the token type requested\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"Get the balance of multiple account/token pairs\",\"params\":{\"ids\":\"IDs of the tokens\",\"owners\":\"The addresses of the token holders\"},\"return\":\"Balances for each owner and token id pair\"},\"isApprovedForAll(address,address)\":{\"params\":{\"operator\":\"Address of authorized operator\",\"owner\":\"The owner of the Tokens\"},\"return\":\"True if the operator is approved, false if not\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"Transfers `values` amount(s) of `ids` from the `from` address to the `to` address specified. Caller must be approved to manage the tokens being transferred out of the `from` account. If `to` is a smart contract, will call `onERC1155BatchReceived` on `to` and act appropriately.\",\"params\":{\"data\":\"Data forwarded to `onERC1155Received` if `to` is a contract receiver\",\"from\":\"Source address\",\"ids\":\"IDs of each token type\",\"to\":\"Target address\",\"values\":\"Transfer amounts per token type\"}},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"Transfers `value` amount of an `id` from the `from` address to the `to` address specified. Caller must be approved to manage the tokens being transferred out of the `from` account. If `to` is a smart contract, will call `onERC1155Received` on `to` and act appropriately.\",\"params\":{\"data\":\"Data forwarded to `onERC1155Received` if `to` is a contract receiver\",\"from\":\"Source address\",\"id\":\"ID of the token type\",\"to\":\"Target address\",\"value\":\"Transfer amount\"}},\"setApprovalForAll(address,bool)\":{\"details\":\"Sets or unsets the approval of a given operator An operator is allowed to transfer all tokens of the sender on their behalf\",\"params\":{\"approved\":\"representing the status of the approval to be set\",\"operator\":\"address to set the approval\"}},\"supportsInterface(bytes4)\":{\"details\":\"See `IERC165.supportsInterface`. * Time complexity O(1), guaranteed to always use less than 30 000 gas.\"}},\"title\":\"Standard ERC1155 token\"},\"userdoc\":{\"methods\":{\"isApprovedForAll(address,address)\":{\"notice\":\"Queries the approval status of an operator for a given owner.\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/denis/projects/gnosis/conditional-tokens-contracts/contracts/ERC1155/ERC1155.sol\":\"ERC1155\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/denis/projects/gnosis/conditional-tokens-contracts/contracts/ERC1155/ERC1155.sol\":{\"keccak256\":\"0xd8e6583f45a98380ff10a5656a7ae7ba6a275e0d051043e5842f0d541abd7caa\",\"urls\":[\"bzzr://978cc82d056d10d8cc14b02f35801b10c0c2f87b0adbf6c41bbd622e20ab8cee\",\"dweb:/ipfs/QmYWqCK6moph6oeBEUc1nDaGz4GRdGXmykwKD5rykVbhcU\"]},\"/Users/denis/projects/gnosis/conditional-tokens-contracts/contracts/ERC1155/IERC1155.sol\":{\"keccak256\":\"0x4971631d7de74464fed3e0abac04553e917be5e8cd10b3f825e2e7c39ccc2734\",\"urls\":[\"bzzr://e1e88dfe7440ceab59d4cd604d12e5dc93409a3c5058e497763703027ea7b9e6\",\"dweb:/ipfs/QmRzsL1o6iVEFmqBYCo3XpM4kpvbK7iSJWssXHQ3gHb5uq\"]},\"/Users/denis/projects/gnosis/conditional-tokens-contracts/contracts/ERC1155/IERC1155TokenReceiver.sol\":{\"keccak256\":\"0xca815b5ca57df8f1056b962c2728d6a1e56fc7d9a7869ccee8f5a1ac6075b75d\",\"urls\":[\"bzzr://61df3e61bf24c80714e326ffdc274aaefc342241de3e72374131f613cddbd042\",\"dweb:/ipfs/QmPnF3rGuY2H3Gifvha4dW7fJPptP7wJerHzjz4dpzfTJW\"]},\"openzeppelin-solidity/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0xac2eacd7e7762e275442f28f21d821544df5aae2ed7698af13be8c41b7005e2e\",\"urls\":[\"bzzr://43e901f6f210568ebc1d3591da3ce6a9d10796b854767a9c6e3da10305a8a332\",\"dweb:/ipfs/QmQhfx2Ufr8a2gFXm3KogL66xGgAuAWMwcamkWFKGG6Vya\"]},\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x661553e43d7c4fbb2de504e5999fd5c104d367488350ed5bf023031bd1ba5ac5\",\"urls\":[\"bzzr://fc2ba15143ce3a00268ecd15fc98eb2469b18bfe27a64bbab0ac6446f161c739\",\"dweb:/ipfs/QmV7wjtRf11ibUHh4g8JjuhMpy68pPhV95L2y46UBoRfsZ\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzzr://1604f5b6d6e916c154efd8c6720cda069e5ba32dfa0a9dedf2b42e5b02d07f89\",\"dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1\",\"urls\":[\"bzzr://f7f6da60a184233fd666ac44e6fb2bd51ca6ebdc4867a310d368049aa4e62786\",\"dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3\"]}},\"version\":1}","bytecode":"0x608060405234801561001057600080fd5b506100437f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0361007a16565b6100757fd9b67a26000000000000000000000000000000000000000000000000000000006001600160e01b0361007a16565b610148565b7fffffffff00000000000000000000000000000000000000000000000000000000808216141561010b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152602081905260409020805460ff19166001179055565b611239806101576000396000f3fe608060405234801561001057600080fd5b506004361061007c5760003560e01c80634e1273f41161005b5780634e1273f414610223578063a22cb46514610396578063e985e9c5146103c4578063f242432a146103f25761007c565b8062fdd58e1461008157806301ffc9a7146100bf5780632eb2c2d6146100fa575b600080fd5b6100ad6004803603604081101561009757600080fd5b506001600160a01b038135169060200135610485565b60408051918252519081900360200190f35b6100e6600480360360208110156100d557600080fd5b50356001600160e01b0319166104f4565b604080519115158252519081900360200190f35b610221600480360360a081101561011057600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561014357600080fd5b82018360208201111561015557600080fd5b803590602001918460208302840111600160201b8311171561017657600080fd5b919390929091602081019035600160201b81111561019357600080fd5b8201836020820111156101a557600080fd5b803590602001918460208302840111600160201b831117156101c657600080fd5b919390929091602081019035600160201b8111156101e357600080fd5b8201836020820111156101f557600080fd5b803590602001918460018302840111600160201b8311171561021657600080fd5b509092509050610513565b005b6103466004803603604081101561023957600080fd5b810190602081018135600160201b81111561025357600080fd5b82018360208201111561026557600080fd5b803590602001918460208302840111600160201b8311171561028657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102d557600080fd5b8201836020820111156102e757600080fd5b803590602001918460208302840111600160201b8311171561030857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506108a0945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561038257818101518382015260200161036a565b505050509050019250505060405180910390f35b610221600480360360408110156103ac57600080fd5b506001600160a01b0381351690602001351515610a07565b6100e6600480360360408110156103da57600080fd5b506001600160a01b0381358116916020013516610a75565b610221600480360360a081101561040857600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561044757600080fd5b82018360208201111561045957600080fd5b803590602001918460018302840111600160201b8311171561047a57600080fd5b509092509050610aa3565b60006001600160a01b0383166104cc5760405162461bcd60e51b815260040180806020018281038252602b815260200180611083602b913960400191505060405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b6001600160e01b03191660009081526020819052604090205460ff1690565b8483146105515760405162461bcd60e51b815260040180806020018281038252602e81526020018061116e602e913960400191505060405180910390fd5b6001600160a01b0387166105965760405162461bcd60e51b81526004018080602001828103825260288152602001806110ae6028913960400191505060405180910390fd5b6001600160a01b0388163314806105d557506001600160a01b038816600090815260026020908152604080832033845290915290205460ff1615156001145b6106105760405162461bcd60e51b815260040180806020018281038252603881526020018061119c6038913960400191505060405180910390fd5b60005b8581101561074057600087878381811061062957fe5b905060200201359050600086868481811061064057fe5b905060200201359050610692816001600085815260200190815260200160002060008e6001600160a01b03166001600160a01b0316815260200190815260200160002054610c7f90919063ffffffff16565b6001600084815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020819055506107156001600084815260200190815260200160002060008c6001600160a01b03166001600160a01b031681526020019081526020016000205482610cdc90919063ffffffff16565b60009283526001602081815260408086206001600160a01b038f168752909152909320555001610613565b50866001600160a01b0316886001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb898989896040518080602001806020018381038352878782818152602001925060200280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600083820152604051601f909101601f19169092018290039850909650505050505050a461089633898989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b91829185019084908082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250610d3d92505050565b5050505050505050565b606081518351146108e25760405162461bcd60e51b815260040180806020018281038252602e815260200180611140602e913960400191505060405180910390fd5b6060835160405190808252806020026020018201604052801561090f578160200160208202803883390190505b50905060005b84518110156109ff5760006001600160a01b031685828151811061093557fe5b60200260200101516001600160a01b031614156109835760405162461bcd60e51b815260040180806020018281038252603481526020018061110c6034913960400191505060405180910390fd5b6001600085838151811061099357fe5b6020026020010151815260200190815260200160002060008683815181106109b757fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106109ec57fe5b6020908102919091010152600101610915565b509392505050565b3360008181526002602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b6001600160a01b038516610ae85760405162461bcd60e51b81526004018080602001828103825260288152602001806110ae6028913960400191505060405180910390fd5b6001600160a01b038616331480610b2757506001600160a01b038616600090815260026020908152604080832033845290915290205460ff1615156001145b610b625760405162461bcd60e51b815260040180806020018281038252603881526020018061119c6038913960400191505060405180910390fd5b60008481526001602090815260408083206001600160a01b038a168452909152902054610b95908463ffffffff610c7f16565b60008581526001602090815260408083206001600160a01b038b81168552925280832093909355871681522054610bcd908490610cdc565b60008581526001602090815260408083206001600160a01b03808b16808652918452938290209490945580518881529182018790528051928a169233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a4610c77338787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f1a92505050565b505050505050565b600082821115610cd6576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610d36576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b610d4f846001600160a01b031661107c565b15610c775760405163bc197c8160e01b8082526001600160a01b0388811660048401908152888216602485015260a060448501908152875160a4860152875193949289169363bc197c81938c938c938b938b938b9392916064820191608481019160c4909101906020808a01910280838360005b83811015610ddb578181015183820152602001610dc3565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015610e1a578181015183820152602001610e02565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015610e56578181015183820152602001610e3e565b50505050905090810190601f168015610e835780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015610ea857600080fd5b505af1158015610ebc573d6000803e3d6000fd5b505050506040513d6020811015610ed257600080fd5b50516001600160e01b03191614610c775760405162461bcd60e51b81526004018080602001828103825260368152602001806110d66036913960400191505060405180910390fd5b610f2c846001600160a01b031661107c565b15610c775760405163f23a6e6160e01b8082526001600160a01b03888116600484019081528882166024850152604484018790526064840186905260a060848501908152855160a4860152855193949289169363f23a6e61938c938c938b938b938b93929160c490910190602085019080838360005b83811015610fba578181015183820152602001610fa2565b50505050905090810190601f168015610fe75780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561100a57600080fd5b505af115801561101e573d6000803e3d6000fd5b505050506040513d602081101561103457600080fd5b50516001600160e01b03191614610c775760405162461bcd60e51b81526004018080602001828103825260318152602001806111d46031913960400191505060405180910390fd5b3b15159056fe455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a207461726765742061646472657373206d757374206265206e6f6e2d7a65726f455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e4552433131353542617463685265636569766564455243313135353a20736f6d65206164647265737320696e2062617463682062616c616e6365207175657279206973207a65726f455243313135353a206f776e65727320616e6420494473206d75737420686176652073616d65206c656e67746873455243313135353a2049447320616e642076616c756573206d75737420686176652073616d65206c656e67746873455243313135353a206e656564206f70657261746f7220617070726f76616c20666f7220337264207061727479207472616e73666572732e455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e455243313135355265636569766564a265627a7a723058206832f7e1501b194ec63d6be50f500225e49a7891ee6255b66e0acf0d0741f24064736f6c634300050a0032","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061007c5760003560e01c80634e1273f41161005b5780634e1273f414610223578063a22cb46514610396578063e985e9c5146103c4578063f242432a146103f25761007c565b8062fdd58e1461008157806301ffc9a7146100bf5780632eb2c2d6146100fa575b600080fd5b6100ad6004803603604081101561009757600080fd5b506001600160a01b038135169060200135610485565b60408051918252519081900360200190f35b6100e6600480360360208110156100d557600080fd5b50356001600160e01b0319166104f4565b604080519115158252519081900360200190f35b610221600480360360a081101561011057600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561014357600080fd5b82018360208201111561015557600080fd5b803590602001918460208302840111600160201b8311171561017657600080fd5b919390929091602081019035600160201b81111561019357600080fd5b8201836020820111156101a557600080fd5b803590602001918460208302840111600160201b831117156101c657600080fd5b919390929091602081019035600160201b8111156101e357600080fd5b8201836020820111156101f557600080fd5b803590602001918460018302840111600160201b8311171561021657600080fd5b509092509050610513565b005b6103466004803603604081101561023957600080fd5b810190602081018135600160201b81111561025357600080fd5b82018360208201111561026557600080fd5b803590602001918460208302840111600160201b8311171561028657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102d557600080fd5b8201836020820111156102e757600080fd5b803590602001918460208302840111600160201b8311171561030857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506108a0945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561038257818101518382015260200161036a565b505050509050019250505060405180910390f35b610221600480360360408110156103ac57600080fd5b506001600160a01b0381351690602001351515610a07565b6100e6600480360360408110156103da57600080fd5b506001600160a01b0381358116916020013516610a75565b610221600480360360a081101561040857600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561044757600080fd5b82018360208201111561045957600080fd5b803590602001918460018302840111600160201b8311171561047a57600080fd5b509092509050610aa3565b60006001600160a01b0383166104cc5760405162461bcd60e51b815260040180806020018281038252602b815260200180611083602b913960400191505060405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b6001600160e01b03191660009081526020819052604090205460ff1690565b8483146105515760405162461bcd60e51b815260040180806020018281038252602e81526020018061116e602e913960400191505060405180910390fd5b6001600160a01b0387166105965760405162461bcd60e51b81526004018080602001828103825260288152602001806110ae6028913960400191505060405180910390fd5b6001600160a01b0388163314806105d557506001600160a01b038816600090815260026020908152604080832033845290915290205460ff1615156001145b6106105760405162461bcd60e51b815260040180806020018281038252603881526020018061119c6038913960400191505060405180910390fd5b60005b8581101561074057600087878381811061062957fe5b905060200201359050600086868481811061064057fe5b905060200201359050610692816001600085815260200190815260200160002060008e6001600160a01b03166001600160a01b0316815260200190815260200160002054610c7f90919063ffffffff16565b6001600084815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020819055506107156001600084815260200190815260200160002060008c6001600160a01b03166001600160a01b031681526020019081526020016000205482610cdc90919063ffffffff16565b60009283526001602081815260408086206001600160a01b038f168752909152909320555001610613565b50866001600160a01b0316886001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb898989896040518080602001806020018381038352878782818152602001925060200280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600083820152604051601f909101601f19169092018290039850909650505050505050a461089633898989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b91829185019084908082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250610d3d92505050565b5050505050505050565b606081518351146108e25760405162461bcd60e51b815260040180806020018281038252602e815260200180611140602e913960400191505060405180910390fd5b6060835160405190808252806020026020018201604052801561090f578160200160208202803883390190505b50905060005b84518110156109ff5760006001600160a01b031685828151811061093557fe5b60200260200101516001600160a01b031614156109835760405162461bcd60e51b815260040180806020018281038252603481526020018061110c6034913960400191505060405180910390fd5b6001600085838151811061099357fe5b6020026020010151815260200190815260200160002060008683815181106109b757fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106109ec57fe5b6020908102919091010152600101610915565b509392505050565b3360008181526002602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b6001600160a01b038516610ae85760405162461bcd60e51b81526004018080602001828103825260288152602001806110ae6028913960400191505060405180910390fd5b6001600160a01b038616331480610b2757506001600160a01b038616600090815260026020908152604080832033845290915290205460ff1615156001145b610b625760405162461bcd60e51b815260040180806020018281038252603881526020018061119c6038913960400191505060405180910390fd5b60008481526001602090815260408083206001600160a01b038a168452909152902054610b95908463ffffffff610c7f16565b60008581526001602090815260408083206001600160a01b038b81168552925280832093909355871681522054610bcd908490610cdc565b60008581526001602090815260408083206001600160a01b03808b16808652918452938290209490945580518881529182018790528051928a169233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a4610c77338787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f1a92505050565b505050505050565b600082821115610cd6576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610d36576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b610d4f846001600160a01b031661107c565b15610c775760405163bc197c8160e01b8082526001600160a01b0388811660048401908152888216602485015260a060448501908152875160a4860152875193949289169363bc197c81938c938c938b938b938b9392916064820191608481019160c4909101906020808a01910280838360005b83811015610ddb578181015183820152602001610dc3565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015610e1a578181015183820152602001610e02565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015610e56578181015183820152602001610e3e565b50505050905090810190601f168015610e835780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015610ea857600080fd5b505af1158015610ebc573d6000803e3d6000fd5b505050506040513d6020811015610ed257600080fd5b50516001600160e01b03191614610c775760405162461bcd60e51b81526004018080602001828103825260368152602001806110d66036913960400191505060405180910390fd5b610f2c846001600160a01b031661107c565b15610c775760405163f23a6e6160e01b8082526001600160a01b03888116600484019081528882166024850152604484018790526064840186905260a060848501908152855160a4860152855193949289169363f23a6e61938c938c938b938b938b93929160c490910190602085019080838360005b83811015610fba578181015183820152602001610fa2565b50505050905090810190601f168015610fe75780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561100a57600080fd5b505af115801561101e573d6000803e3d6000fd5b505050506040513d602081101561103457600080fd5b50516001600160e01b03191614610c775760405162461bcd60e51b81526004018080602001828103825260318152602001806111d46031913960400191505060405180910390fd5b3b15159056fe455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a207461726765742061646472657373206d757374206265206e6f6e2d7a65726f455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e4552433131353542617463685265636569766564455243313135353a20736f6d65206164647265737320696e2062617463682062616c616e6365207175657279206973207a65726f455243313135353a206f776e65727320616e6420494473206d75737420686176652073616d65206c656e67746873455243313135353a2049447320616e642076616c756573206d75737420686176652073616d65206c656e67746873455243313135353a206e656564206f70657261746f7220617070726f76616c20666f7220337264207061727479207472616e73666572732e455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e455243313135355265636569766564a265627a7a723058206832f7e1501b194ec63d6be50f500225e49a7891ee6255b66e0acf0d0741f24064736f6c634300050a0032","sourceMap":"497:9626:2:-;;;851:380;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;718:40:7;737:20;-1:-1:-1;;;;;718:18:7;:40;:::i;:::-;894:330:2;926:288;-1:-1:-1;;;;;894:18:2;:330;:::i;:::-;497:9626;;1442:190:7;1517:25;;;;;;1509:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1585:33;;:20;:33;;;;;;;;;;:40;;-1:-1:-1;;1585:40:7;1621:4;1585:40;;;1442:190::o;497:9626:2:-;;;;;;;","deployedSourceMap":"497:9626:2:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;497:9626:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1481:205;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1481:205:2;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;915:133:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;915:133:7;-1:-1:-1;;;;;;915:133:7;;:::i;:::-;;;;;;;;;;;;;;;;;;5265:971:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;5265:971:2;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5265:971:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5265:971:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;5265:971:2;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5265:971:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5265:971:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;5265:971:2;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5265:971:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5265:971:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;5265:971:2;;-1:-1:-1;5265:971:2;-1:-1:-1;5265:971:2;:::i;:::-;;1921:594;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1921:594:2;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;1921:594:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1921:594:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;1921:594:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1921:594:2;;;;;;;;-1:-1:-1;1921:594:2;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;1921:594:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1921:594:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;1921:594:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1921:594:2;;-1:-1:-1;1921:594:2;;-1:-1:-1;;;;;1921:594:2: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;1921:594:2;;;;;;;;;;;;;;;;;2804:198;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2804:198:2;;;;;;;;;;:::i;3279:147::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3279:147:2;;;;;;;;;;:::i;3980:696::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;3980:696:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;3980:696:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3980:696:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;3980:696:2;;-1:-1:-1;3980:696:2;-1:-1:-1;3980:696:2;:::i;1481:205::-;1548:7;-1:-1:-1;;;;;1575:19:2;;1567:75;;;;-1:-1:-1;;;1567:75:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1659:13:2;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;1659:20:2;;;;;;;;;;;;1481:205::o;915:133:7:-;-1:-1:-1;;;;;;1008:33:7;985:4;1008:33;;;;;;;;;;;;;;915:133::o;5265:971:2:-;5479:27;;;5471:86;;;;-1:-1:-1;;;5471:86:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5575:16:2;;5567:69;;;;-1:-1:-1;;;5567:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5667:18:2;;5675:10;5667:18;;:66;;-1:-1:-1;;;;;;5689:24:2;;;;;;:18;:24;;;;;;;;5714:10;5689:36;;;;;;;;;;:44;;:36;:44;5667:66;5646:169;;;;-1:-1:-1;;;5646:169:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5831:9;5826:253;5846:14;;;5826:253;;;5881:10;5894:3;;5898:1;5894:6;;;;;;;;;;;;;5881:19;;5914:13;5930:6;;5937:1;5930:9;;;;;;;;;;;;;5914:25;;5976:30;6000:5;5976:9;:13;5986:2;5976:13;;;;;;;;;;;:19;5990:4;-1:-1:-1;;;;;5976:19:2;-1:-1:-1;;;;;5976:19:2;;;;;;;;;;;;;:23;;:30;;;;:::i;:::-;5954:9;:13;5964:2;5954:13;;;;;;;;;;;:19;5968:4;-1:-1:-1;;;;;5954:19:2;-1:-1:-1;;;;;5954:19:2;;;;;;;;;;;;:52;;;;6040:28;6050:9;:13;6060:2;6050:13;;;;;;;;;;;:17;6064:2;-1:-1:-1;;;;;6050:17:2;-1:-1:-1;;;;;6050:17:2;;;;;;;;;;;;;6040:5;:9;;:28;;;;:::i;:::-;6020:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;6020:17:2;;;;;;;;;;:48;-1:-1:-1;5862:3:2;5826:253;;;;6126:2;-1:-1:-1;;;;;6094:48:2;6120:4;-1:-1:-1;;;;;6094:48:2;6108:10;-1:-1:-1;;;;;6094:48:2;;6130:3;;6135:6;;6094:48;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;6094:48:2;;;;;;;;;;;;;-1:-1:-1;6094:48:2;;;;;;;1:33:-1;99:1;81:16;;;74:27;6094:48:2;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;6094:48:2;;;;-1:-1:-1;6094:48:2;;-1:-1:-1;;;;;;;6094:48:2;6153:76;6189:10;6201:4;6207:2;6211:3;;6153:76;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;6153:76:2;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6216:6:2;;-1:-1:-1;6216:6:2;;;;6153:76;;;6216:6;;6153:76;6216:6;6153:76;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;;6153:76:2;;;;137:4:-1;6153:76:2;;;;;;;;;;;;;;;;;;-1:-1:-1;6224:4:2;;-1:-1:-1;6224:4:2;;;;6153:76;;6224:4;;;;6153:76;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;6153:35:2;;-1:-1:-1;;;6153:76:2:i;:::-;5265:971;;;;;;;;:::o;1921:594::-;2059:16;2116:3;:10;2099:6;:13;:27;2091:86;;;;-1:-1:-1;;;2091:86:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2188:30;2235:6;:13;2221:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;2221:28:2;-1:-1:-1;2188:61:2;-1:-1:-1;2265:9:2;2260:218;2284:6;:13;2280:1;:17;2260:218;;;2347:1;-1:-1:-1;;;;;2326:23:2;:6;2333:1;2326:9;;;;;;;;;;;;;;-1:-1:-1;;;;;2326:23:2;;;2318:88;;;;-1:-1:-1;;;2318:88:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2439:9;:17;2449:3;2453:1;2449:6;;;;;;;;;;;;;;2439:17;;;;;;;;;;;:28;2457:6;2464:1;2457:9;;;;;;;;;;;;;;-1:-1:-1;;;;;2439:28:2;-1:-1:-1;;;;;2439:28:2;;;;;;;;;;;;;2420:13;2434:1;2420:16;;;;;;;;;;;;;;;;;:47;2299:3;;2260:218;;;-1:-1:-1;2495:13:2;1921:594;-1:-1:-1;;;1921:594:2:o;2804:198::-;2902:10;2883:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;2883:40:2;;;;;;;;;;;;:51;;-1:-1:-1;;2883:51:2;;;;;;;;;;2949:46;;;;;;;2883:40;;2902:10;2949:46;;;;;;;;;;;2804:198;;:::o;3279:147::-;-1:-1:-1;;;;;3384:25:2;;;3361:4;3384:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;3279:147::o;3980:696::-;-1:-1:-1;;;;;4165:16:2;;4157:69;;;;-1:-1:-1;;;4157:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4257:18:2;;4265:10;4257:18;;:66;;-1:-1:-1;;;;;;4279:24:2;;;;;;:18;:24;;;;;;;;4304:10;4279:36;;;;;;;;;;:44;;:36;:44;4257:66;4236:169;;;;-1:-1:-1;;;4236:169:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4438:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;4438:19:2;;;;;;;;;;:30;;4462:5;4438:30;:23;:30;:::i;:::-;4416:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;4416:19:2;;;;;;;;;;:52;;;;4508:17;;;;;;4498:28;;:5;;:9;:28::i;:::-;4478:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;4478:17:2;;;;;;;;;;;;;:48;;;;4542:47;;;;;;;;;;;;;;;;;4557:10;;4542:47;;;;;;;;;4600:69;4631:10;4643:4;4649:2;4653;4657:5;4664:4;;4600:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;4600:30:2;;-1:-1:-1;;;4600:69:2:i;:::-;3980:696;;;;;;:::o;1274:179:9:-;1332:7;1364:1;1359;:6;;1351:49;;;;;-1:-1:-1;;;1351:49:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1422:5:9;;;1274:179::o;834:176::-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;834:176;-1:-1:-1;;;834:176:9:o;9573:548:2:-;9816:15;:2;-1:-1:-1;;;;;9816:13:2;;:15::i;:::-;9813:302;;;9872:83;;-1:-1:-1;;;9872:83:2;;;-1:-1:-1;;;;;9872:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9959:57;;:48;;;;;;9921:8;;9931:4;;9937:3;;9942:6;;9950:4;;9872:83;;;;;;;;;;;;;;;;;;;;;;;;-1:-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;9872:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;9872:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;9872:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9872:83:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9872:83:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9872:83:2;-1:-1:-1;;;;;;9872:144:2;;9847:257;;;;-1:-1:-1;;;9847:257:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9041:526;9259:15;:2;-1:-1:-1;;;;;9259:13:2;;:15::i;:::-;9256:305;;;9315:76;;-1:-1:-1;;;9315:76:2;;;-1:-1:-1;;;;;9315:76:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9415:52;;:43;;;;;;9359:8;;9369:4;;9375:2;;9379:5;;9386:4;;9315:76;;;;;;;;;;;;;;-1:-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;9315:76:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9315:76:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9315:76:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9315:76:2;-1:-1:-1;;;;;;9315:152:2;;9290:260;;;;-1:-1:-1;;;9290:260:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;542:413:11;902:20;940:8;;;542:413::o","source":"pragma solidity ^0.5.0;\n\nimport \"./IERC1155.sol\";\nimport \"./IERC1155TokenReceiver.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"openzeppelin-solidity/contracts/utils/Address.sol\";\nimport \"openzeppelin-solidity/contracts/introspection/ERC165.sol\";\n\n/**\n * @title Standard ERC1155 token\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n */\ncontract ERC1155 is ERC165, IERC1155\n{\n using SafeMath for uint256;\n using Address for address;\n\n // Mapping from token ID to owner balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n constructor()\n public\n {\n _registerInterface(\n ERC1155(0).safeTransferFrom.selector ^\n ERC1155(0).safeBatchTransferFrom.selector ^\n ERC1155(0).balanceOf.selector ^\n ERC1155(0).balanceOfBatch.selector ^\n ERC1155(0).setApprovalForAll.selector ^\n ERC1155(0).isApprovedForAll.selector\n );\n }\n\n /**\n @dev Get the specified address' balance for token with specified ID.\n @param owner The address of the token holder\n @param id ID of the token\n @return The owner's balance of the token type requested\n */\n function balanceOf(address owner, uint256 id) public view returns (uint256) {\n require(owner != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][owner];\n }\n\n /**\n @dev Get the balance of multiple account/token pairs\n @param owners The addresses of the token holders\n @param ids IDs of the tokens\n @return Balances for each owner and token id pair\n */\n function balanceOfBatch(\n address[] memory owners,\n uint256[] memory ids\n )\n public\n view\n returns (uint256[] memory)\n {\n require(owners.length == ids.length, \"ERC1155: owners and IDs must have same lengths\");\n\n uint256[] memory batchBalances = new uint256[](owners.length);\n\n for (uint256 i = 0; i < owners.length; ++i) {\n require(owners[i] != address(0), \"ERC1155: some address in batch balance query is zero\");\n batchBalances[i] = _balances[ids[i]][owners[i]];\n }\n\n return batchBalances;\n }\n\n /**\n * @dev Sets or unsets the approval of a given operator\n * An operator is allowed to transfer all tokens of the sender on their behalf\n * @param operator address to set the approval\n * @param approved representing the status of the approval to be set\n */\n function setApprovalForAll(address operator, bool approved) external {\n _operatorApprovals[msg.sender][operator] = approved;\n emit ApprovalForAll(msg.sender, operator, approved);\n }\n\n /**\n @notice Queries the approval status of an operator for a given owner.\n @param owner The owner of the Tokens\n @param operator Address of authorized operator\n @return True if the operator is approved, false if not\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n @dev Transfers `value` amount of an `id` from the `from` address to the `to` address specified.\n Caller must be approved to manage the tokens being transferred out of the `from` account.\n If `to` is a smart contract, will call `onERC1155Received` on `to` and act appropriately.\n @param from Source address\n @param to Target address\n @param id ID of the token type\n @param value Transfer amount\n @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n {\n require(to != address(0), \"ERC1155: target address must be non-zero\");\n require(\n from == msg.sender || _operatorApprovals[from][msg.sender] == true,\n \"ERC1155: need operator approval for 3rd party transfers.\"\n );\n\n _balances[id][from] = _balances[id][from].sub(value);\n _balances[id][to] = value.add(_balances[id][to]);\n\n emit TransferSingle(msg.sender, from, to, id, value);\n\n _doSafeTransferAcceptanceCheck(msg.sender, from, to, id, value, data);\n }\n\n /**\n @dev Transfers `values` amount(s) of `ids` from the `from` address to the\n `to` address specified. Caller must be approved to manage the tokens being\n transferred out of the `from` account. If `to` is a smart contract, will\n call `onERC1155BatchReceived` on `to` and act appropriately.\n @param from Source address\n @param to Target address\n @param ids IDs of each token type\n @param values Transfer amounts per token type\n @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n {\n require(ids.length == values.length, \"ERC1155: IDs and values must have same lengths\");\n require(to != address(0), \"ERC1155: target address must be non-zero\");\n require(\n from == msg.sender || _operatorApprovals[from][msg.sender] == true,\n \"ERC1155: need operator approval for 3rd party transfers.\"\n );\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 value = values[i];\n\n _balances[id][from] = _balances[id][from].sub(value);\n _balances[id][to] = value.add(_balances[id][to]);\n }\n\n emit TransferBatch(msg.sender, from, to, ids, values);\n\n _doSafeBatchTransferAcceptanceCheck(msg.sender, from, to, ids, values, data);\n }\n\n /**\n * @dev Internal function to mint an amount of a token with the given ID\n * @param to The address that will own the minted token\n * @param id ID of the token to be minted\n * @param value Amount of the token to be minted\n * @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver\n */\n function _mint(address to, uint256 id, uint256 value, bytes memory data) internal {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n\n _balances[id][to] = value.add(_balances[id][to]);\n emit TransferSingle(msg.sender, address(0), to, id, value);\n\n _doSafeTransferAcceptanceCheck(msg.sender, address(0), to, id, value, data);\n }\n\n /**\n * @dev Internal function to batch mint amounts of tokens with the given IDs\n * @param to The address that will own the minted token\n * @param ids IDs of the tokens to be minted\n * @param values Amounts of the tokens to be minted\n * @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver\n */\n function _batchMint(address to, uint256[] memory ids, uint256[] memory values, bytes memory data) internal {\n require(to != address(0), \"ERC1155: batch mint to the zero address\");\n require(ids.length == values.length, \"ERC1155: IDs and values must have same lengths\");\n\n for(uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = values[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(msg.sender, address(0), to, ids, values);\n\n _doSafeBatchTransferAcceptanceCheck(msg.sender, address(0), to, ids, values, data);\n }\n\n /**\n * @dev Internal function to burn an amount of a token with the given ID\n * @param owner Account which owns the token to be burnt\n * @param id ID of the token to be burnt\n * @param value Amount of the token to be burnt\n */\n function _burn(address owner, uint256 id, uint256 value) internal {\n _balances[id][owner] = _balances[id][owner].sub(value);\n emit TransferSingle(msg.sender, owner, address(0), id, value);\n }\n\n /**\n * @dev Internal function to batch burn an amounts of tokens with the given IDs\n * @param owner Account which owns the token to be burnt\n * @param ids IDs of the tokens to be burnt\n * @param values Amounts of the tokens to be burnt\n */\n function _batchBurn(address owner, uint256[] memory ids, uint256[] memory values) internal {\n require(ids.length == values.length, \"ERC1155: IDs and values must have same lengths\");\n\n for(uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][owner] = _balances[ids[i]][owner].sub(values[i]);\n }\n\n emit TransferBatch(msg.sender, owner, address(0), ids, values);\n }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 value,\n bytes memory data\n )\n internal\n {\n if(to.isContract()) {\n require(\n IERC1155TokenReceiver(to).onERC1155Received(operator, from, id, value, data) ==\n IERC1155TokenReceiver(to).onERC1155Received.selector,\n \"ERC1155: got unknown value from onERC1155Received\"\n );\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory values,\n bytes memory data\n )\n internal\n {\n if(to.isContract()) {\n require(\n IERC1155TokenReceiver(to).onERC1155BatchReceived(operator, from, ids, values, data) == IERC1155TokenReceiver(to).onERC1155BatchReceived.selector,\n \"ERC1155: got unknown value from onERC1155BatchReceived\"\n );\n }\n }\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.0.16","updatedAt":"2019-12-09T11:33:40.936Z","devdoc":{"details":"Implementation of the basic standard multi-token. See https://eips.ethereum.org/EIPS/eip-1155 Originally based on code by Enjin: https://github.com/enjin/erc-1155","methods":{"balanceOf(address,uint256)":{"details":"Get the specified address' balance for token with specified ID.","params":{"id":"ID of the token","owner":"The address of the token holder"},"return":"The owner's balance of the token type requested"},"balanceOfBatch(address[],uint256[])":{"details":"Get the balance of multiple account/token pairs","params":{"ids":"IDs of the tokens","owners":"The addresses of the token holders"},"return":"Balances for each owner and token id pair"},"isApprovedForAll(address,address)":{"params":{"operator":"Address of authorized operator","owner":"The owner of the Tokens"},"return":"True if the operator is approved, false if not"},"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)":{"details":"Transfers `values` amount(s) of `ids` from the `from` address to the `to` address specified. Caller must be approved to manage the tokens being transferred out of the `from` account. If `to` is a smart contract, will call `onERC1155BatchReceived` on `to` and act appropriately.","params":{"data":"Data forwarded to `onERC1155Received` if `to` is a contract receiver","from":"Source address","ids":"IDs of each token type","to":"Target address","values":"Transfer amounts per token type"}},"safeTransferFrom(address,address,uint256,uint256,bytes)":{"details":"Transfers `value` amount of an `id` from the `from` address to the `to` address specified. Caller must be approved to manage the tokens being transferred out of the `from` account. If `to` is a smart contract, will call `onERC1155Received` on `to` and act appropriately.","params":{"data":"Data forwarded to `onERC1155Received` if `to` is a contract receiver","from":"Source address","id":"ID of the token type","to":"Target address","value":"Transfer amount"}},"setApprovalForAll(address,bool)":{"details":"Sets or unsets the approval of a given operator An operator is allowed to transfer all tokens of the sender on their behalf","params":{"approved":"representing the status of the approval to be set","operator":"address to set the approval"}},"supportsInterface(bytes4)":{"details":"See `IERC165.supportsInterface`. * Time complexity O(1), guaranteed to always use less than 30 000 gas."}},"title":"Standard ERC1155 token"},"userdoc":{"methods":{"isApprovedForAll(address,address)":{"notice":"Queries the approval status of an operator for a given owner."}}}}
{"contractName":"ERC1155","abi":[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"ids","type":"uint256[]"},{"indexed":false,"name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"value","type":"string"},{"indexed":true,"name":"id","type":"uint256"}],"name":"URI","type":"event"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owners","type":"address[]"},{"name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"id","type":"uint256"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"ids","type":"uint256[]"},{"name":"values","type":"uint256[]"},{"name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"ids\",\"type\":\"uint256[]\"},{\"name\":\"values\",\"type\":\"uint256[]\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owners\",\"type\":\"address[]\"},{\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"id\",\"type\":\"uint256\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Implementation of the basic standard multi-token. See https://eips.ethereum.org/EIPS/eip-1155 Originally based on code by Enjin: https://github.com/enjin/erc-1155\",\"methods\":{\"balanceOf(address,uint256)\":{\"details\":\"Get the specified address' balance for token with specified ID.\",\"params\":{\"id\":\"ID of the token\",\"owner\":\"The address of the token holder\"},\"return\":\"The owner's balance of the token type requested\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"Get the balance of multiple account/token pairs\",\"params\":{\"ids\":\"IDs of the tokens\",\"owners\":\"The addresses of the token holders\"},\"return\":\"Balances for each owner and token id pair\"},\"isApprovedForAll(address,address)\":{\"params\":{\"operator\":\"Address of authorized operator\",\"owner\":\"The owner of the Tokens\"},\"return\":\"True if the operator is approved, false if not\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"Transfers `values` amount(s) of `ids` from the `from` address to the `to` address specified. Caller must be approved to manage the tokens being transferred out of the `from` account. If `to` is a smart contract, will call `onERC1155BatchReceived` on `to` and act appropriately.\",\"params\":{\"data\":\"Data forwarded to `onERC1155Received` if `to` is a contract receiver\",\"from\":\"Source address\",\"ids\":\"IDs of each token type\",\"to\":\"Target address\",\"values\":\"Transfer amounts per token type\"}},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"Transfers `value` amount of an `id` from the `from` address to the `to` address specified. Caller must be approved to manage the tokens being transferred out of the `from` account. If `to` is a smart contract, will call `onERC1155Received` on `to` and act appropriately.\",\"params\":{\"data\":\"Data forwarded to `onERC1155Received` if `to` is a contract receiver\",\"from\":\"Source address\",\"id\":\"ID of the token type\",\"to\":\"Target address\",\"value\":\"Transfer amount\"}},\"setApprovalForAll(address,bool)\":{\"details\":\"Sets or unsets the approval of a given operator An operator is allowed to transfer all tokens of the sender on their behalf\",\"params\":{\"approved\":\"representing the status of the approval to be set\",\"operator\":\"address to set the approval\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. * Time complexity O(1), guaranteed to always use less than 30 000 gas.\"}},\"title\":\"Standard ERC1155 token\"},\"userdoc\":{\"methods\":{\"isApprovedForAll(address,address)\":{\"notice\":\"Queries the approval status of an operator for a given owner.\"}}}},\"settings\":{\"compilationTarget\":{\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/ERC1155/ERC1155.sol\":\"ERC1155\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/ERC1155/ERC1155.sol\":{\"keccak256\":\"0xd8e6583f45a98380ff10a5656a7ae7ba6a275e0d051043e5842f0d541abd7caa\",\"urls\":[\"bzzr://978cc82d056d10d8cc14b02f35801b10c0c2f87b0adbf6c41bbd622e20ab8cee\",\"dweb:/ipfs/QmYWqCK6moph6oeBEUc1nDaGz4GRdGXmykwKD5rykVbhcU\"]},\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/ERC1155/IERC1155.sol\":{\"keccak256\":\"0x4971631d7de74464fed3e0abac04553e917be5e8cd10b3f825e2e7c39ccc2734\",\"urls\":[\"bzzr://e1e88dfe7440ceab59d4cd604d12e5dc93409a3c5058e497763703027ea7b9e6\",\"dweb:/ipfs/QmRzsL1o6iVEFmqBYCo3XpM4kpvbK7iSJWssXHQ3gHb5uq\"]},\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/ERC1155/IERC1155TokenReceiver.sol\":{\"keccak256\":\"0xca815b5ca57df8f1056b962c2728d6a1e56fc7d9a7869ccee8f5a1ac6075b75d\",\"urls\":[\"bzzr://61df3e61bf24c80714e326ffdc274aaefc342241de3e72374131f613cddbd042\",\"dweb:/ipfs/QmPnF3rGuY2H3Gifvha4dW7fJPptP7wJerHzjz4dpzfTJW\"]},\"openzeppelin-solidity/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0x01aedbf24e121a744262e04c7815b2a4c8ce604dee4829c5cff00943a594ccf3\",\"urls\":[\"bzzr://07dffd4225b87bb0aa8d02cfdb04640c2e02e59b35143accd0dd757775449c61\",\"dweb:/ipfs/QmephAYF5hoymu9qCFK6mURM2kZJCxU4ntUb4KTf1miVPT\"]},\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xe0ed10f53955c35eecb02724538650a155aa940be3f0a54cd3bde6c6b0c6e48c\",\"urls\":[\"bzzr://14f0ef90a240b2aca847fe1489b10965e04ba16cf221f52ed6470d0cad291f9d\",\"dweb:/ipfs/QmXxx5rHfLL57zdgyyyG9MMv4XGN7bpVSc2MuDcaCgto6u\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzzr://292843005e754e752644f767477ec5ad7a1ffc91ddb18c38b8079c62f3993cad\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0x1a8e5072509c5ea7365eb1d48030b9be865140c8fb779968da0a459a0e174a11\",\"urls\":[\"bzzr://4e1d23731da27602b8c552e54fb9976dadf8cf46a8f90a3c8c1b85fe044618b9\",\"dweb:/ipfs/Qmebp4nzPja645c9yXSdJkGq96oU3am3LUnG2K3R7XxyKf\"]}},\"version\":1}","bytecode":"0x608060405234801561001057600080fd5b506100437f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0361007a16565b6100757fd9b67a26000000000000000000000000000000000000000000000000000000006001600160e01b0361007a16565b610148565b7fffffffff00000000000000000000000000000000000000000000000000000000808216141561010b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152602081905260409020805460ff19166001179055565b6112eb806101576000396000f3fe608060405234801561001057600080fd5b506004361061007c5760003560e01c80634e1273f41161005b5780634e1273f414610223578063a22cb46514610396578063e985e9c5146103c4578063f242432a146103f25761007c565b8062fdd58e1461008157806301ffc9a7146100bf5780632eb2c2d6146100fa575b600080fd5b6100ad6004803603604081101561009757600080fd5b506001600160a01b038135169060200135610485565b60408051918252519081900360200190f35b6100e6600480360360208110156100d557600080fd5b50356001600160e01b0319166104f4565b604080519115158252519081900360200190f35b610221600480360360a081101561011057600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561014357600080fd5b82018360208201111561015557600080fd5b803590602001918460208302840111600160201b8311171561017657600080fd5b919390929091602081019035600160201b81111561019357600080fd5b8201836020820111156101a557600080fd5b803590602001918460208302840111600160201b831117156101c657600080fd5b919390929091602081019035600160201b8111156101e357600080fd5b8201836020820111156101f557600080fd5b803590602001918460018302840111600160201b8311171561021657600080fd5b509092509050610513565b005b6103466004803603604081101561023957600080fd5b810190602081018135600160201b81111561025357600080fd5b82018360208201111561026557600080fd5b803590602001918460208302840111600160201b8311171561028657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102d557600080fd5b8201836020820111156102e757600080fd5b803590602001918460208302840111600160201b8311171561030857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506108a0945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561038257818101518382015260200161036a565b505050509050019250505060405180910390f35b610221600480360360408110156103ac57600080fd5b506001600160a01b0381351690602001351515610a07565b6100e6600480360360408110156103da57600080fd5b506001600160a01b0381358116916020013516610a75565b610221600480360360a081101561040857600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561044757600080fd5b82018360208201111561045957600080fd5b803590602001918460018302840111600160201b8311171561047a57600080fd5b509092509050610aa3565b60006001600160a01b0383166104cc5760405162461bcd60e51b815260040180806020018281038252602b815260200180611135602b913960400191505060405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b6001600160e01b03191660009081526020819052604090205460ff1690565b8483146105515760405162461bcd60e51b815260040180806020018281038252602e815260200180611220602e913960400191505060405180910390fd5b6001600160a01b0387166105965760405162461bcd60e51b81526004018080602001828103825260288152602001806111606028913960400191505060405180910390fd5b6001600160a01b0388163314806105d557506001600160a01b038816600090815260026020908152604080832033845290915290205460ff1615156001145b6106105760405162461bcd60e51b815260040180806020018281038252603881526020018061124e6038913960400191505060405180910390fd5b60005b8581101561074057600087878381811061062957fe5b905060200201359050600086868481811061064057fe5b905060200201359050610692816001600085815260200190815260200160002060008e6001600160a01b03166001600160a01b0316815260200190815260200160002054610c7f90919063ffffffff16565b6001600084815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020819055506107156001600084815260200190815260200160002060008c6001600160a01b03166001600160a01b031681526020019081526020016000205482610cc890919063ffffffff16565b60009283526001602081815260408086206001600160a01b038f168752909152909320555001610613565b50866001600160a01b0316886001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb898989896040518080602001806020018381038352878782818152602001925060200280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600083820152604051601f909101601f19169092018290039850909650505050505050a461089633898989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b91829185019084908082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250610d2292505050565b5050505050505050565b606081518351146108e25760405162461bcd60e51b815260040180806020018281038252602e8152602001806111f2602e913960400191505060405180910390fd5b6060835160405190808252806020026020018201604052801561090f578160200160208202803883390190505b50905060005b84518110156109ff5760006001600160a01b031685828151811061093557fe5b60200260200101516001600160a01b031614156109835760405162461bcd60e51b81526004018080602001828103825260348152602001806111be6034913960400191505060405180910390fd5b6001600085838151811061099357fe5b6020026020010151815260200190815260200160002060008683815181106109b757fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106109ec57fe5b6020908102919091010152600101610915565b509392505050565b3360008181526002602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b6001600160a01b038516610ae85760405162461bcd60e51b81526004018080602001828103825260288152602001806111606028913960400191505060405180910390fd5b6001600160a01b038616331480610b2757506001600160a01b038616600090815260026020908152604080832033845290915290205460ff1615156001145b610b625760405162461bcd60e51b815260040180806020018281038252603881526020018061124e6038913960400191505060405180910390fd5b60008481526001602090815260408083206001600160a01b038a168452909152902054610b95908463ffffffff610c7f16565b60008581526001602090815260408083206001600160a01b038b81168552925280832093909355871681522054610bcd908490610cc8565b60008581526001602090815260408083206001600160a01b03808b16808652918452938290209490945580518881529182018790528051928a169233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a4610c77338787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610eff92505050565b505050505050565b6000610cc183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611061565b9392505050565b600082820183811015610cc1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b610d34846001600160a01b03166110f8565b15610c775760405163bc197c8160e01b8082526001600160a01b0388811660048401908152888216602485015260a060448501908152875160a4860152875193949289169363bc197c81938c938c938b938b938b9392916064820191608481019160c4909101906020808a01910280838360005b83811015610dc0578181015183820152602001610da8565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015610dff578181015183820152602001610de7565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015610e3b578181015183820152602001610e23565b50505050905090810190601f168015610e685780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015610e8d57600080fd5b505af1158015610ea1573d6000803e3d6000fd5b505050506040513d6020811015610eb757600080fd5b50516001600160e01b03191614610c775760405162461bcd60e51b81526004018080602001828103825260368152602001806111886036913960400191505060405180910390fd5b610f11846001600160a01b03166110f8565b15610c775760405163f23a6e6160e01b8082526001600160a01b03888116600484019081528882166024850152604484018790526064840186905260a060848501908152855160a4860152855193949289169363f23a6e61938c938c938b938b938b93929160c490910190602085019080838360005b83811015610f9f578181015183820152602001610f87565b50505050905090810190601f168015610fcc5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015610fef57600080fd5b505af1158015611003573d6000803e3d6000fd5b505050506040513d602081101561101957600080fd5b50516001600160e01b03191614610c775760405162461bcd60e51b81526004018080602001828103825260318152602001806112866031913960400191505060405180910390fd5b600081848411156110f05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156110b557818101518382015260200161109d565b50505050905090810190601f1680156110e25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061112c57508115155b94935050505056fe455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a207461726765742061646472657373206d757374206265206e6f6e2d7a65726f455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e4552433131353542617463685265636569766564455243313135353a20736f6d65206164647265737320696e2062617463682062616c616e6365207175657279206973207a65726f455243313135353a206f776e65727320616e6420494473206d75737420686176652073616d65206c656e67746873455243313135353a2049447320616e642076616c756573206d75737420686176652073616d65206c656e67746873455243313135353a206e656564206f70657261746f7220617070726f76616c20666f7220337264207061727479207472616e73666572732e455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e455243313135355265636569766564a265627a7a723058208baccac7f242300ff24fa7941edcfc8884eb3b44aded45e0e7c6eb1d852eb9e064736f6c634300050a0032","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061007c5760003560e01c80634e1273f41161005b5780634e1273f414610223578063a22cb46514610396578063e985e9c5146103c4578063f242432a146103f25761007c565b8062fdd58e1461008157806301ffc9a7146100bf5780632eb2c2d6146100fa575b600080fd5b6100ad6004803603604081101561009757600080fd5b506001600160a01b038135169060200135610485565b60408051918252519081900360200190f35b6100e6600480360360208110156100d557600080fd5b50356001600160e01b0319166104f4565b604080519115158252519081900360200190f35b610221600480360360a081101561011057600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561014357600080fd5b82018360208201111561015557600080fd5b803590602001918460208302840111600160201b8311171561017657600080fd5b919390929091602081019035600160201b81111561019357600080fd5b8201836020820111156101a557600080fd5b803590602001918460208302840111600160201b831117156101c657600080fd5b919390929091602081019035600160201b8111156101e357600080fd5b8201836020820111156101f557600080fd5b803590602001918460018302840111600160201b8311171561021657600080fd5b509092509050610513565b005b6103466004803603604081101561023957600080fd5b810190602081018135600160201b81111561025357600080fd5b82018360208201111561026557600080fd5b803590602001918460208302840111600160201b8311171561028657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102d557600080fd5b8201836020820111156102e757600080fd5b803590602001918460208302840111600160201b8311171561030857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506108a0945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561038257818101518382015260200161036a565b505050509050019250505060405180910390f35b610221600480360360408110156103ac57600080fd5b506001600160a01b0381351690602001351515610a07565b6100e6600480360360408110156103da57600080fd5b506001600160a01b0381358116916020013516610a75565b610221600480360360a081101561040857600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561044757600080fd5b82018360208201111561045957600080fd5b803590602001918460018302840111600160201b8311171561047a57600080fd5b509092509050610aa3565b60006001600160a01b0383166104cc5760405162461bcd60e51b815260040180806020018281038252602b815260200180611135602b913960400191505060405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b6001600160e01b03191660009081526020819052604090205460ff1690565b8483146105515760405162461bcd60e51b815260040180806020018281038252602e815260200180611220602e913960400191505060405180910390fd5b6001600160a01b0387166105965760405162461bcd60e51b81526004018080602001828103825260288152602001806111606028913960400191505060405180910390fd5b6001600160a01b0388163314806105d557506001600160a01b038816600090815260026020908152604080832033845290915290205460ff1615156001145b6106105760405162461bcd60e51b815260040180806020018281038252603881526020018061124e6038913960400191505060405180910390fd5b60005b8581101561074057600087878381811061062957fe5b905060200201359050600086868481811061064057fe5b905060200201359050610692816001600085815260200190815260200160002060008e6001600160a01b03166001600160a01b0316815260200190815260200160002054610c7f90919063ffffffff16565b6001600084815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020819055506107156001600084815260200190815260200160002060008c6001600160a01b03166001600160a01b031681526020019081526020016000205482610cc890919063ffffffff16565b60009283526001602081815260408086206001600160a01b038f168752909152909320555001610613565b50866001600160a01b0316886001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb898989896040518080602001806020018381038352878782818152602001925060200280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600083820152604051601f909101601f19169092018290039850909650505050505050a461089633898989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b91829185019084908082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250610d2292505050565b5050505050505050565b606081518351146108e25760405162461bcd60e51b815260040180806020018281038252602e8152602001806111f2602e913960400191505060405180910390fd5b6060835160405190808252806020026020018201604052801561090f578160200160208202803883390190505b50905060005b84518110156109ff5760006001600160a01b031685828151811061093557fe5b60200260200101516001600160a01b031614156109835760405162461bcd60e51b81526004018080602001828103825260348152602001806111be6034913960400191505060405180910390fd5b6001600085838151811061099357fe5b6020026020010151815260200190815260200160002060008683815181106109b757fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106109ec57fe5b6020908102919091010152600101610915565b509392505050565b3360008181526002602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b6001600160a01b038516610ae85760405162461bcd60e51b81526004018080602001828103825260288152602001806111606028913960400191505060405180910390fd5b6001600160a01b038616331480610b2757506001600160a01b038616600090815260026020908152604080832033845290915290205460ff1615156001145b610b625760405162461bcd60e51b815260040180806020018281038252603881526020018061124e6038913960400191505060405180910390fd5b60008481526001602090815260408083206001600160a01b038a168452909152902054610b95908463ffffffff610c7f16565b60008581526001602090815260408083206001600160a01b038b81168552925280832093909355871681522054610bcd908490610cc8565b60008581526001602090815260408083206001600160a01b03808b16808652918452938290209490945580518881529182018790528051928a169233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a4610c77338787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610eff92505050565b505050505050565b6000610cc183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611061565b9392505050565b600082820183811015610cc1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b610d34846001600160a01b03166110f8565b15610c775760405163bc197c8160e01b8082526001600160a01b0388811660048401908152888216602485015260a060448501908152875160a4860152875193949289169363bc197c81938c938c938b938b938b9392916064820191608481019160c4909101906020808a01910280838360005b83811015610dc0578181015183820152602001610da8565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015610dff578181015183820152602001610de7565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015610e3b578181015183820152602001610e23565b50505050905090810190601f168015610e685780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015610e8d57600080fd5b505af1158015610ea1573d6000803e3d6000fd5b505050506040513d6020811015610eb757600080fd5b50516001600160e01b03191614610c775760405162461bcd60e51b81526004018080602001828103825260368152602001806111886036913960400191505060405180910390fd5b610f11846001600160a01b03166110f8565b15610c775760405163f23a6e6160e01b8082526001600160a01b03888116600484019081528882166024850152604484018790526064840186905260a060848501908152855160a4860152855193949289169363f23a6e61938c938c938b938b938b93929160c490910190602085019080838360005b83811015610f9f578181015183820152602001610f87565b50505050905090810190601f168015610fcc5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015610fef57600080fd5b505af1158015611003573d6000803e3d6000fd5b505050506040513d602081101561101957600080fd5b50516001600160e01b03191614610c775760405162461bcd60e51b81526004018080602001828103825260318152602001806112866031913960400191505060405180910390fd5b600081848411156110f05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156110b557818101518382015260200161109d565b50505050905090810190601f1680156110e25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061112c57508115155b94935050505056fe455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a207461726765742061646472657373206d757374206265206e6f6e2d7a65726f455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e4552433131353542617463685265636569766564455243313135353a20736f6d65206164647265737320696e2062617463682062616c616e6365207175657279206973207a65726f455243313135353a206f776e65727320616e6420494473206d75737420686176652073616d65206c656e67746873455243313135353a2049447320616e642076616c756573206d75737420686176652073616d65206c656e67746873455243313135353a206e656564206f70657261746f7220617070726f76616c20666f7220337264207061727479207472616e73666572732e455243313135353a20676f7420756e6b6e6f776e2076616c75652066726f6d206f6e455243313135355265636569766564a265627a7a723058208baccac7f242300ff24fa7941edcfc8884eb3b44aded45e0e7c6eb1d852eb9e064736f6c634300050a0032","sourceMap":"497:9626:2:-;;;851:380;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;718:40:7;737:20;-1:-1:-1;;;;;718:18:7;:40;:::i;:::-;894:330:2;926:288;-1:-1:-1;;;;;894:18:2;:330;:::i;:::-;497:9626;;1442:190:7;1517:25;;;;;;1509:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1585:33;;:20;:33;;;;;;;;;;:40;;-1:-1:-1;;1585:40:7;1621:4;1585:40;;;1442:190::o;497:9626:2:-;;;;;;;","deployedSourceMap":"497:9626:2:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;497:9626:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1481:205;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1481:205:2;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;915:133:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;915:133:7;-1:-1:-1;;;;;;915:133:7;;:::i;:::-;;;;;;;;;;;;;;;;;;5265:971:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;5265:971:2;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5265:971:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5265:971:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;5265:971:2;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5265:971:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5265:971:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;5265:971:2;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5265:971:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5265:971:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;5265:971:2;;-1:-1:-1;5265:971:2;-1:-1:-1;5265:971:2;:::i;:::-;;1921:594;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1921:594:2;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;1921:594:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1921:594:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;1921:594:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1921:594:2;;;;;;;;-1:-1:-1;1921:594:2;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;1921:594:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1921:594:2;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;1921:594:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1921:594:2;;-1:-1:-1;1921:594:2;;-1:-1:-1;;;;;1921:594:2: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;1921:594:2;;;;;;;;;;;;;;;;;2804:198;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2804:198:2;;;;;;;;;;:::i;3279:147::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3279:147:2;;;;;;;;;;:::i;3980:696::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;3980:696:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;3980:696:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3980:696:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;3980:696:2;;-1:-1:-1;3980:696:2;-1:-1:-1;3980:696:2;:::i;1481:205::-;1548:7;-1:-1:-1;;;;;1575:19:2;;1567:75;;;;-1:-1:-1;;;1567:75:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1659:13:2;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;1659:20:2;;;;;;;;;;;;1481:205::o;915:133:7:-;-1:-1:-1;;;;;;1008:33:7;985:4;1008:33;;;;;;;;;;;;;;915:133::o;5265:971:2:-;5479:27;;;5471:86;;;;-1:-1:-1;;;5471:86:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5575:16:2;;5567:69;;;;-1:-1:-1;;;5567:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5667:18:2;;5675:10;5667:18;;:66;;-1:-1:-1;;;;;;5689:24:2;;;;;;:18;:24;;;;;;;;5714:10;5689:36;;;;;;;;;;:44;;:36;:44;5667:66;5646:169;;;;-1:-1:-1;;;5646:169:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5831:9;5826:253;5846:14;;;5826:253;;;5881:10;5894:3;;5898:1;5894:6;;;;;;;;;;;;;5881:19;;5914:13;5930:6;;5937:1;5930:9;;;;;;;;;;;;;5914:25;;5976:30;6000:5;5976:9;:13;5986:2;5976:13;;;;;;;;;;;:19;5990:4;-1:-1:-1;;;;;5976:19:2;-1:-1:-1;;;;;5976:19:2;;;;;;;;;;;;;:23;;:30;;;;:::i;:::-;5954:9;:13;5964:2;5954:13;;;;;;;;;;;:19;5968:4;-1:-1:-1;;;;;5954:19:2;-1:-1:-1;;;;;5954:19:2;;;;;;;;;;;;:52;;;;6040:28;6050:9;:13;6060:2;6050:13;;;;;;;;;;;:17;6064:2;-1:-1:-1;;;;;6050:17:2;-1:-1:-1;;;;;6050:17:2;;;;;;;;;;;;;6040:5;:9;;:28;;;;:::i;:::-;6020:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;6020:17:2;;;;;;;;;;:48;-1:-1:-1;5862:3:2;5826:253;;;;6126:2;-1:-1:-1;;;;;6094:48:2;6120:4;-1:-1:-1;;;;;6094:48:2;6108:10;-1:-1:-1;;;;;6094:48:2;;6130:3;;6135:6;;6094:48;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;6094:48:2;;;;;;;;;;;;;-1:-1:-1;6094:48:2;;;;;;;1:33:-1;99:1;81:16;;;74:27;6094:48:2;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;6094:48:2;;;;-1:-1:-1;6094:48:2;;-1:-1:-1;;;;;;;6094:48:2;6153:76;6189:10;6201:4;6207:2;6211:3;;6153:76;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;6153:76:2;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6216:6:2;;-1:-1:-1;6216:6:2;;;;6153:76;;;6216:6;;6153:76;6216:6;6153:76;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;;6153:76:2;;;;137:4:-1;6153:76:2;;;;;;;;;;;;;;;;;;-1:-1:-1;6224:4:2;;-1:-1:-1;6224:4:2;;;;6153:76;;6224:4;;;;6153:76;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;6153:35:2;;-1:-1:-1;;;6153:76:2:i;:::-;5265:971;;;;;;;;:::o;1921:594::-;2059:16;2116:3;:10;2099:6;:13;:27;2091:86;;;;-1:-1:-1;;;2091:86:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2188:30;2235:6;:13;2221:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;2221:28:2;-1:-1:-1;2188:61:2;-1:-1:-1;2265:9:2;2260:218;2284:6;:13;2280:1;:17;2260:218;;;2347:1;-1:-1:-1;;;;;2326:23:2;:6;2333:1;2326:9;;;;;;;;;;;;;;-1:-1:-1;;;;;2326:23:2;;;2318:88;;;;-1:-1:-1;;;2318:88:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2439:9;:17;2449:3;2453:1;2449:6;;;;;;;;;;;;;;2439:17;;;;;;;;;;;:28;2457:6;2464:1;2457:9;;;;;;;;;;;;;;-1:-1:-1;;;;;2439:28:2;-1:-1:-1;;;;;2439:28:2;;;;;;;;;;;;;2420:13;2434:1;2420:16;;;;;;;;;;;;;;;;;:47;2299:3;;2260:218;;;-1:-1:-1;2495:13:2;1921:594;-1:-1:-1;;;1921:594:2:o;2804:198::-;2902:10;2883:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;2883:40:2;;;;;;;;;;;;:51;;-1:-1:-1;;2883:51:2;;;;;;;;;;2949:46;;;;;;;2883:40;;2902:10;2949:46;;;;;;;;;;;2804:198;;:::o;3279:147::-;-1:-1:-1;;;;;3384:25:2;;;3361:4;3384:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;3279:147::o;3980:696::-;-1:-1:-1;;;;;4165:16:2;;4157:69;;;;-1:-1:-1;;;4157:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4257:18:2;;4265:10;4257:18;;:66;;-1:-1:-1;;;;;;4279:24:2;;;;;;:18;:24;;;;;;;;4304:10;4279:36;;;;;;;;;;:44;;:36;:44;4257:66;4236:169;;;;-1:-1:-1;;;4236:169:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4438:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;4438:19:2;;;;;;;;;;:30;;4462:5;4438:30;:23;:30;:::i;:::-;4416:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;4416:19:2;;;;;;;;;;:52;;;;4508:17;;;;;;4498:28;;:5;;:9;:28::i;:::-;4478:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;4478:17:2;;;;;;;;;;;;;:48;;;;4542:47;;;;;;;;;;;;;;;;;4557:10;;4542:47;;;;;;;;;4600:69;4631:10;4643:4;4649:2;4653;4657:5;4664:4;;4600:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;4600:30:2;;-1:-1:-1;;;4600:69:2:i;:::-;3980:696;;;;;;:::o;1274:134:9:-;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1351:50;1274:134;-1:-1:-1;;;1274:134:9:o;834:176::-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:9;;;;;;;;;;;;;;;;;;;;;;;;;;;9573:548:2;9816:15;:2;-1:-1:-1;;;;;9816:13:2;;:15::i;:::-;9813:302;;;9872:83;;-1:-1:-1;;;9872:83:2;;;-1:-1:-1;;;;;9872:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9959:57;;:48;;;;;;9921:8;;9931:4;;9937:3;;9942:6;;9950:4;;9872:83;;;;;;;;;;;;;;;;;;;;;;;;-1:-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;9872:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;9872:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;9872:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9872:83:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9872:83:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9872:83:2;-1:-1:-1;;;;;;9872:144:2;;9847:257;;;;-1:-1:-1;;;9847:257:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9041:526;9259:15;:2;-1:-1:-1;;;;;9259:13:2;;:15::i;:::-;9256:305;;;9315:76;;-1:-1:-1;;;9315:76:2;;;-1:-1:-1;;;;;9315:76:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9415:52;;:43;;;;;;9359:8;;9369:4;;9375:2;;9379:5;;9386:4;;9315:76;;;;;;;;;;;;;;-1:-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;9315:76:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9315:76:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9315:76:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9315:76:2;-1:-1:-1;;;;;;9315:152:2;;9290:260;;;;-1:-1:-1;;;9290:260:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1732:187:9;1818:7;1853:12;1845:6;;;;1837:29;;;;-1:-1:-1;;;1837:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1837:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1888:5:9;;;1732:187::o;686:610:11:-;746:4;1207:20;;1052:66;1246:23;;;;;;:42;;-1:-1:-1;1273:15:11;;;1246:42;1238:51;686:610;-1:-1:-1;;;;686:610:11:o","source":"pragma solidity ^0.5.0;\n\nimport \"./IERC1155.sol\";\nimport \"./IERC1155TokenReceiver.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"openzeppelin-solidity/contracts/utils/Address.sol\";\nimport \"openzeppelin-solidity/contracts/introspection/ERC165.sol\";\n\n/**\n * @title Standard ERC1155 token\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n */\ncontract ERC1155 is ERC165, IERC1155\n{\n using SafeMath for uint256;\n using Address for address;\n\n // Mapping from token ID to owner balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n constructor()\n public\n {\n _registerInterface(\n ERC1155(0).safeTransferFrom.selector ^\n ERC1155(0).safeBatchTransferFrom.selector ^\n ERC1155(0).balanceOf.selector ^\n ERC1155(0).balanceOfBatch.selector ^\n ERC1155(0).setApprovalForAll.selector ^\n ERC1155(0).isApprovedForAll.selector\n );\n }\n\n /**\n @dev Get the specified address' balance for token with specified ID.\n @param owner The address of the token holder\n @param id ID of the token\n @return The owner's balance of the token type requested\n */\n function balanceOf(address owner, uint256 id) public view returns (uint256) {\n require(owner != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][owner];\n }\n\n /**\n @dev Get the balance of multiple account/token pairs\n @param owners The addresses of the token holders\n @param ids IDs of the tokens\n @return Balances for each owner and token id pair\n */\n function balanceOfBatch(\n address[] memory owners,\n uint256[] memory ids\n )\n public\n view\n returns (uint256[] memory)\n {\n require(owners.length == ids.length, \"ERC1155: owners and IDs must have same lengths\");\n\n uint256[] memory batchBalances = new uint256[](owners.length);\n\n for (uint256 i = 0; i < owners.length; ++i) {\n require(owners[i] != address(0), \"ERC1155: some address in batch balance query is zero\");\n batchBalances[i] = _balances[ids[i]][owners[i]];\n }\n\n return batchBalances;\n }\n\n /**\n * @dev Sets or unsets the approval of a given operator\n * An operator is allowed to transfer all tokens of the sender on their behalf\n * @param operator address to set the approval\n * @param approved representing the status of the approval to be set\n */\n function setApprovalForAll(address operator, bool approved) external {\n _operatorApprovals[msg.sender][operator] = approved;\n emit ApprovalForAll(msg.sender, operator, approved);\n }\n\n /**\n @notice Queries the approval status of an operator for a given owner.\n @param owner The owner of the Tokens\n @param operator Address of authorized operator\n @return True if the operator is approved, false if not\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n @dev Transfers `value` amount of an `id` from the `from` address to the `to` address specified.\n Caller must be approved to manage the tokens being transferred out of the `from` account.\n If `to` is a smart contract, will call `onERC1155Received` on `to` and act appropriately.\n @param from Source address\n @param to Target address\n @param id ID of the token type\n @param value Transfer amount\n @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n {\n require(to != address(0), \"ERC1155: target address must be non-zero\");\n require(\n from == msg.sender || _operatorApprovals[from][msg.sender] == true,\n \"ERC1155: need operator approval for 3rd party transfers.\"\n );\n\n _balances[id][from] = _balances[id][from].sub(value);\n _balances[id][to] = value.add(_balances[id][to]);\n\n emit TransferSingle(msg.sender, from, to, id, value);\n\n _doSafeTransferAcceptanceCheck(msg.sender, from, to, id, value, data);\n }\n\n /**\n @dev Transfers `values` amount(s) of `ids` from the `from` address to the\n `to` address specified. Caller must be approved to manage the tokens being\n transferred out of the `from` account. If `to` is a smart contract, will\n call `onERC1155BatchReceived` on `to` and act appropriately.\n @param from Source address\n @param to Target address\n @param ids IDs of each token type\n @param values Transfer amounts per token type\n @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n {\n require(ids.length == values.length, \"ERC1155: IDs and values must have same lengths\");\n require(to != address(0), \"ERC1155: target address must be non-zero\");\n require(\n from == msg.sender || _operatorApprovals[from][msg.sender] == true,\n \"ERC1155: need operator approval for 3rd party transfers.\"\n );\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 value = values[i];\n\n _balances[id][from] = _balances[id][from].sub(value);\n _balances[id][to] = value.add(_balances[id][to]);\n }\n\n emit TransferBatch(msg.sender, from, to, ids, values);\n\n _doSafeBatchTransferAcceptanceCheck(msg.sender, from, to, ids, values, data);\n }\n\n /**\n * @dev Internal function to mint an amount of a token with the given ID\n * @param to The address that will own the minted token\n * @param id ID of the token to be minted\n * @param value Amount of the token to be minted\n * @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver\n */\n function _mint(address to, uint256 id, uint256 value, bytes memory data) internal {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n\n _balances[id][to] = value.add(_balances[id][to]);\n emit TransferSingle(msg.sender, address(0), to, id, value);\n\n _doSafeTransferAcceptanceCheck(msg.sender, address(0), to, id, value, data);\n }\n\n /**\n * @dev Internal function to batch mint amounts of tokens with the given IDs\n * @param to The address that will own the minted token\n * @param ids IDs of the tokens to be minted\n * @param values Amounts of the tokens to be minted\n * @param data Data forwarded to `onERC1155Received` if `to` is a contract receiver\n */\n function _batchMint(address to, uint256[] memory ids, uint256[] memory values, bytes memory data) internal {\n require(to != address(0), \"ERC1155: batch mint to the zero address\");\n require(ids.length == values.length, \"ERC1155: IDs and values must have same lengths\");\n\n for(uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = values[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(msg.sender, address(0), to, ids, values);\n\n _doSafeBatchTransferAcceptanceCheck(msg.sender, address(0), to, ids, values, data);\n }\n\n /**\n * @dev Internal function to burn an amount of a token with the given ID\n * @param owner Account which owns the token to be burnt\n * @param id ID of the token to be burnt\n * @param value Amount of the token to be burnt\n */\n function _burn(address owner, uint256 id, uint256 value) internal {\n _balances[id][owner] = _balances[id][owner].sub(value);\n emit TransferSingle(msg.sender, owner, address(0), id, value);\n }\n\n /**\n * @dev Internal function to batch burn an amounts of tokens with the given IDs\n * @param owner Account which owns the token to be burnt\n * @param ids IDs of the tokens to be burnt\n * @param values Amounts of the tokens to be burnt\n */\n function _batchBurn(address owner, uint256[] memory ids, uint256[] memory values) internal {\n require(ids.length == values.length, \"ERC1155: IDs and values must have same lengths\");\n\n for(uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][owner] = _balances[ids[i]][owner].sub(values[i]);\n }\n\n emit TransferBatch(msg.sender, owner, address(0), ids, values);\n }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 value,\n bytes memory data\n )\n internal\n {\n if(to.isContract()) {\n require(\n IERC1155TokenReceiver(to).onERC1155Received(operator, from, id, value, data) ==\n IERC1155TokenReceiver(to).onERC1155Received.selector,\n \"ERC1155: got unknown value from onERC1155Received\"\n );\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory values,\n bytes memory data\n )\n internal\n {\n if(to.isContract()) {\n require(\n IERC1155TokenReceiver(to).onERC1155BatchReceived(operator, from, ids, values, data) == IERC1155TokenReceiver(to).onERC1155BatchReceived.selector,\n \"ERC1155: got unknown value from onERC1155BatchReceived\"\n );\n }\n }\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.2.5","updatedAt":"2020-09-16T22:12:38.846Z","devdoc":{"details":"Implementation of the basic standard multi-token. See https://eips.ethereum.org/EIPS/eip-1155 Originally based on code by Enjin: https://github.com/enjin/erc-1155","methods":{"balanceOf(address,uint256)":{"details":"Get the specified address' balance for token with specified ID.","params":{"id":"ID of the token","owner":"The address of the token holder"},"return":"The owner's balance of the token type requested"},"balanceOfBatch(address[],uint256[])":{"details":"Get the balance of multiple account/token pairs","params":{"ids":"IDs of the tokens","owners":"The addresses of the token holders"},"return":"Balances for each owner and token id pair"},"isApprovedForAll(address,address)":{"params":{"operator":"Address of authorized operator","owner":"The owner of the Tokens"},"return":"True if the operator is approved, false if not"},"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)":{"details":"Transfers `values` amount(s) of `ids` from the `from` address to the `to` address specified. Caller must be approved to manage the tokens being transferred out of the `from` account. If `to` is a smart contract, will call `onERC1155BatchReceived` on `to` and act appropriately.","params":{"data":"Data forwarded to `onERC1155Received` if `to` is a contract receiver","from":"Source address","ids":"IDs of each token type","to":"Target address","values":"Transfer amounts per token type"}},"safeTransferFrom(address,address,uint256,uint256,bytes)":{"details":"Transfers `value` amount of an `id` from the `from` address to the `to` address specified. Caller must be approved to manage the tokens being transferred out of the `from` account. If `to` is a smart contract, will call `onERC1155Received` on `to` and act appropriately.","params":{"data":"Data forwarded to `onERC1155Received` if `to` is a contract receiver","from":"Source address","id":"ID of the token type","to":"Target address","value":"Transfer amount"}},"setApprovalForAll(address,bool)":{"details":"Sets or unsets the approval of a given operator An operator is allowed to transfer all tokens of the sender on their behalf","params":{"approved":"representing the status of the approval to be set","operator":"address to set the approval"}},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}. * Time complexity O(1), guaranteed to always use less than 30 000 gas."}},"title":"Standard ERC1155 token"},"userdoc":{"methods":{"isApprovedForAll(address,address)":{"notice":"Queries the approval status of an operator for a given owner."}}}}

@@ -1,1 +0,1 @@

{"contractName":"ERC1155TokenReceiver","abi":[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"from","type":"address"},{"name":"ids","type":"uint256[]"},{"name":"values","type":"uint256[]"},{"name":"data","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"from","type":"address"},{"name":"id","type":"uint256"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"ids\",\"type\":\"uint256[]\"},{\"name\":\"values\",\"type\":\"uint256[]\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"id\",\"type\":\"uint256\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"methods\":{\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"details\":\"Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` (i.e. 0xbc197c81, or its own function selector).\",\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"ids\":\"An array containing ids of each token being transferred (order and length must match values array)\",\"operator\":\"The address which initiated the batch transfer (i.e. msg.sender)\",\"values\":\"An array containing amounts of each token being transferred (order and length must match ids array)\"},\"return\":\"`bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\"},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"details\":\"Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` (i.e. 0xf23a6e61, or its own function selector).\",\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"id\":\"The ID of the token being transferred\",\"operator\":\"The address which initiated the transfer (i.e. msg.sender)\",\"value\":\"The amount of tokens being transferred\"},\"return\":\"`bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\"},\"supportsInterface(bytes4)\":{\"details\":\"See `IERC165.supportsInterface`. * Time complexity O(1), guaranteed to always use less than 30 000 gas.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/denis/projects/gnosis/conditional-tokens-contracts/contracts/ERC1155/ERC1155TokenReceiver.sol\":\"ERC1155TokenReceiver\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/denis/projects/gnosis/conditional-tokens-contracts/contracts/ERC1155/ERC1155TokenReceiver.sol\":{\"keccak256\":\"0x5d1e709c759b9bd72865c8608582d66fc338fde3a77f41abb04ae943915a5695\",\"urls\":[\"bzzr://55e5a597486430ad437bb8c8f0c93cf573b833fa84ccf64a25afaa01c761b839\",\"dweb:/ipfs/QmQ727N1676jG9F5iwakSG2RNeV82TVBGJHgHPmHxib8ah\"]},\"/Users/denis/projects/gnosis/conditional-tokens-contracts/contracts/ERC1155/IERC1155TokenReceiver.sol\":{\"keccak256\":\"0xca815b5ca57df8f1056b962c2728d6a1e56fc7d9a7869ccee8f5a1ac6075b75d\",\"urls\":[\"bzzr://61df3e61bf24c80714e326ffdc274aaefc342241de3e72374131f613cddbd042\",\"dweb:/ipfs/QmPnF3rGuY2H3Gifvha4dW7fJPptP7wJerHzjz4dpzfTJW\"]},\"openzeppelin-solidity/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0xac2eacd7e7762e275442f28f21d821544df5aae2ed7698af13be8c41b7005e2e\",\"urls\":[\"bzzr://43e901f6f210568ebc1d3591da3ce6a9d10796b854767a9c6e3da10305a8a332\",\"dweb:/ipfs/QmQhfx2Ufr8a2gFXm3KogL66xGgAuAWMwcamkWFKGG6Vya\"]},\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x661553e43d7c4fbb2de504e5999fd5c104d367488350ed5bf023031bd1ba5ac5\",\"urls\":[\"bzzr://fc2ba15143ce3a00268ecd15fc98eb2469b18bfe27a64bbab0ac6446f161c739\",\"dweb:/ipfs/QmV7wjtRf11ibUHh4g8JjuhMpy68pPhV95L2y46UBoRfsZ\"]}},\"version\":1}","bytecode":"0x","deployedBytecode":"0x","sourceMap":"","deployedSourceMap":"","source":"pragma solidity ^0.5.0;\n\nimport \"./IERC1155TokenReceiver.sol\";\nimport \"openzeppelin-solidity/contracts/introspection/ERC165.sol\";\n\ncontract ERC1155TokenReceiver is ERC165, IERC1155TokenReceiver {\n constructor() public {\n _registerInterface(\n ERC1155TokenReceiver(0).onERC1155Received.selector ^\n ERC1155TokenReceiver(0).onERC1155BatchReceived.selector\n );\n }\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.0.16","updatedAt":"2019-12-09T11:33:40.943Z","devdoc":{"methods":{"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"details":"Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` (i.e. 0xbc197c81, or its own function selector).","params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","ids":"An array containing ids of each token being transferred (order and length must match values array)","operator":"The address which initiated the batch transfer (i.e. msg.sender)","values":"An array containing amounts of each token being transferred (order and length must match ids array)"},"return":"`bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed"},"onERC1155Received(address,address,uint256,uint256,bytes)":{"details":"Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` (i.e. 0xf23a6e61, or its own function selector).","params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","id":"The ID of the token being transferred","operator":"The address which initiated the transfer (i.e. msg.sender)","value":"The amount of tokens being transferred"},"return":"`bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed"},"supportsInterface(bytes4)":{"details":"See `IERC165.supportsInterface`. * Time complexity O(1), guaranteed to always use less than 30 000 gas."}}},"userdoc":{"methods":{}}}
{"contractName":"ERC1155TokenReceiver","abi":[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"from","type":"address"},{"name":"ids","type":"uint256[]"},{"name":"values","type":"uint256[]"},{"name":"data","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"from","type":"address"},{"name":"id","type":"uint256"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"ids\",\"type\":\"uint256[]\"},{\"name\":\"values\",\"type\":\"uint256[]\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"id\",\"type\":\"uint256\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"methods\":{\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"details\":\"Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` (i.e. 0xbc197c81, or its own function selector).\",\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"ids\":\"An array containing ids of each token being transferred (order and length must match values array)\",\"operator\":\"The address which initiated the batch transfer (i.e. msg.sender)\",\"values\":\"An array containing amounts of each token being transferred (order and length must match ids array)\"},\"return\":\"`bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\"},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"details\":\"Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` (i.e. 0xf23a6e61, or its own function selector).\",\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"id\":\"The ID of the token being transferred\",\"operator\":\"The address which initiated the transfer (i.e. msg.sender)\",\"value\":\"The amount of tokens being transferred\"},\"return\":\"`bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. * Time complexity O(1), guaranteed to always use less than 30 000 gas.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/ERC1155/ERC1155TokenReceiver.sol\":\"ERC1155TokenReceiver\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/ERC1155/ERC1155TokenReceiver.sol\":{\"keccak256\":\"0x5d1e709c759b9bd72865c8608582d66fc338fde3a77f41abb04ae943915a5695\",\"urls\":[\"bzzr://55e5a597486430ad437bb8c8f0c93cf573b833fa84ccf64a25afaa01c761b839\",\"dweb:/ipfs/QmQ727N1676jG9F5iwakSG2RNeV82TVBGJHgHPmHxib8ah\"]},\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/ERC1155/IERC1155TokenReceiver.sol\":{\"keccak256\":\"0xca815b5ca57df8f1056b962c2728d6a1e56fc7d9a7869ccee8f5a1ac6075b75d\",\"urls\":[\"bzzr://61df3e61bf24c80714e326ffdc274aaefc342241de3e72374131f613cddbd042\",\"dweb:/ipfs/QmPnF3rGuY2H3Gifvha4dW7fJPptP7wJerHzjz4dpzfTJW\"]},\"openzeppelin-solidity/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0x01aedbf24e121a744262e04c7815b2a4c8ce604dee4829c5cff00943a594ccf3\",\"urls\":[\"bzzr://07dffd4225b87bb0aa8d02cfdb04640c2e02e59b35143accd0dd757775449c61\",\"dweb:/ipfs/QmephAYF5hoymu9qCFK6mURM2kZJCxU4ntUb4KTf1miVPT\"]},\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xe0ed10f53955c35eecb02724538650a155aa940be3f0a54cd3bde6c6b0c6e48c\",\"urls\":[\"bzzr://14f0ef90a240b2aca847fe1489b10965e04ba16cf221f52ed6470d0cad291f9d\",\"dweb:/ipfs/QmXxx5rHfLL57zdgyyyG9MMv4XGN7bpVSc2MuDcaCgto6u\"]}},\"version\":1}","bytecode":"0x","deployedBytecode":"0x","sourceMap":"","deployedSourceMap":"","source":"pragma solidity ^0.5.0;\n\nimport \"./IERC1155TokenReceiver.sol\";\nimport \"openzeppelin-solidity/contracts/introspection/ERC165.sol\";\n\ncontract ERC1155TokenReceiver is ERC165, IERC1155TokenReceiver {\n constructor() public {\n _registerInterface(\n ERC1155TokenReceiver(0).onERC1155Received.selector ^\n ERC1155TokenReceiver(0).onERC1155BatchReceived.selector\n );\n }\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.2.5","updatedAt":"2020-09-16T22:12:38.856Z","devdoc":{"methods":{"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"details":"Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` (i.e. 0xbc197c81, or its own function selector).","params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","ids":"An array containing ids of each token being transferred (order and length must match values array)","operator":"The address which initiated the batch transfer (i.e. msg.sender)","values":"An array containing amounts of each token being transferred (order and length must match ids array)"},"return":"`bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed"},"onERC1155Received(address,address,uint256,uint256,bytes)":{"details":"Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` (i.e. 0xf23a6e61, or its own function selector).","params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","id":"The ID of the token being transferred","operator":"The address which initiated the transfer (i.e. msg.sender)","value":"The amount of tokens being transferred"},"return":"`bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed"},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}. * Time complexity O(1), guaranteed to always use less than 30 000 gas."}}},"userdoc":{"methods":{}}}

@@ -1,1 +0,1 @@

{"contractName":"ERC165","abi":[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"details\":\"Implementation of the `IERC165` interface. * Contracts may inherit from this and call `_registerInterface` to declare their support of an interface.\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See `IERC165.supportsInterface`. * Time complexity O(1), guaranteed to always use less than 30 000 gas.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"openzeppelin-solidity/contracts/introspection/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"openzeppelin-solidity/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0xac2eacd7e7762e275442f28f21d821544df5aae2ed7698af13be8c41b7005e2e\",\"urls\":[\"bzzr://43e901f6f210568ebc1d3591da3ce6a9d10796b854767a9c6e3da10305a8a332\",\"dweb:/ipfs/QmQhfx2Ufr8a2gFXm3KogL66xGgAuAWMwcamkWFKGG6Vya\"]},\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x661553e43d7c4fbb2de504e5999fd5c104d367488350ed5bf023031bd1ba5ac5\",\"urls\":[\"bzzr://fc2ba15143ce3a00268ecd15fc98eb2469b18bfe27a64bbab0ac6446f161c739\",\"dweb:/ipfs/QmV7wjtRf11ibUHh4g8JjuhMpy68pPhV95L2y46UBoRfsZ\"]}},\"version\":1}","bytecode":"0x","deployedBytecode":"0x","sourceMap":"","deployedSourceMap":"","source":"pragma solidity ^0.5.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the `IERC165` interface.\n *\n * Contracts may inherit from this and call `_registerInterface` to declare\n * their support of an interface.\n */\ncontract ERC165 is IERC165 {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n constructor () internal {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See `IERC165.supportsInterface`.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See `IERC165.supportsInterface`.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.0.16","updatedAt":"2019-12-09T11:33:40.947Z","devdoc":{"details":"Implementation of the `IERC165` interface. * Contracts may inherit from this and call `_registerInterface` to declare their support of an interface.","methods":{"supportsInterface(bytes4)":{"details":"See `IERC165.supportsInterface`. * Time complexity O(1), guaranteed to always use less than 30 000 gas."}}},"userdoc":{"methods":{}}}
{"contractName":"ERC165","abi":[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC165} interface. * Contracts may inherit from this and call {_registerInterface} to declare their support of an interface.\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. * Time complexity O(1), guaranteed to always use less than 30 000 gas.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"openzeppelin-solidity/contracts/introspection/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"openzeppelin-solidity/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0x01aedbf24e121a744262e04c7815b2a4c8ce604dee4829c5cff00943a594ccf3\",\"urls\":[\"bzzr://07dffd4225b87bb0aa8d02cfdb04640c2e02e59b35143accd0dd757775449c61\",\"dweb:/ipfs/QmephAYF5hoymu9qCFK6mURM2kZJCxU4ntUb4KTf1miVPT\"]},\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xe0ed10f53955c35eecb02724538650a155aa940be3f0a54cd3bde6c6b0c6e48c\",\"urls\":[\"bzzr://14f0ef90a240b2aca847fe1489b10965e04ba16cf221f52ed6470d0cad291f9d\",\"dweb:/ipfs/QmXxx5rHfLL57zdgyyyG9MMv4XGN7bpVSc2MuDcaCgto6u\"]}},\"version\":1}","bytecode":"0x","deployedBytecode":"0x","sourceMap":"","deployedSourceMap":"","source":"pragma solidity ^0.5.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\ncontract ERC165 is IERC165 {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n constructor () internal {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.2.5","updatedAt":"2020-09-16T22:12:38.864Z","devdoc":{"details":"Implementation of the {IERC165} interface. * Contracts may inherit from this and call {_registerInterface} to declare their support of an interface.","methods":{"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}. * Time complexity O(1), guaranteed to always use less than 30 000 gas."}}},"userdoc":{"methods":{}}}

@@ -1,1 +0,1 @@

{"contractName":"IERC1155","abi":[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"ids","type":"uint256[]"},{"indexed":false,"name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"value","type":"string"},{"indexed":true,"name":"id","type":"uint256"}],"name":"URI","type":"event"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owners","type":"address[]"},{"name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"id","type":"uint256"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"ids","type":"uint256[]"},{"name":"values","type":"uint256[]"},{"name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"ids\",\"type\":\"uint256[]\"},{\"name\":\"values\",\"type\":\"uint256[]\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owners\",\"type\":\"address[]\"},{\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"id\",\"type\":\"uint256\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"See https://eips.ethereum.org/EIPS/eip-1155\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) to learn more about how these ids are created. * This function call must use less than 30 000 gas.\"}},\"title\":\"ERC-1155 Multi Token Standard basic interface\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/denis/projects/gnosis/conditional-tokens-contracts/contracts/ERC1155/IERC1155.sol\":\"IERC1155\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/denis/projects/gnosis/conditional-tokens-contracts/contracts/ERC1155/IERC1155.sol\":{\"keccak256\":\"0x4971631d7de74464fed3e0abac04553e917be5e8cd10b3f825e2e7c39ccc2734\",\"urls\":[\"bzzr://e1e88dfe7440ceab59d4cd604d12e5dc93409a3c5058e497763703027ea7b9e6\",\"dweb:/ipfs/QmRzsL1o6iVEFmqBYCo3XpM4kpvbK7iSJWssXHQ3gHb5uq\"]},\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x661553e43d7c4fbb2de504e5999fd5c104d367488350ed5bf023031bd1ba5ac5\",\"urls\":[\"bzzr://fc2ba15143ce3a00268ecd15fc98eb2469b18bfe27a64bbab0ac6446f161c739\",\"dweb:/ipfs/QmV7wjtRf11ibUHh4g8JjuhMpy68pPhV95L2y46UBoRfsZ\"]}},\"version\":1}","bytecode":"0x","deployedBytecode":"0x","sourceMap":"","deployedSourceMap":"","source":"pragma solidity ^0.5.0;\n\nimport \"openzeppelin-solidity/contracts/introspection/IERC165.sol\";\n\n/**\n @title ERC-1155 Multi Token Standard basic interface\n @dev See https://eips.ethereum.org/EIPS/eip-1155\n */\ncontract IERC1155 is IERC165 {\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n event URI(string value, uint256 indexed id);\n\n function balanceOf(address owner, uint256 id) public view returns (uint256);\n\n function balanceOfBatch(address[] memory owners, uint256[] memory ids) public view returns (uint256[] memory);\n\n function setApprovalForAll(address operator, bool approved) external;\n\n function isApprovedForAll(address owner, address operator) external view returns (bool);\n\n function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes calldata data) external;\n\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata values, bytes calldata data) external;\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.0.16","updatedAt":"2019-12-09T11:33:40.944Z","devdoc":{"details":"See https://eips.ethereum.org/EIPS/eip-1155","methods":{"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) to learn more about how these ids are created. * This function call must use less than 30 000 gas."}},"title":"ERC-1155 Multi Token Standard basic interface"},"userdoc":{"methods":{}}}
{"contractName":"IERC1155","abi":[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"ids","type":"uint256[]"},{"indexed":false,"name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"value","type":"string"},{"indexed":true,"name":"id","type":"uint256"}],"name":"URI","type":"event"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owners","type":"address[]"},{"name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"id","type":"uint256"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"ids","type":"uint256[]"},{"name":"values","type":"uint256[]"},{"name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"ids\",\"type\":\"uint256[]\"},{\"name\":\"values\",\"type\":\"uint256[]\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owners\",\"type\":\"address[]\"},{\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"id\",\"type\":\"uint256\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"See https://eips.ethereum.org/EIPS/eip-1155\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. * This function call must use less than 30 000 gas.\"}},\"title\":\"ERC-1155 Multi Token Standard basic interface\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/ERC1155/IERC1155.sol\":\"IERC1155\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/ERC1155/IERC1155.sol\":{\"keccak256\":\"0x4971631d7de74464fed3e0abac04553e917be5e8cd10b3f825e2e7c39ccc2734\",\"urls\":[\"bzzr://e1e88dfe7440ceab59d4cd604d12e5dc93409a3c5058e497763703027ea7b9e6\",\"dweb:/ipfs/QmRzsL1o6iVEFmqBYCo3XpM4kpvbK7iSJWssXHQ3gHb5uq\"]},\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xe0ed10f53955c35eecb02724538650a155aa940be3f0a54cd3bde6c6b0c6e48c\",\"urls\":[\"bzzr://14f0ef90a240b2aca847fe1489b10965e04ba16cf221f52ed6470d0cad291f9d\",\"dweb:/ipfs/QmXxx5rHfLL57zdgyyyG9MMv4XGN7bpVSc2MuDcaCgto6u\"]}},\"version\":1}","bytecode":"0x","deployedBytecode":"0x","sourceMap":"","deployedSourceMap":"","source":"pragma solidity ^0.5.0;\n\nimport \"openzeppelin-solidity/contracts/introspection/IERC165.sol\";\n\n/**\n @title ERC-1155 Multi Token Standard basic interface\n @dev See https://eips.ethereum.org/EIPS/eip-1155\n */\ncontract IERC1155 is IERC165 {\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n event URI(string value, uint256 indexed id);\n\n function balanceOf(address owner, uint256 id) public view returns (uint256);\n\n function balanceOfBatch(address[] memory owners, uint256[] memory ids) public view returns (uint256[] memory);\n\n function setApprovalForAll(address operator, bool approved) external;\n\n function isApprovedForAll(address owner, address operator) external view returns (bool);\n\n function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes calldata data) external;\n\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata values, bytes calldata data) external;\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.2.5","updatedAt":"2020-09-16T22:12:38.858Z","devdoc":{"details":"See https://eips.ethereum.org/EIPS/eip-1155","methods":{"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. * This function call must use less than 30 000 gas."}},"title":"ERC-1155 Multi Token Standard basic interface"},"userdoc":{"methods":{}}}

@@ -1,1 +0,1 @@

{"contractName":"IERC1155TokenReceiver","abi":[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"from","type":"address"},{"name":"id","type":"uint256"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"from","type":"address"},{"name":"ids","type":"uint256[]"},{"name":"values","type":"uint256[]"},{"name":"data","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"ids\",\"type\":\"uint256[]\"},{\"name\":\"values\",\"type\":\"uint256[]\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"id\",\"type\":\"uint256\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"See https://eips.ethereum.org/EIPS/eip-1155\",\"methods\":{\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"details\":\"Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` (i.e. 0xbc197c81, or its own function selector).\",\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"ids\":\"An array containing ids of each token being transferred (order and length must match values array)\",\"operator\":\"The address which initiated the batch transfer (i.e. msg.sender)\",\"values\":\"An array containing amounts of each token being transferred (order and length must match ids array)\"},\"return\":\"`bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\"},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"details\":\"Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` (i.e. 0xf23a6e61, or its own function selector).\",\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"id\":\"The ID of the token being transferred\",\"operator\":\"The address which initiated the transfer (i.e. msg.sender)\",\"value\":\"The amount of tokens being transferred\"},\"return\":\"`bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) to learn more about how these ids are created. * This function call must use less than 30 000 gas.\"}},\"title\":\"ERC-1155 Multi Token Receiver Interface\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/denis/projects/gnosis/conditional-tokens-contracts/contracts/ERC1155/IERC1155TokenReceiver.sol\":\"IERC1155TokenReceiver\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/denis/projects/gnosis/conditional-tokens-contracts/contracts/ERC1155/IERC1155TokenReceiver.sol\":{\"keccak256\":\"0xca815b5ca57df8f1056b962c2728d6a1e56fc7d9a7869ccee8f5a1ac6075b75d\",\"urls\":[\"bzzr://61df3e61bf24c80714e326ffdc274aaefc342241de3e72374131f613cddbd042\",\"dweb:/ipfs/QmPnF3rGuY2H3Gifvha4dW7fJPptP7wJerHzjz4dpzfTJW\"]},\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x661553e43d7c4fbb2de504e5999fd5c104d367488350ed5bf023031bd1ba5ac5\",\"urls\":[\"bzzr://fc2ba15143ce3a00268ecd15fc98eb2469b18bfe27a64bbab0ac6446f161c739\",\"dweb:/ipfs/QmV7wjtRf11ibUHh4g8JjuhMpy68pPhV95L2y46UBoRfsZ\"]}},\"version\":1}","bytecode":"0x","deployedBytecode":"0x","sourceMap":"","deployedSourceMap":"","source":"pragma solidity ^0.5.0;\n\nimport \"openzeppelin-solidity/contracts/introspection/IERC165.sol\";\n\n/**\n @title ERC-1155 Multi Token Receiver Interface\n @dev See https://eips.ethereum.org/EIPS/eip-1155\n*/\ncontract IERC1155TokenReceiver is IERC165 {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.0.16","updatedAt":"2019-12-09T11:33:40.945Z","devdoc":{"details":"See https://eips.ethereum.org/EIPS/eip-1155","methods":{"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"details":"Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` (i.e. 0xbc197c81, or its own function selector).","params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","ids":"An array containing ids of each token being transferred (order and length must match values array)","operator":"The address which initiated the batch transfer (i.e. msg.sender)","values":"An array containing amounts of each token being transferred (order and length must match ids array)"},"return":"`bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed"},"onERC1155Received(address,address,uint256,uint256,bytes)":{"details":"Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` (i.e. 0xf23a6e61, or its own function selector).","params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","id":"The ID of the token being transferred","operator":"The address which initiated the transfer (i.e. msg.sender)","value":"The amount of tokens being transferred"},"return":"`bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed"},"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) to learn more about how these ids are created. * This function call must use less than 30 000 gas."}},"title":"ERC-1155 Multi Token Receiver Interface"},"userdoc":{"methods":{}}}
{"contractName":"IERC1155TokenReceiver","abi":[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"from","type":"address"},{"name":"id","type":"uint256"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"from","type":"address"},{"name":"ids","type":"uint256[]"},{"name":"values","type":"uint256[]"},{"name":"data","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"ids\",\"type\":\"uint256[]\"},{\"name\":\"values\",\"type\":\"uint256[]\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"id\",\"type\":\"uint256\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"See https://eips.ethereum.org/EIPS/eip-1155\",\"methods\":{\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"details\":\"Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` (i.e. 0xbc197c81, or its own function selector).\",\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"ids\":\"An array containing ids of each token being transferred (order and length must match values array)\",\"operator\":\"The address which initiated the batch transfer (i.e. msg.sender)\",\"values\":\"An array containing amounts of each token being transferred (order and length must match ids array)\"},\"return\":\"`bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\"},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"details\":\"Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` (i.e. 0xf23a6e61, or its own function selector).\",\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"id\":\"The ID of the token being transferred\",\"operator\":\"The address which initiated the transfer (i.e. msg.sender)\",\"value\":\"The amount of tokens being transferred\"},\"return\":\"`bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. * This function call must use less than 30 000 gas.\"}},\"title\":\"ERC-1155 Multi Token Receiver Interface\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/ERC1155/IERC1155TokenReceiver.sol\":\"IERC1155TokenReceiver\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/ERC1155/IERC1155TokenReceiver.sol\":{\"keccak256\":\"0xca815b5ca57df8f1056b962c2728d6a1e56fc7d9a7869ccee8f5a1ac6075b75d\",\"urls\":[\"bzzr://61df3e61bf24c80714e326ffdc274aaefc342241de3e72374131f613cddbd042\",\"dweb:/ipfs/QmPnF3rGuY2H3Gifvha4dW7fJPptP7wJerHzjz4dpzfTJW\"]},\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xe0ed10f53955c35eecb02724538650a155aa940be3f0a54cd3bde6c6b0c6e48c\",\"urls\":[\"bzzr://14f0ef90a240b2aca847fe1489b10965e04ba16cf221f52ed6470d0cad291f9d\",\"dweb:/ipfs/QmXxx5rHfLL57zdgyyyG9MMv4XGN7bpVSc2MuDcaCgto6u\"]}},\"version\":1}","bytecode":"0x","deployedBytecode":"0x","sourceMap":"","deployedSourceMap":"","source":"pragma solidity ^0.5.0;\n\nimport \"openzeppelin-solidity/contracts/introspection/IERC165.sol\";\n\n/**\n @title ERC-1155 Multi Token Receiver Interface\n @dev See https://eips.ethereum.org/EIPS/eip-1155\n*/\ncontract IERC1155TokenReceiver is IERC165 {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.2.5","updatedAt":"2020-09-16T22:12:38.860Z","devdoc":{"details":"See https://eips.ethereum.org/EIPS/eip-1155","methods":{"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"details":"Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` (i.e. 0xbc197c81, or its own function selector).","params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","ids":"An array containing ids of each token being transferred (order and length must match values array)","operator":"The address which initiated the batch transfer (i.e. msg.sender)","values":"An array containing amounts of each token being transferred (order and length must match ids array)"},"return":"`bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed"},"onERC1155Received(address,address,uint256,uint256,bytes)":{"details":"Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` (i.e. 0xf23a6e61, or its own function selector).","params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","id":"The ID of the token being transferred","operator":"The address which initiated the transfer (i.e. msg.sender)","value":"The amount of tokens being transferred"},"return":"`bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed"},"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. * This function call must use less than 30 000 gas."}},"title":"ERC-1155 Multi Token Receiver Interface"},"userdoc":{"methods":{}}}

@@ -1,1 +0,1 @@

{"contractName":"IERC165","abi":[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC165 standard, as defined in the [EIP](https://eips.ethereum.org/EIPS/eip-165). * Implementers can declare support of contract interfaces, which can then be queried by others (`ERC165Checker`). * For an implementation, see `ERC165`.\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) to learn more about how these ids are created. * This function call must use less than 30 000 gas.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x661553e43d7c4fbb2de504e5999fd5c104d367488350ed5bf023031bd1ba5ac5\",\"urls\":[\"bzzr://fc2ba15143ce3a00268ecd15fc98eb2469b18bfe27a64bbab0ac6446f161c739\",\"dweb:/ipfs/QmV7wjtRf11ibUHh4g8JjuhMpy68pPhV95L2y46UBoRfsZ\"]}},\"version\":1}","bytecode":"0x","deployedBytecode":"0x","sourceMap":"","deployedSourceMap":"","source":"pragma solidity ^0.5.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * [EIP](https://eips.ethereum.org/EIPS/eip-165).\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others (`ERC165Checker`).\n *\n * For an implementation, see `ERC165`.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified)\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.0.16","updatedAt":"2019-12-09T11:33:40.947Z","devdoc":{"details":"Interface of the ERC165 standard, as defined in the [EIP](https://eips.ethereum.org/EIPS/eip-165). * Implementers can declare support of contract interfaces, which can then be queried by others (`ERC165Checker`). * For an implementation, see `ERC165`.","methods":{"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) to learn more about how these ids are created. * This function call must use less than 30 000 gas."}}},"userdoc":{"methods":{}}}
{"contractName":"IERC165","abi":[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[EIP]. * Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). * For an implementation, see {ERC165}.\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. * This function call must use less than 30 000 gas.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xe0ed10f53955c35eecb02724538650a155aa940be3f0a54cd3bde6c6b0c6e48c\",\"urls\":[\"bzzr://14f0ef90a240b2aca847fe1489b10965e04ba16cf221f52ed6470d0cad291f9d\",\"dweb:/ipfs/QmXxx5rHfLL57zdgyyyG9MMv4XGN7bpVSc2MuDcaCgto6u\"]}},\"version\":1}","bytecode":"0x","deployedBytecode":"0x","sourceMap":"","deployedSourceMap":"","source":"pragma solidity ^0.5.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.2.5","updatedAt":"2020-09-16T22:12:38.865Z","devdoc":{"details":"Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[EIP]. * Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). * For an implementation, see {ERC165}.","methods":{"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. * This function call must use less than 30 000 gas."}}},"userdoc":{"methods":{}}}

@@ -1,1 +0,1 @@

{"contractName":"IERC20","abi":[{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"amount","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP. Does not include the optional functions; to access them see `ERC20Detailed`.\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through `transferFrom`. This is zero by default. * This value changes when `approve` or `transferFrom` are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. * Returns a boolean value indicating whether the operation succeeded. * > Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * Emits an `Approval` event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. * Returns a boolean value indicating whether the operation succeeded. * Emits a `Transfer` event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. * Returns a boolean value indicating whether the operation succeeded. * Emits a `Transfer` event.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x90e8c2521653bbb1768b05889c5760031e688d9cd361f167489b89215e201b95\",\"urls\":[\"bzzr://aa8b45b57edafc3d67bc5d916327ea16807fae33f753ca163ae0c4061b789766\",\"dweb:/ipfs/QmP5NaEwZthQeM2ESz4WTT3osrP7jhbvu7ocbttBi2JAw6\"]}},\"version\":1}","bytecode":"0x","deployedBytecode":"0x","sourceMap":"","deployedSourceMap":"","source":"pragma solidity ^0.5.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP. Does not include\n * the optional functions; to access them see `ERC20Detailed`.\n */\ninterface IERC20 {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a `Transfer` event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through `transferFrom`. This is\n * zero by default.\n *\n * This value changes when `approve` or `transferFrom` are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * > Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an `Approval` event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a `Transfer` event.\n */\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to `approve`. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.0.16","updatedAt":"2019-12-09T11:33:40.949Z","devdoc":{"details":"Interface of the ERC20 standard as defined in the EIP. Does not include the optional functions; to access them see `ERC20Detailed`.","methods":{"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through `transferFrom`. This is zero by default. * This value changes when `approve` or `transferFrom` are called."},"approve(address,uint256)":{"details":"Sets `amount` as the allowance of `spender` over the caller's tokens. * Returns a boolean value indicating whether the operation succeeded. * > Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * Emits an `Approval` event."},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `recipient`. * Returns a boolean value indicating whether the operation succeeded. * Emits a `Transfer` event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. * Returns a boolean value indicating whether the operation succeeded. * Emits a `Transfer` event."}}},"userdoc":{"methods":{}}}
{"contractName":"IERC20","abi":[{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"amount","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP. Does not include the optional functions; to access them see {ERC20Detailed}.\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. * This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. * Returns a boolean value indicating whether the operation succeeded. * IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. * Returns a boolean value indicating whether the operation succeeded. * Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. * Returns a boolean value indicating whether the operation succeeded. * Emits a {Transfer} event.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzzr://cf2d583b8dce38d0617fdcd65f2fd9f126fe17b7f683b5a515ea9d2762d8b062\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]}},\"version\":1}","bytecode":"0x","deployedBytecode":"0x","sourceMap":"","deployedSourceMap":"","source":"pragma solidity ^0.5.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP. Does not include\n * the optional functions; to access them see {ERC20Detailed}.\n */\ninterface IERC20 {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.2.5","updatedAt":"2020-09-16T22:12:38.870Z","devdoc":{"details":"Interface of the ERC20 standard as defined in the EIP. Does not include the optional functions; to access them see {ERC20Detailed}.","methods":{"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. * This value changes when {approve} or {transferFrom} are called."},"approve(address,uint256)":{"details":"Sets `amount` as the allowance of `spender` over the caller's tokens. * Returns a boolean value indicating whether the operation succeeded. * IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `recipient`. * Returns a boolean value indicating whether the operation succeeded. * Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. * Returns a boolean value indicating whether the operation succeeded. * Emits a {Transfer} event."}}},"userdoc":{"methods":{}}}

@@ -1,1 +0,1 @@

{"contractName":"Migrations","abi":[{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastCompletedMigration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":false,"inputs":[{"name":"completed","type":"uint256"}],"name":"setCompleted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAddress","type":"address"}],"name":"upgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lastCompletedMigration\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"completed\",\"type\":\"uint256\"}],\"name\":\"setCompleted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/denis/projects/gnosis/conditional-tokens-contracts/contracts/Migrations.sol\":\"Migrations\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/denis/projects/gnosis/conditional-tokens-contracts/contracts/Migrations.sol\":{\"keccak256\":\"0x39666fa26b6e786234e01c48cdfdbbffe1a1af5dfe0fb74ec6b970daeb3f3bc3\",\"urls\":[\"bzzr://0c9536b8c4f627d916bf201ed9b72c99bddd268e16eaf4ed8d521ad6c9b27cab\",\"dweb:/ipfs/QmZVULUy8eqntGaErvJsuZN876vc6mNYwRVC9zC39QzjRx\"]}},\"version\":1}","bytecode":"0x608060405234801561001057600080fd5b50600080546001600160a01b031916331790556101b3806100326000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630900f010146100515780638da5cb5b14610079578063fbdbad3c1461009d578063fdacd576146100b7575b600080fd5b6100776004803603602081101561006757600080fd5b50356001600160a01b03166100d4565b005b610081610151565b604080516001600160a01b039092168252519081900360200190f35b6100a5610160565b60408051918252519081900360200190f35b610077600480360360208110156100cd57600080fd5b5035610166565b6000546001600160a01b031633141561014e576000819050806001600160a01b031663fdacd5766001546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561013457600080fd5b505af1158015610148573d6000803e3d6000fd5b50505050505b50565b6000546001600160a01b031681565b60015481565b6000546001600160a01b031633141561014e5760015556fea265627a7a723058200f53f3b210e9b2e05c90f4d64105202d89697151d9b669777aa5d5ba12af9e4b64736f6c634300050a0032","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80630900f010146100515780638da5cb5b14610079578063fbdbad3c1461009d578063fdacd576146100b7575b600080fd5b6100776004803603602081101561006757600080fd5b50356001600160a01b03166100d4565b005b610081610151565b604080516001600160a01b039092168252519081900360200190f35b6100a5610160565b60408051918252519081900360200190f35b610077600480360360208110156100cd57600080fd5b5035610166565b6000546001600160a01b031633141561014e576000819050806001600160a01b031663fdacd5766001546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561013457600080fd5b505af1158015610148573d6000803e3d6000fd5b50505050505b50565b6000546001600160a01b031681565b60015481565b6000546001600160a01b031633141561014e5760015556fea265627a7a723058200f53f3b210e9b2e05c90f4d64105202d89697151d9b669777aa5d5ba12af9e4b64736f6c634300050a0032","sourceMap":"26:512:6:-;;;190:56;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;221:5:6;:18;;-1:-1:-1;;;;;;221:18:6;229:10;221:18;;;26:512;;;;;;","deployedSourceMap":"26:512:6:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26:512:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;365:171;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;365:171:6;-1:-1:-1;;;;;365:171:6;;:::i;:::-;;52:20;;;:::i;:::-;;;;-1:-1:-1;;;;;52:20:6;;;;;;;;;;;;;;78:34;;;:::i;:::-;;;;;;;;;;;;;;;;252:107;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;252:107:6;;:::i;365:171::-;169:5;;-1:-1:-1;;;;;169:5:6;155:10;:19;151:26;;;430:19;463:10;430:44;;484:8;-1:-1:-1;;;;;484:21:6;;506:22;;484:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;484:45:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;484:45:6;;;;176:1;151:26;365:171;:::o;52:20::-;;;-1:-1:-1;;;;;52:20:6;;:::o;78:34::-;;;;:::o;252:107::-;169:5;;-1:-1:-1;;;;;169:5:6;155:10;:19;151:26;;;318:22;:34;252:107::o","source":"pragma solidity ^0.5.1;\n\n\ncontract Migrations {\n address public owner;\n uint public lastCompletedMigration;\n\n modifier restricted() {\n if (msg.sender == owner) _;\n }\n\n constructor() public {\n owner = msg.sender;\n }\n\n function setCompleted(uint completed) public restricted {\n lastCompletedMigration = completed;\n }\n\n function upgrade(address newAddress) public restricted {\n Migrations upgraded = Migrations(newAddress);\n upgraded.setCompleted(lastCompletedMigration);\n }\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{"1":{"events":{},"links":{},"address":"0x03Ce050DAEB28021086Bf8e9B7843d6212c05F7B","transactionHash":"0x0ac0453238d2b4bb9ba0e393bb446c6453588fff9f259125c9a6cec4b0465336"},"4":{"events":{},"links":{},"address":"0x06Fe100857e0cFE8B818E7476013C0203292D2A4","transactionHash":"0xa424fff196b8c0521bd902036a894fd9b6a3b9d10cc63533ae8bbfec4a393134"}},"schemaVersion":"3.0.16","updatedAt":"2019-12-09T11:33:40.946Z","devdoc":{"methods":{}},"userdoc":{"methods":{}}}
{"contractName":"Migrations","abi":[{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastCompletedMigration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":false,"inputs":[{"name":"completed","type":"uint256"}],"name":"setCompleted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAddress","type":"address"}],"name":"upgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lastCompletedMigration\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"completed\",\"type\":\"uint256\"}],\"name\":\"setCompleted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/Migrations.sol\":\"Migrations\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/Migrations.sol\":{\"keccak256\":\"0x39666fa26b6e786234e01c48cdfdbbffe1a1af5dfe0fb74ec6b970daeb3f3bc3\",\"urls\":[\"bzzr://0c9536b8c4f627d916bf201ed9b72c99bddd268e16eaf4ed8d521ad6c9b27cab\",\"dweb:/ipfs/QmZVULUy8eqntGaErvJsuZN876vc6mNYwRVC9zC39QzjRx\"]}},\"version\":1}","bytecode":"0x608060405234801561001057600080fd5b50600080546001600160a01b031916331790556101b3806100326000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630900f010146100515780638da5cb5b14610079578063fbdbad3c1461009d578063fdacd576146100b7575b600080fd5b6100776004803603602081101561006757600080fd5b50356001600160a01b03166100d4565b005b610081610151565b604080516001600160a01b039092168252519081900360200190f35b6100a5610160565b60408051918252519081900360200190f35b610077600480360360208110156100cd57600080fd5b5035610166565b6000546001600160a01b031633141561014e576000819050806001600160a01b031663fdacd5766001546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561013457600080fd5b505af1158015610148573d6000803e3d6000fd5b50505050505b50565b6000546001600160a01b031681565b60015481565b6000546001600160a01b031633141561014e5760015556fea265627a7a7230582004e340b279ced87cff0c3e155263b4a272887d432ff58019c6cd487290d6490a64736f6c634300050a0032","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80630900f010146100515780638da5cb5b14610079578063fbdbad3c1461009d578063fdacd576146100b7575b600080fd5b6100776004803603602081101561006757600080fd5b50356001600160a01b03166100d4565b005b610081610151565b604080516001600160a01b039092168252519081900360200190f35b6100a5610160565b60408051918252519081900360200190f35b610077600480360360208110156100cd57600080fd5b5035610166565b6000546001600160a01b031633141561014e576000819050806001600160a01b031663fdacd5766001546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561013457600080fd5b505af1158015610148573d6000803e3d6000fd5b50505050505b50565b6000546001600160a01b031681565b60015481565b6000546001600160a01b031633141561014e5760015556fea265627a7a7230582004e340b279ced87cff0c3e155263b4a272887d432ff58019c6cd487290d6490a64736f6c634300050a0032","sourceMap":"26:512:6:-;;;190:56;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;221:5:6;:18;;-1:-1:-1;;;;;;221:18:6;229:10;221:18;;;26:512;;;;;;","deployedSourceMap":"26:512:6:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26:512:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;365:171;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;365:171:6;-1:-1:-1;;;;;365:171:6;;:::i;:::-;;52:20;;;:::i;:::-;;;;-1:-1:-1;;;;;52:20:6;;;;;;;;;;;;;;78:34;;;:::i;:::-;;;;;;;;;;;;;;;;252:107;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;252:107:6;;:::i;365:171::-;169:5;;-1:-1:-1;;;;;169:5:6;155:10;:19;151:26;;;430:19;463:10;430:44;;484:8;-1:-1:-1;;;;;484:21:6;;506:22;;484:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;484:45:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;484:45:6;;;;176:1;151:26;365:171;:::o;52:20::-;;;-1:-1:-1;;;;;52:20:6;;:::o;78:34::-;;;;:::o;252:107::-;169:5;;-1:-1:-1;;;;;169:5:6;155:10;:19;151:26;;;318:22;:34;252:107::o","source":"pragma solidity ^0.5.1;\n\n\ncontract Migrations {\n address public owner;\n uint public lastCompletedMigration;\n\n modifier restricted() {\n if (msg.sender == owner) _;\n }\n\n constructor() public {\n owner = msg.sender;\n }\n\n function setCompleted(uint completed) public restricted {\n lastCompletedMigration = completed;\n }\n\n function upgrade(address newAddress) public restricted {\n Migrations upgraded = Migrations(newAddress);\n upgraded.setCompleted(lastCompletedMigration);\n }\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{"1":{"events":{},"links":{},"address":"0x03Ce050DAEB28021086Bf8e9B7843d6212c05F7B","transactionHash":"0x0ac0453238d2b4bb9ba0e393bb446c6453588fff9f259125c9a6cec4b0465336"},"4":{"events":{},"links":{},"address":"0x06Fe100857e0cFE8B818E7476013C0203292D2A4","transactionHash":"0xa424fff196b8c0521bd902036a894fd9b6a3b9d10cc63533ae8bbfec4a393134"},"100":{"events":{},"links":{},"address":"0x099efD8CD80b344702fbFFFA81dcAeaeE9B91FF4","transactionHash":"0x0b76248d36f0e1e7d8b1cf0ead1c57e86c5d026ddeb016ced4da5c8977577901"}},"schemaVersion":"3.2.5","updatedAt":"2020-09-16T22:12:38.862Z","devdoc":{"methods":{}},"userdoc":{"methods":{}}}

@@ -1,1 +0,1 @@

{"contractName":"SafeMath","abi":[],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's arithmetic operations with added overflow checks. * Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when an operation overflows. * Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"openzeppelin-solidity/contracts/math/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzzr://1604f5b6d6e916c154efd8c6720cda069e5ba32dfa0a9dedf2b42e5b02d07f89\",\"dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1\"]}},\"version\":1}","bytecode":"0x60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723058203fb11f00c2b961a8ab87beb437be73300fe565eff65f53469aef52d46c05171464736f6c634300050a0032","deployedBytecode":"0x73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723058203fb11f00c2b961a8ab87beb437be73300fe565eff65f53469aef52d46c05171464736f6c634300050a0032","sourceMap":"589:2938:9:-;;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","deployedSourceMap":"589:2938:9:-;;;;;;;;","source":"pragma solidity ^0.5.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 SafeMath {\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","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.0.16","updatedAt":"2019-12-09T11:33:40.948Z","devdoc":{"details":"Wrappers over Solidity's arithmetic operations with added overflow checks. * Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when an operation overflows. * Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.","methods":{}},"userdoc":{"methods":{}}}
{"contractName":"SafeMath","abi":[],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's arithmetic operations with added overflow checks. * Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when an operation overflows. * Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"openzeppelin-solidity/contracts/math/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzzr://292843005e754e752644f767477ec5ad7a1ffc91ddb18c38b8079c62f3993cad\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]}},\"version\":1}","bytecode":"0x60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723058205ab947eeeb3a32941258485eff84bbea889f4a6fa3c0fef458a5062f43314ce164736f6c634300050a0032","deployedBytecode":"0x73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723058205ab947eeeb3a32941258485eff84bbea889f4a6fa3c0fef458a5062f43314ce164736f6c634300050a0032","sourceMap":"589:4708:9:-;;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","deployedSourceMap":"589:4708:9:-;;;;;;;;","source":"pragma solidity ^0.5.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 SafeMath {\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 return sub(a, b, \"SafeMath: subtraction overflow\");\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n * - Subtraction cannot overflow.\n *\n * _Available since v2.4.0._\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\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-contracts/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 return div(a, b, \"SafeMath: division by zero\");\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers. Reverts with custom message 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 * _Available since v2.4.0._\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n // Solidity only automatically asserts when dividing by 0\n require(b > 0, errorMessage);\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 return mod(a, b, \"SafeMath: modulo by zero\");\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * Reverts with custom message 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 * _Available since v2.4.0._\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b != 0, errorMessage);\n return a % b;\n }\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.2.5","updatedAt":"2020-09-16T22:12:38.867Z","devdoc":{"details":"Wrappers over Solidity's arithmetic operations with added overflow checks. * Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when an operation overflows. * Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.","methods":{}},"userdoc":{"methods":{}}}

@@ -0,0 +0,0 @@ const Migrations = artifacts.require("Migrations");

module.exports = function(deployer) {
deployer.deploy(artifacts.require("ConditionalTokens"));
};

@@ -580,2 +580,282 @@ {

"transactionHash": "0x7db87634594160ae8acc745d38329f6e8902ae8cd98a9f1b10afb606b41c436b"
},
"100": {
"events": {
"0xab3760c3bd2bb38b5bcf54dc79802ed67338b4cf29f3054ded67ed24661e4177": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "conditionId",
"type": "bytes32"
},
{
"indexed": true,
"name": "oracle",
"type": "address"
},
{
"indexed": true,
"name": "questionId",
"type": "bytes32"
},
{
"indexed": false,
"name": "outcomeSlotCount",
"type": "uint256"
}
],
"name": "ConditionPreparation",
"type": "event"
},
"0xb44d84d3289691f71497564b85d4233648d9dbae8cbdbb4329f301c3a0185894": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "conditionId",
"type": "bytes32"
},
{
"indexed": true,
"name": "oracle",
"type": "address"
},
{
"indexed": true,
"name": "questionId",
"type": "bytes32"
},
{
"indexed": false,
"name": "outcomeSlotCount",
"type": "uint256"
},
{
"indexed": false,
"name": "payoutNumerators",
"type": "uint256[]"
}
],
"name": "ConditionResolution",
"type": "event"
},
"0x2e6bb91f8cbcda0c93623c54d0403a43514fabc40084ec96b6d5379a74786298": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "stakeholder",
"type": "address"
},
{
"indexed": false,
"name": "collateralToken",
"type": "address"
},
{
"indexed": true,
"name": "parentCollectionId",
"type": "bytes32"
},
{
"indexed": true,
"name": "conditionId",
"type": "bytes32"
},
{
"indexed": false,
"name": "partition",
"type": "uint256[]"
},
{
"indexed": false,
"name": "amount",
"type": "uint256"
}
],
"name": "PositionSplit",
"type": "event"
},
"0x6f13ca62553fcc2bcd2372180a43949c1e4cebba603901ede2f4e14f36b282ca": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "stakeholder",
"type": "address"
},
{
"indexed": false,
"name": "collateralToken",
"type": "address"
},
{
"indexed": true,
"name": "parentCollectionId",
"type": "bytes32"
},
{
"indexed": true,
"name": "conditionId",
"type": "bytes32"
},
{
"indexed": false,
"name": "partition",
"type": "uint256[]"
},
{
"indexed": false,
"name": "amount",
"type": "uint256"
}
],
"name": "PositionsMerge",
"type": "event"
},
"0x2682012a4a4f1973119f1c9b90745d1bd91fa2bab387344f044cb3586864d18d": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "redeemer",
"type": "address"
},
{
"indexed": true,
"name": "collateralToken",
"type": "address"
},
{
"indexed": true,
"name": "parentCollectionId",
"type": "bytes32"
},
{
"indexed": false,
"name": "conditionId",
"type": "bytes32"
},
{
"indexed": false,
"name": "indexSets",
"type": "uint256[]"
},
{
"indexed": false,
"name": "payout",
"type": "uint256"
}
],
"name": "PayoutRedemption",
"type": "event"
},
"0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "operator",
"type": "address"
},
{
"indexed": true,
"name": "from",
"type": "address"
},
{
"indexed": true,
"name": "to",
"type": "address"
},
{
"indexed": false,
"name": "id",
"type": "uint256"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "TransferSingle",
"type": "event"
},
"0x4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "operator",
"type": "address"
},
{
"indexed": true,
"name": "from",
"type": "address"
},
{
"indexed": true,
"name": "to",
"type": "address"
},
{
"indexed": false,
"name": "ids",
"type": "uint256[]"
},
{
"indexed": false,
"name": "values",
"type": "uint256[]"
}
],
"name": "TransferBatch",
"type": "event"
},
"0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "owner",
"type": "address"
},
{
"indexed": true,
"name": "operator",
"type": "address"
},
{
"indexed": false,
"name": "approved",
"type": "bool"
}
],
"name": "ApprovalForAll",
"type": "event"
},
"0x6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b": {
"anonymous": false,
"inputs": [
{
"indexed": false,
"name": "value",
"type": "string"
},
{
"indexed": true,
"name": "id",
"type": "uint256"
}
],
"name": "URI",
"type": "event"
}
},
"links": {},
"address": "0xCeAfDD6bc0bEF976fdCd1112955828E00543c0Ce",
"transactionHash": "0x8135a49a80eb20e8932bf8b39a55e34229f992c298c4cdfbb62feffa088001c3"
}

@@ -595,4 +875,10 @@ },

"transactionHash": "0xa424fff196b8c0521bd902036a894fd9b6a3b9d10cc63533ae8bbfec4a393134"
},
"100": {
"events": {},
"links": {},
"address": "0x099efD8CD80b344702fbFFFA81dcAeaeE9B91FF4",
"transactionHash": "0x0b76248d36f0e1e7d8b1cf0ead1c57e86c5d026ddeb016ced4da5c8977577901"
}
}
}
{
"name": "@gnosis.pm/conditional-tokens-contracts",
"version": "1.0.1",
"version": "1.0.2",
"description": "Collection of smart contracts for the conditional tokens",

@@ -11,3 +11,3 @@ "scripts": {

"networks": "truffle networks",
"test": "run-with-testrpc 'truffle test --network local'",
"test": "truffle test",
"lint-contracts": "solium -d contracts/",

@@ -28,5 +28,2 @@ "injectnetinfo": "tnt iN",

"license": "LGPL-3.0",
"dependencies": {
"openzeppelin-solidity": "^2.3.0"
},
"devDependencies": {

@@ -44,10 +41,13 @@ "@codechecks/client": "^0.1.9",

"ethlint": "^1.2.4",
"husky": "^3.0.5",
"husky": "^4.0.2",
"lint-staged": "^9.2.5",
"lodash": "^4.17.15",
"npm-prepublish": "^1.2.3",
"openzeppelin-solidity": "^2.3.0",
"openzeppelin-test-helpers": "^0.5.0",
"prettier": "1.18.2",
"prettier": "1.19.1",
"run-with-testrpc": "^0.3.1",
"truffle": "^5.0.36",
"truffle-flattener": "^1.4.4",
"truffle-hdwallet-provider": "^1.0.17",
"web3": "^2.0.0-alpha.1"

@@ -54,0 +54,0 @@ },

@@ -88,11 +88,11 @@ const ethSigUtil = require("eth-sig-util");

it("should make outcome slot count available via getOutcomeSlotCount", async function() {
(await this.conditionalTokens.getOutcomeSlotCount(
conditionId
)).should.be.bignumber.equal(outcomeSlotCount);
(
await this.conditionalTokens.getOutcomeSlotCount(conditionId)
).should.be.bignumber.equal(outcomeSlotCount);
});
it("should leave payout denominator unset", async function() {
(await this.conditionalTokens.payoutDenominator(
conditionId
)).should.be.bignumber.equal("0");
(
await this.conditionalTokens.payoutDenominator(conditionId)
).should.be.bignumber.equal("0");
});

@@ -221,12 +221,13 @@

it("should transfer split collateral from trader", async function() {
(await collateralBalanceOf.call(
this,
trader.address
)).should.be.bignumber.equal(
(
await collateralBalanceOf.call(this, trader.address)
).should.be.bignumber.equal(
collateralTokenCount.sub(splitAmount)
);
(await collateralBalanceOf.call(
this,
this.conditionalTokens.address
)).should.be.bignumber.equal(splitAmount);
(
await collateralBalanceOf.call(
this,
this.conditionalTokens.address
)
).should.be.bignumber.equal(splitAmount);
});

@@ -241,6 +242,8 @@

(await this.conditionalTokens.balanceOf(
trader.address,
positionId
)).should.be.bignumber.equal(splitAmount);
(
await this.conditionalTokens.balanceOf(
trader.address,
positionId
)
).should.be.bignumber.equal(splitAmount);
}

@@ -287,12 +290,13 @@ });

it("should transfer split collateral back to trader", async function() {
(await collateralBalanceOf.call(
this,
trader.address
)).should.be.bignumber.equal(
(
await collateralBalanceOf.call(this, trader.address)
).should.be.bignumber.equal(
collateralTokenCount.sub(splitAmount).add(mergeAmount)
);
(await collateralBalanceOf.call(
this,
this.conditionalTokens.address
)).should.be.bignumber.equal(splitAmount.sub(mergeAmount));
(
await collateralBalanceOf.call(
this,
this.conditionalTokens.address
)
).should.be.bignumber.equal(splitAmount.sub(mergeAmount));
});

@@ -307,6 +311,8 @@

(await this.conditionalTokens.balanceOf(
trader.address,
positionId
)).should.be.bignumber.equal(splitAmount.sub(mergeAmount));
(
await this.conditionalTokens.balanceOf(
trader.address,
positionId
)
).should.be.bignumber.equal(splitAmount.sub(mergeAmount));
}

@@ -432,6 +438,8 @@ });

for (let i = 0; i < payoutNumerators.length; i++) {
(await this.conditionalTokens.payoutNumerators(
conditionId,
i
)).should.be.bignumber.equal(payoutNumerators[i]);
(
await this.conditionalTokens.payoutNumerators(
conditionId,
i
)
).should.be.bignumber.equal(payoutNumerators[i]);
}

@@ -488,6 +496,8 @@ });

);
(await this.conditionalTokens.balanceOf(
trader.address,
positionId
)).should.be.bignumber.equal("0");
(
await this.conditionalTokens.balanceOf(
trader.address,
positionId
)
).should.be.bignumber.equal("0");
}

@@ -501,13 +511,14 @@ });

);
(await this.conditionalTokens.balanceOf(
counterparty,
positionId
)).should.be.bignumber.equal(transferAmount);
(
await this.conditionalTokens.balanceOf(
counterparty,
positionId
)
).should.be.bignumber.equal(transferAmount);
});
it("should credit payout as collateral", async function() {
(await collateralBalanceOf.call(
this,
trader.address
)).should.be.bignumber.equal(
(
await collateralBalanceOf.call(this, trader.address)
).should.be.bignumber.equal(
collateralTokenCount.sub(splitAmount).add(payout)

@@ -605,7 +616,9 @@ );

for (const indexSet of partition2) {
(await this.conditionalTokens.getCollectionId(
parentCollectionId,
conditionId2,
indexSet
)).should.be.equal(
(
await this.conditionalTokens.getCollectionId(
parentCollectionId,
conditionId2,
indexSet
)
).should.be.equal(
combineCollectionIds([

@@ -638,6 +651,8 @@ parentCollectionId,

it("burns value in the parent position", async function() {
(await this.conditionalTokens.balanceOf(
trader.address,
getPositionForCollection.call(this, parentCollectionId)
)).should.be.bignumber.equal(
(
await this.conditionalTokens.balanceOf(
trader.address,
getPositionForCollection.call(this, parentCollectionId)
)
).should.be.bignumber.equal(
collateralTokenCount.sub(deepSplitAmount)

@@ -657,6 +672,8 @@ );

(await this.conditionalTokens.balanceOf(
trader.address,
positionId
)).should.be.bignumber.equal(deepSplitAmount);
(
await this.conditionalTokens.balanceOf(
trader.address,
positionId
)
).should.be.bignumber.equal(deepSplitAmount);
}

@@ -689,6 +706,8 @@ });

for (let i = 0; i < finalReport.length; i++) {
(await this.conditionalTokens.payoutNumerators(
conditionId,
i
)).should.be.bignumber.equal(finalReport[i]);
(
await this.conditionalTokens.payoutNumerators(
conditionId,
i
)
).should.be.bignumber.equal(finalReport[i]);
}

@@ -695,0 +714,0 @@ });

@@ -0,0 +0,0 @@ // To use this, just import this file and supply it with some web3 utils:

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc