{
  "abi": [
    {
      "inputs": [],
      "name": "count",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "root",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tree",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "count",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x608060405234801561001057600080fd5b50610651806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806306661abd14610046578063ebf0c71714610060578063fd54b22814610068575b600080fd5b61004e610070565b60408051918252519081900360200190f35b61004e610076565b61004e610087565b60205490565b6000610082600061008d565b905090565b60205481565b60006100a08261009b6100a6565b610567565b92915050565b6100ae610625565b600081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb560208201527fb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3060408201527f21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba8560608201527fe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a1934460808201527f0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d60a08201527f887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a196860c08201527fffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f8360e08201527f9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af6101008201527fcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e06101208201527ff9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a56101408201527ff8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8926101608201527f3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c6101808201527fc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb6101a08201527f5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc6101c08201527fda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d26101e08201527f2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f6102008201527fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a6102208201527f5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a06102408201527fb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa06102608201527fc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e26102808201527ff4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd96102a08201527f5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3776102c08201527f4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee6526102e08201527fcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef6103008201527f0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d6103208201527fb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d06103408201527f838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e6103608201527f662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e6103808201527f388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea3226103a08201527f93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7356103c08201527f8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a96103e082015290565b6020820154600090815b602081101561061d57600182821c16600086836020811061058e57fe5b0154905081600114156105d15780856040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209450610613565b848684602081106105de57fe5b602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012094505b5050600101610571565b505092915050565b604051806104000160405280602090602082028036833750919291505056fea164736f6c6343000706000a",
    "sourceMap": "318:650:18:-:0;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806306661abd14610046578063ebf0c71714610060578063fd54b22814610068575b600080fd5b61004e610070565b60408051918252519081900360200190f35b61004e610076565b61004e610087565b60205490565b6000610082600061008d565b905090565b60205481565b60006100a08261009b6100a6565b610567565b92915050565b6100ae610625565b600081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb560208201527fb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3060408201527f21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba8560608201527fe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a1934460808201527f0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d60a08201527f887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a196860c08201527fffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f8360e08201527f9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af6101008201527fcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e06101208201527ff9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a56101408201527ff8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8926101608201527f3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c6101808201527fc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb6101a08201527f5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc6101c08201527fda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d26101e08201527f2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f6102008201527fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a6102208201527f5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a06102408201527fb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa06102608201527fc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e26102808201527ff4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd96102a08201527f5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3776102c08201527f4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee6526102e08201527fcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef6103008201527f0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d6103208201527fb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d06103408201527f838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e6103608201527f662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e6103808201527f388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea3226103a08201527f93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7356103c08201527f8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a96103e082015290565b6020820154600090815b602081101561061d57600182821c16600086836020811061058e57fe5b0154905081600114156105d15780856040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209450610613565b848684602081106105de57fe5b602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012094505b5050600101610571565b505092915050565b604051806104000160405280602090602082028036833750919291505056fea164736f6c6343000706000a",
    "sourceMap": "318:650:18:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;885:81;;;:::i;:::-;;;;;;;;;;;;;;;;701;;;:::i;435:26::-;;;:::i;885:81::-;949:10;;885:81;:::o;701:::-;738:7;764:11;:4;:9;:11::i;:::-;757:18;;701:81;:::o;435:26::-;;;;:::o;2293:122:26:-;2350:7;2376:32;2388:5;2395:12;:10;:12::i;:::-;2376:11;:32::i;:::-;2369:39;2293:122;-1:-1:-1;;2293:122:26:o;2533:992::-;2602:34;;:::i;:::-;2665:3;2652:16;;2691:3;2652:10;2678;;:16;2717:3;2704:10;;;:16;2743:3;2730:10;;;:16;2769:3;2756:10;;;:16;2795:3;2782:10;;;:16;2821:3;2808:10;;;:16;2847:3;2834:10;;;:16;2873:3;2860:10;;;:16;2899:3;2886:10;;;:16;2926:4;2912:11;;;:18;2954:4;2940:11;;;:18;2982:4;2968:11;;;:18;3010:4;2996:11;;;:18;3038:4;3024:11;;;:18;3066:4;3052:11;;;:18;3094:4;3080:11;;;:18;3122:4;3108:11;;;:18;3150:4;3136:11;;;:18;3178:4;3164:11;;;:18;3206:4;3192:11;;;:18;3234:4;3220:11;;;:18;3262:4;3248:11;;;:18;3290:4;3276:11;;;:18;3318:4;3304:11;;;:18;3346:4;3332:11;;;:18;3374:4;3360:11;;;:18;3402:4;3388:11;;;:18;3430:4;3416:11;;;:18;3458:4;3444:11;;;:18;3486:4;3472:11;;;:18;3514:4;3500:11;;;:18;2652:7;2533:992::o;1658:568::-;1831:11;;;;1782:16;;;1853:367;340:2;1873:1;:14;1853:367;;;1942:4;1927:11;;;1926:20;1908:15;1976:5;1937:1;1976:15;;;;;;;;;1960:31;;2009:7;2020:1;2009:12;2005:205;;;2079:5;2086:8;2062:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2052:44;;;;;;2041:55;;2005:205;;;2173:8;2183:7;2191:1;2183:10;;;;;;;;;;;2156:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2146:49;;;;;;2135:60;;2005:205;-1:-1:-1;;1889:3:26;;1853:367;;;;1658:568;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "count()": "06661abd",
    "root()": "ebf0c717",
    "tree()": "fd54b228"
  },
  "ast": {
    "absolutePath": "packages/contracts-core/contracts/Merkle.sol",
    "id": 26211,
    "exportedSymbols": {
      "MerkleLib": [
        27988
      ],
      "MerkleTreeManager": [
        26210
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:923:18",
    "nodes": [
      {
        "id": 26176,
        "nodeType": "PragmaDirective",
        "src": "46:22:18",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 26178,
        "nodeType": "ImportDirective",
        "src": "116:44:18",
        "absolutePath": "packages/contracts-core/contracts/libs/Merkle.sol",
        "file": "./libs/Merkle.sol",
        "scope": 26211,
        "sourceUnit": 27989,
        "symbolAliases": [
          {
            "foreign": {
              "id": 26177,
              "name": "MerkleLib",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:9:18",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 26210,
        "nodeType": "ContractDefinition",
        "src": "318:650:18",
        "nodes": [
          {
            "id": 26182,
            "nodeType": "UsingForDirective",
            "src": "395:35:18",
            "libraryName": {
              "id": 26180,
              "name": "MerkleLib",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27988,
              "src": "401:9:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MerkleLib_$27988",
                "typeString": "library MerkleLib"
              }
            },
            "typeName": {
              "id": 26181,
              "name": "MerkleLib.Tree",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27451,
              "src": "415:14:18",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Tree_$27451_storage_ptr",
                "typeString": "struct MerkleLib.Tree"
              }
            }
          },
          {
            "id": 26184,
            "nodeType": "VariableDeclaration",
            "src": "435:26:18",
            "constant": false,
            "functionSelector": "fd54b228",
            "mutability": "mutable",
            "name": "tree",
            "scope": 26210,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Tree_$27451_storage",
              "typeString": "struct MerkleLib.Tree"
            },
            "typeName": {
              "id": 26183,
              "name": "MerkleLib.Tree",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27451,
              "src": "435:14:18",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Tree_$27451_storage_ptr",
                "typeString": "struct MerkleLib.Tree"
              }
            },
            "visibility": "public"
          },
          {
            "id": 26188,
            "nodeType": "VariableDeclaration",
            "src": "544:25:18",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 26210,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$49_storage",
              "typeString": "uint256[49]"
            },
            "typeName": {
              "baseType": {
                "id": 26185,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "544:7:18",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 26187,
              "length": {
                "hexValue": "3439",
                "id": 26186,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "552:2:18",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_49_by_1",
                  "typeString": "int_const 49"
                },
                "value": "49"
              },
              "nodeType": "ArrayTypeName",
              "src": "544:11:18",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$49_storage_ptr",
                "typeString": "uint256[49]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 26199,
            "nodeType": "FunctionDefinition",
            "src": "701:81:18",
            "body": {
              "id": 26198,
              "nodeType": "Block",
              "src": "747:35:18",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 26194,
                        "name": "tree",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26184,
                        "src": "764:4:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Tree_$27451_storage",
                          "typeString": "struct MerkleLib.Tree storage ref"
                        }
                      },
                      "id": 26195,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "root",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27618,
                      "src": "764:9:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Tree_$27451_storage_ptr_$returns$_t_bytes32_$bound_to$_t_struct$_Tree_$27451_storage_ptr_$",
                        "typeString": "function (struct MerkleLib.Tree storage pointer) view returns (bytes32)"
                      }
                    },
                    "id": 26196,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "764:11:18",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 26193,
                  "id": 26197,
                  "nodeType": "Return",
                  "src": "757:18:18"
                }
              ]
            },
            "documentation": {
              "id": 26189,
              "nodeType": "StructuredDocumentation",
              "src": "627:69:18",
              "text": " @notice Calculates and returns tree's current root"
            },
            "functionSelector": "ebf0c717",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "root",
            "parameters": {
              "id": 26190,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "714:2:18"
            },
            "returnParameters": {
              "id": 26193,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26192,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 26199,
                  "src": "738:7:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26191,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "738:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "737:9:18"
            },
            "scope": 26210,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 26209,
            "nodeType": "FunctionDefinition",
            "src": "885:81:18",
            "body": {
              "id": 26208,
              "nodeType": "Block",
              "src": "932:34:18",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "id": 26205,
                      "name": "tree",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26184,
                      "src": "949:4:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Tree_$27451_storage",
                        "typeString": "struct MerkleLib.Tree storage ref"
                      }
                    },
                    "id": 26206,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "count",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 27450,
                    "src": "949:10:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 26204,
                  "id": 26207,
                  "nodeType": "Return",
                  "src": "942:17:18"
                }
              ]
            },
            "documentation": {
              "id": 26200,
              "nodeType": "StructuredDocumentation",
              "src": "788:92:18",
              "text": " @notice Returns the number of inserted leaves in the tree (current index)"
            },
            "functionSelector": "06661abd",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "count",
            "parameters": {
              "id": 26201,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "899:2:18"
            },
            "returnParameters": {
              "id": 26204,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26203,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 26209,
                  "src": "923:7:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 26202,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "923:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "922:9:18"
            },
            "scope": 26210,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 26179,
          "nodeType": "StructuredDocumentation",
          "src": "162:155:18",
          "text": " @title MerkleTreeManager\n @author Illusory Systems Inc.\n @notice Contains a Merkle tree instance and\n exposes view functions for the tree."
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          26210
        ],
        "name": "MerkleTreeManager",
        "scope": 26211
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 18
}