{
  "contractName": "BytesUtils",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@ensdomains/dnssec-oracle/contracts/BytesUtils.sol\":\"BytesUtils\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@ensdomains/dnssec-oracle/contracts/BytesUtils.sol\":{\"keccak256\":\"0x17b0123a981825ac9445ec82c8e20288321b27139518ba1f81c4cbd06f1312ab\",\"urls\":[\"bzz-raw://fe03e00240c645751873f38f56cc3db12d19a82538a0f0e9648ccfc23e8a715d\",\"dweb:/ipfs/QmbT7Q7GUgkZFY5gA4RxhWg3anPKiH9EZoM6HWBKDkK7dp\"]}},\"version\":1}",
  "bytecode": "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ac9b6097002b65a7cbf3f4991b4474610cd7ad2fb59cb4c175e0f1aa8400804b64736f6c63430007040033",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ac9b6097002b65a7cbf3f4991b4474610cd7ad2fb59cb4c175e0f1aa8400804b64736f6c63430007040033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "25:11040:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "25:11040:7:-:0;;;;;;;;",
  "source": "pragma solidity ^0.7.4;\n\nlibrary BytesUtils {\n    /*\n    * @dev Returns the keccak-256 hash of a byte range.\n    * @param self The byte string to hash.\n    * @param offset The position to start hashing at.\n    * @param len The number of bytes to hash.\n    * @return The hash of the byte range.\n    */\n    function keccak(bytes memory self, uint offset, uint len) internal pure returns (bytes32 ret) {\n        require(offset + len <= self.length);\n        assembly {\n            ret := keccak256(add(add(self, 32), offset), len)\n        }\n    }\n\n\n    /*\n    * @dev Returns a positive number if `other` comes lexicographically after\n    *      `self`, a negative number if it comes before, or zero if the\n    *      contents of the two bytes are equal.\n    * @param self The first bytes to compare.\n    * @param other The second bytes to compare.\n    * @return The result of the comparison.\n    */\n    function compare(bytes memory self, bytes memory other) internal pure returns (int) {\n        return compare(self, 0, self.length, other, 0, other.length);\n    }\n\n    /*\n    * @dev Returns a positive number if `other` comes lexicographically after\n    *      `self`, a negative number if it comes before, or zero if the\n    *      contents of the two bytes are equal. Comparison is done per-rune,\n    *      on unicode codepoints.\n    * @param self The first bytes to compare.\n    * @param offset The offset of self.\n    * @param len    The length of self.\n    * @param other The second bytes to compare.\n    * @param otheroffset The offset of the other string.\n    * @param otherlen    The length of the other string.\n    * @return The result of the comparison.\n    */\n    function compare(bytes memory self, uint offset, uint len, bytes memory other, uint otheroffset, uint otherlen) internal pure returns (int) {\n        uint shortest = len;\n        if (otherlen < len)\n        shortest = otherlen;\n\n        uint selfptr;\n        uint otherptr;\n\n        assembly {\n            selfptr := add(self, add(offset, 32))\n            otherptr := add(other, add(otheroffset, 32))\n        }\n        for (uint idx = 0; idx < shortest; idx += 32) {\n            uint a;\n            uint b;\n            assembly {\n                a := mload(selfptr)\n                b := mload(otherptr)\n            }\n            if (a != b) {\n                // Mask out irrelevant bytes and check again\n                uint mask;\n                if (shortest > 32) {\n                    mask = uint256(- 1); // aka 0xffffff....\n                } else {\n                    mask = ~(2 ** (8 * (32 - shortest + idx)) - 1);\n                }\n                uint diff = (a & mask) - (b & mask);\n                if (diff != 0)\n                return int(diff);\n            }\n            selfptr += 32;\n            otherptr += 32;\n        }\n\n        return int(len) - int(otherlen);\n    }\n\n    /*\n    * @dev Returns true if the two byte ranges are equal.\n    * @param self The first byte range to compare.\n    * @param offset The offset into the first byte range.\n    * @param other The second byte range to compare.\n    * @param otherOffset The offset into the second byte range.\n    * @param len The number of bytes to compare\n    * @return True if the byte ranges are equal, false otherwise.\n    */\n    function equals(bytes memory self, uint offset, bytes memory other, uint otherOffset, uint len) internal pure returns (bool) {\n        return keccak(self, offset, len) == keccak(other, otherOffset, len);\n    }\n\n    /*\n    * @dev Returns true if the two byte ranges are equal with offsets.\n    * @param self The first byte range to compare.\n    * @param offset The offset into the first byte range.\n    * @param other The second byte range to compare.\n    * @param otherOffset The offset into the second byte range.\n    * @return True if the byte ranges are equal, false otherwise.\n    */\n    function equals(bytes memory self, uint offset, bytes memory other, uint otherOffset) internal pure returns (bool) {\n        return keccak(self, offset, self.length - offset) == keccak(other, otherOffset, other.length - otherOffset);\n    }\n\n    /*\n    * @dev Compares a range of 'self' to all of 'other' and returns True iff\n    *      they are equal.\n    * @param self The first byte range to compare.\n    * @param offset The offset into the first byte range.\n    * @param other The second byte range to compare.\n    * @return True if the byte ranges are equal, false otherwise.\n    */\n    function equals(bytes memory self, uint offset, bytes memory other) internal pure returns (bool) {\n        return self.length >= offset + other.length && equals(self, offset, other, 0, other.length);\n    }\n\n    /*\n    * @dev Returns true if the two byte ranges are equal.\n    * @param self The first byte range to compare.\n    * @param other The second byte range to compare.\n    * @return True if the byte ranges are equal, false otherwise.\n    */\n    function equals(bytes memory self, bytes memory other) internal pure returns(bool) {\n        return self.length == other.length && equals(self, 0, other, 0, self.length);\n    }\n\n    /*\n    * @dev Returns the 8-bit number at the specified index of self.\n    * @param self The byte string.\n    * @param idx The index into the bytes\n    * @return The specified 8 bits of the string, interpreted as an integer.\n    */\n    function readUint8(bytes memory self, uint idx) internal pure returns (uint8 ret) {\n        return uint8(self[idx]);\n    }\n\n    /*\n    * @dev Returns the 16-bit number at the specified index of self.\n    * @param self The byte string.\n    * @param idx The index into the bytes\n    * @return The specified 16 bits of the string, interpreted as an integer.\n    */\n    function readUint16(bytes memory self, uint idx) internal pure returns (uint16 ret) {\n        require(idx + 2 <= self.length);\n        assembly {\n            ret := and(mload(add(add(self, 2), idx)), 0xFFFF)\n        }\n    }\n\n    /*\n    * @dev Returns the 32-bit number at the specified index of self.\n    * @param self The byte string.\n    * @param idx The index into the bytes\n    * @return The specified 32 bits of the string, interpreted as an integer.\n    */\n    function readUint32(bytes memory self, uint idx) internal pure returns (uint32 ret) {\n        require(idx + 4 <= self.length);\n        assembly {\n            ret := and(mload(add(add(self, 4), idx)), 0xFFFFFFFF)\n        }\n    }\n\n    /*\n    * @dev Returns the 32 byte value at the specified index of self.\n    * @param self The byte string.\n    * @param idx The index into the bytes\n    * @return The specified 32 bytes of the string.\n    */\n    function readBytes32(bytes memory self, uint idx) internal pure returns (bytes32 ret) {\n        require(idx + 32 <= self.length);\n        assembly {\n            ret := mload(add(add(self, 32), idx))\n        }\n    }\n\n    /*\n    * @dev Returns the 32 byte value at the specified index of self.\n    * @param self The byte string.\n    * @param idx The index into the bytes\n    * @return The specified 32 bytes of the string.\n    */\n    function readBytes20(bytes memory self, uint idx) internal pure returns (bytes20 ret) {\n        require(idx + 20 <= self.length);\n        assembly {\n            ret := and(mload(add(add(self, 32), idx)), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000)\n        }\n    }\n\n    /*\n    * @dev Returns the n byte value at the specified index of self.\n    * @param self The byte string.\n    * @param idx The index into the bytes.\n    * @param len The number of bytes.\n    * @return The specified 32 bytes of the string.\n    */\n    function readBytesN(bytes memory self, uint idx, uint len) internal pure returns (bytes32 ret) {\n        require(len <= 32);\n        require(idx + len <= self.length);\n        assembly {\n            let mask := not(sub(exp(256, sub(32, len)), 1))\n            ret := and(mload(add(add(self, 32), idx)),  mask)\n        }\n    }\n\n    function memcpy(uint dest, uint src, uint len) private pure {\n        // Copy word-length chunks while possible\n        for (; len >= 32; len -= 32) {\n            assembly {\n                mstore(dest, mload(src))\n            }\n            dest += 32;\n            src += 32;\n        }\n\n        // Copy remaining bytes\n        uint mask = 256 ** (32 - len) - 1;\n        assembly {\n            let srcpart := and(mload(src), not(mask))\n            let destpart := and(mload(dest), mask)\n            mstore(dest, or(destpart, srcpart))\n        }\n    }\n\n    /*\n    * @dev Copies a substring into a new byte string.\n    * @param self The byte string to copy from.\n    * @param offset The offset to start copying at.\n    * @param len The number of bytes to copy.\n    */\n    function substring(bytes memory self, uint offset, uint len) internal pure returns(bytes memory) {\n        require(offset + len <= self.length);\n\n        bytes memory ret = new bytes(len);\n        uint dest;\n        uint src;\n\n        assembly {\n            dest := add(ret, 32)\n            src := add(add(self, 32), offset)\n        }\n        memcpy(dest, src, len);\n\n        return ret;\n    }\n\n    // Maps characters from 0x30 to 0x7A to their base32 values.\n    // 0xFF represents invalid characters in that range.\n    bytes constant base32HexTable = hex'00010203040506070809FFFFFFFFFFFFFF0A0B0C0D0E0F101112131415161718191A1B1C1D1E1FFFFFFFFFFFFFFFFFFFFF0A0B0C0D0E0F101112131415161718191A1B1C1D1E1F';\n\n    /**\n     * @dev Decodes unpadded base32 data of up to one word in length.\n     * @param self The data to decode.\n     * @param off Offset into the string to start at.\n     * @param len Number of characters to decode.\n     * @return The decoded data, left aligned.\n     */\n    function base32HexDecodeWord(bytes memory self, uint off, uint len) internal pure returns(bytes32) {\n        require(len <= 52);\n\n        uint ret = 0;\n        uint8 decoded;\n        for(uint i = 0; i < len; i++) {\n            bytes1 char = self[off + i];\n            require(char >= 0x30 && char <= 0x7A);\n            decoded = uint8(base32HexTable[uint(uint8(char)) - 0x30]);\n            require(decoded <= 0x20);\n            if(i == len - 1) {\n                break;\n            }\n            ret = (ret << 5) | decoded;\n        }\n\n        uint bitlen = len * 5;\n        if(len % 8 == 0) {\n            // Multiple of 8 characters, no padding\n            ret = (ret << 5) | decoded;\n        } else if(len % 8 == 2) {\n            // Two extra characters - 1 byte\n            ret = (ret << 3) | (decoded >> 2);\n            bitlen -= 2;\n        } else if(len % 8 == 4) {\n            // Four extra characters - 2 bytes\n            ret = (ret << 1) | (decoded >> 4);\n            bitlen -= 4;\n        } else if(len % 8 == 5) {\n            // Five extra characters - 3 bytes\n            ret = (ret << 4) | (decoded >> 1);\n            bitlen -= 1;\n        } else if(len % 8 == 7) {\n            // Seven extra characters - 4 bytes\n            ret = (ret << 2) | (decoded >> 3);\n            bitlen -= 3;\n        } else {\n            revert();\n        }\n\n        return bytes32(ret << (256 - bitlen));\n    }\n}\n",
  "sourcePath": "@ensdomains/dnssec-oracle/contracts/BytesUtils.sol",
  "ast": {
    "absolutePath": "@ensdomains/dnssec-oracle/contracts/BytesUtils.sol",
    "exportedSymbols": {
      "BytesUtils": [
        2183
      ]
    },
    "id": 2184,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1454,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:7"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "fullyImplemented": true,
        "id": 2183,
        "linearizedBaseContracts": [
          2183
        ],
        "name": "BytesUtils",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1475,
              "nodeType": "Block",
              "src": "399:144:7",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1471,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1468,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1466,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1458,
                            "src": "417:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 1467,
                            "name": "len",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1460,
                            "src": "426:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "417:12:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "id": 1469,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1456,
                            "src": "433:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 1470,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "433:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "417:27:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1465,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "409:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1472,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "409:36:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1473,
                  "nodeType": "ExpressionStatement",
                  "src": "409:36:7"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "464:73:7",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "478:49:7",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "self",
                                      "nodeType": "YulIdentifier",
                                      "src": "503:4:7"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "509:2:7",
                                      "type": "",
                                      "value": "32"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "499:3:7"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "499:13:7"
                                },
                                {
                                  "name": "offset",
                                  "nodeType": "YulIdentifier",
                                  "src": "514:6:7"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "495:3:7"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "495:26:7"
                            },
                            {
                              "name": "len",
                              "nodeType": "YulIdentifier",
                              "src": "523:3:7"
                            }
                          ],
                          "functionName": {
                            "name": "keccak256",
                            "nodeType": "YulIdentifier",
                            "src": "485:9:7"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "485:42:7"
                        },
                        "variableNames": [
                          {
                            "name": "ret",
                            "nodeType": "YulIdentifier",
                            "src": "478:3:7"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1460,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "523:3:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1458,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "514:6:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1463,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "478:3:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1456,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "503:4:7",
                      "valueSize": 1
                    }
                  ],
                  "id": 1474,
                  "nodeType": "InlineAssembly",
                  "src": "455:82:7"
                }
              ]
            },
            "id": 1476,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "keccak",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1461,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1456,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1476,
                  "src": "321:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1455,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "321:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1458,
                  "mutability": "mutable",
                  "name": "offset",
                  "nodeType": "VariableDeclaration",
                  "scope": 1476,
                  "src": "340:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1457,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "340:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1460,
                  "mutability": "mutable",
                  "name": "len",
                  "nodeType": "VariableDeclaration",
                  "scope": 1476,
                  "src": "353:8:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1459,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "353:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "320:42:7"
            },
            "returnParameters": {
              "id": 1464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1463,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1476,
                  "src": "386:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1462,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "386:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "385:13:7"
            },
            "scope": 2183,
            "src": "305:238:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1496,
              "nodeType": "Block",
              "src": "984:77:7",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1486,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1478,
                        "src": "1009:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 1487,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1015:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "expression": {
                          "id": 1488,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1478,
                          "src": "1018:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "1018:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1490,
                        "name": "other",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1480,
                        "src": "1031:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 1491,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1038:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "expression": {
                          "id": 1492,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1480,
                          "src": "1041:5:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1493,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "1041:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1485,
                      "name": "compare",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1497,
                        1633
                      ],
                      "referencedDeclaration": 1633,
                      "src": "1001:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_int256_$",
                        "typeString": "function (bytes memory,uint256,uint256,bytes memory,uint256,uint256) pure returns (int256)"
                      }
                    },
                    "id": 1494,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1001:53:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 1484,
                  "id": 1495,
                  "nodeType": "Return",
                  "src": "994:60:7"
                }
              ]
            },
            "id": 1497,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "compare",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1481,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1478,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1497,
                  "src": "917:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1477,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "917:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1480,
                  "mutability": "mutable",
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 1497,
                  "src": "936:18:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1479,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "936:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "916:39:7"
            },
            "returnParameters": {
              "id": 1484,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1483,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1497,
                  "src": "979:3:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 1482,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "979:3:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "978:5:7"
            },
            "scope": 2183,
            "src": "900:161:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1632,
              "nodeType": "Block",
              "src": "1814:1044:7",
              "statements": [
                {
                  "assignments": [
                    1515
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1515,
                      "mutability": "mutable",
                      "name": "shortest",
                      "nodeType": "VariableDeclaration",
                      "scope": 1632,
                      "src": "1824:13:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1514,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1824:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1517,
                  "initialValue": {
                    "id": 1516,
                    "name": "len",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1503,
                    "src": "1840:3:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1824:19:7"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1520,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1518,
                      "name": "otherlen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1509,
                      "src": "1857:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 1519,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1503,
                      "src": "1868:3:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1857:14:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1525,
                  "nodeType": "IfStatement",
                  "src": "1853:47:7",
                  "trueBody": {
                    "expression": {
                      "id": 1523,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 1521,
                        "name": "shortest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1515,
                        "src": "1881:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "id": 1522,
                        "name": "otherlen",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1509,
                        "src": "1892:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "1881:19:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1524,
                    "nodeType": "ExpressionStatement",
                    "src": "1881:19:7"
                  }
                },
                {
                  "assignments": [
                    1527
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1527,
                      "mutability": "mutable",
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1632,
                      "src": "1911:12:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1526,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1911:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1528,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1911:12:7"
                },
                {
                  "assignments": [
                    1530
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1530,
                      "mutability": "mutable",
                      "name": "otherptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1632,
                      "src": "1933:13:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1529,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1933:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1531,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1933:13:7"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1966:118:7",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "1980:37:7",
                        "value": {
                          "arguments": [
                            {
                              "name": "self",
                              "nodeType": "YulIdentifier",
                              "src": "1995:4:7"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulIdentifier",
                                  "src": "2005:6:7"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2013:2:7",
                                  "type": "",
                                  "value": "32"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "2001:3:7"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2001:15:7"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "1991:3:7"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1991:26:7"
                        },
                        "variableNames": [
                          {
                            "name": "selfptr",
                            "nodeType": "YulIdentifier",
                            "src": "1980:7:7"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2030:44:7",
                        "value": {
                          "arguments": [
                            {
                              "name": "other",
                              "nodeType": "YulIdentifier",
                              "src": "2046:5:7"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "otheroffset",
                                  "nodeType": "YulIdentifier",
                                  "src": "2057:11:7"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2070:2:7",
                                  "type": "",
                                  "value": "32"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "2053:3:7"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2053:20:7"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "2042:3:7"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2042:32:7"
                        },
                        "variableNames": [
                          {
                            "name": "otherptr",
                            "nodeType": "YulIdentifier",
                            "src": "2030:8:7"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1501,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2005:6:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1505,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2046:5:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1507,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2057:11:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1530,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2030:8:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1499,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1995:4:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1527,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1980:7:7",
                      "valueSize": 1
                    }
                  ],
                  "id": 1532,
                  "nodeType": "InlineAssembly",
                  "src": "1957:127:7"
                },
                {
                  "body": {
                    "id": 1620,
                    "nodeType": "Block",
                    "src": "2139:671:7",
                    "statements": [
                      {
                        "assignments": [
                          1545
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1545,
                            "mutability": "mutable",
                            "name": "a",
                            "nodeType": "VariableDeclaration",
                            "scope": 1620,
                            "src": "2153:6:7",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1544,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "2153:4:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1546,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2153:6:7"
                      },
                      {
                        "assignments": [
                          1548
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1548,
                            "mutability": "mutable",
                            "name": "b",
                            "nodeType": "VariableDeclaration",
                            "scope": 1620,
                            "src": "2173:6:7",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1547,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "2173:4:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1549,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2173:6:7"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "2202:88:7",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2220:19:7",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "selfptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "2231:7:7"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2225:5:7"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2225:14:7"
                              },
                              "variableNames": [
                                {
                                  "name": "a",
                                  "nodeType": "YulIdentifier",
                                  "src": "2220:1:7"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2256:20:7",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "otherptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "2267:8:7"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2261:5:7"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2261:15:7"
                              },
                              "variableNames": [
                                {
                                  "name": "b",
                                  "nodeType": "YulIdentifier",
                                  "src": "2256:1:7"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1545,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2220:1:7",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1548,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2256:1:7",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1530,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2267:8:7",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1527,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2231:7:7",
                            "valueSize": 1
                          }
                        ],
                        "id": 1550,
                        "nodeType": "InlineAssembly",
                        "src": "2193:97:7"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1553,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1551,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1545,
                            "src": "2307:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 1552,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1548,
                            "src": "2312:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2307:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1611,
                        "nodeType": "IfStatement",
                        "src": "2303:442:7",
                        "trueBody": {
                          "id": 1610,
                          "nodeType": "Block",
                          "src": "2315:430:7",
                          "statements": [
                            {
                              "assignments": [
                                1555
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1555,
                                  "mutability": "mutable",
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1610,
                                  "src": "2394:9:7",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1554,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2394:4:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1556,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "2394:9:7"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1559,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1557,
                                  "name": "shortest",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1515,
                                  "src": "2425:8:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "3332",
                                  "id": 1558,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2436:2:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "2425:13:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 1587,
                                "nodeType": "Block",
                                "src": "2526:87:7",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 1585,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 1569,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1555,
                                        "src": "2548:4:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 1584,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "~",
                                        "prefix": true,
                                        "src": "2555:39:7",
                                        "subExpression": {
                                          "components": [
                                            {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 1582,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "commonType": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "id": 1580,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "hexValue": "32",
                                                  "id": 1570,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "2557:1:7",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_2_by_1",
                                                    "typeString": "int_const 2"
                                                  },
                                                  "value": "2"
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "**",
                                                "rightExpression": {
                                                  "components": [
                                                    {
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "id": 1578,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "leftExpression": {
                                                        "hexValue": "38",
                                                        "id": 1571,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "2563:1:7",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_rational_8_by_1",
                                                          "typeString": "int_const 8"
                                                        },
                                                        "value": "8"
                                                      },
                                                      "nodeType": "BinaryOperation",
                                                      "operator": "*",
                                                      "rightExpression": {
                                                        "components": [
                                                          {
                                                            "commonType": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            },
                                                            "id": 1576,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                              "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              },
                                                              "id": 1574,
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "leftExpression": {
                                                                "hexValue": "3332",
                                                                "id": 1572,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "2568:2:7",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_rational_32_by_1",
                                                                  "typeString": "int_const 32"
                                                                },
                                                                "value": "32"
                                                              },
                                                              "nodeType": "BinaryOperation",
                                                              "operator": "-",
                                                              "rightExpression": {
                                                                "id": 1573,
                                                                "name": "shortest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1515,
                                                                "src": "2573:8:7",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_uint256",
                                                                  "typeString": "uint256"
                                                                }
                                                              },
                                                              "src": "2568:13:7",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "+",
                                                            "rightExpression": {
                                                              "id": 1575,
                                                              "name": "idx",
                                                              "nodeType": "Identifier",
                                                              "overloadedDeclarations": [],
                                                              "referencedDeclaration": 1534,
                                                              "src": "2584:3:7",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "src": "2568:19:7",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            }
                                                          }
                                                        ],
                                                        "id": 1577,
                                                        "isConstant": false,
                                                        "isInlineArray": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "TupleExpression",
                                                        "src": "2567:21:7",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "src": "2563:25:7",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    }
                                                  ],
                                                  "id": 1579,
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "nodeType": "TupleExpression",
                                                  "src": "2562:27:7",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "src": "2557:32:7",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "-",
                                              "rightExpression": {
                                                "hexValue": "31",
                                                "id": 1581,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2592:1:7",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_1_by_1",
                                                  "typeString": "int_const 1"
                                                },
                                                "value": "1"
                                              },
                                              "src": "2557:36:7",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "id": 1583,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "2556:38:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "2548:46:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1586,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2548:46:7"
                                  }
                                ]
                              },
                              "id": 1588,
                              "nodeType": "IfStatement",
                              "src": "2421:192:7",
                              "trueBody": {
                                "id": 1568,
                                "nodeType": "Block",
                                "src": "2440:80:7",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 1566,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 1560,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1555,
                                        "src": "2462:4:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "id": 1564,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "-",
                                            "prefix": true,
                                            "src": "2477:3:7",
                                            "subExpression": {
                                              "hexValue": "31",
                                              "id": 1563,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "2479:1:7",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_minus_1_by_1",
                                              "typeString": "int_const -1"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_minus_1_by_1",
                                              "typeString": "int_const -1"
                                            }
                                          ],
                                          "id": 1562,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "2469:7:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          },
                                          "typeName": {
                                            "id": 1561,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2469:7:7",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 1565,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2469:12:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "2462:19:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1567,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2462:19:7"
                                  }
                                ]
                              }
                            },
                            {
                              "assignments": [
                                1590
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1590,
                                  "mutability": "mutable",
                                  "name": "diff",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1610,
                                  "src": "2630:9:7",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1589,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2630:4:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1600,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1599,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1593,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 1591,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1545,
                                        "src": "2643:1:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&",
                                      "rightExpression": {
                                        "id": 1592,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1555,
                                        "src": "2647:4:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "2643:8:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1594,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "2642:10:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1597,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 1595,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1548,
                                        "src": "2656:1:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&",
                                      "rightExpression": {
                                        "id": 1596,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1555,
                                        "src": "2660:4:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "2656:8:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1598,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "2655:10:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2642:23:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "2630:35:7"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1603,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1601,
                                  "name": "diff",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1590,
                                  "src": "2687:4:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 1602,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2695:1:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2687:9:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 1609,
                              "nodeType": "IfStatement",
                              "src": "2683:47:7",
                              "trueBody": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 1606,
                                      "name": "diff",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1590,
                                      "src": "2725:4:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 1605,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2721:3:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": {
                                      "id": 1604,
                                      "name": "int",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2721:3:7",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1607,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2721:9:7",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "functionReturnParameters": 1513,
                                "id": 1608,
                                "nodeType": "Return",
                                "src": "2714:16:7"
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 1614,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1612,
                            "name": "selfptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1527,
                            "src": "2758:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 1613,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2769:2:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "2758:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1615,
                        "nodeType": "ExpressionStatement",
                        "src": "2758:13:7"
                      },
                      {
                        "expression": {
                          "id": 1618,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1616,
                            "name": "otherptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1530,
                            "src": "2785:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 1617,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2797:2:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "2785:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1619,
                        "nodeType": "ExpressionStatement",
                        "src": "2785:14:7"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1539,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1537,
                      "name": "idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1534,
                      "src": "2112:3:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 1538,
                      "name": "shortest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1515,
                      "src": "2118:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2112:14:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1621,
                  "initializationExpression": {
                    "assignments": [
                      1534
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1534,
                        "mutability": "mutable",
                        "name": "idx",
                        "nodeType": "VariableDeclaration",
                        "scope": 1621,
                        "src": "2098:8:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1533,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "2098:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 1536,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 1535,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2109:1:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2098:12:7"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 1542,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 1540,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1534,
                        "src": "2128:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "hexValue": "3332",
                        "id": 1541,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2135:2:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "2128:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1543,
                    "nodeType": "ExpressionStatement",
                    "src": "2128:9:7"
                  },
                  "nodeType": "ForStatement",
                  "src": "2093:717:7"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 1630,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 1624,
                          "name": "len",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1503,
                          "src": "2831:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1623,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2827:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": {
                          "id": 1622,
                          "name": "int",
                          "nodeType": "ElementaryTypeName",
                          "src": "2827:3:7",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1625,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2827:8:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 1628,
                          "name": "otherlen",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1509,
                          "src": "2842:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1627,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2838:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": {
                          "id": 1626,
                          "name": "int",
                          "nodeType": "ElementaryTypeName",
                          "src": "2838:3:7",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1629,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2838:13:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "2827:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 1513,
                  "id": 1631,
                  "nodeType": "Return",
                  "src": "2820:31:7"
                }
              ]
            },
            "id": 1633,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "compare",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1510,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1499,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1633,
                  "src": "1691:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1498,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1691:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1501,
                  "mutability": "mutable",
                  "name": "offset",
                  "nodeType": "VariableDeclaration",
                  "scope": 1633,
                  "src": "1710:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1500,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1710:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1503,
                  "mutability": "mutable",
                  "name": "len",
                  "nodeType": "VariableDeclaration",
                  "scope": 1633,
                  "src": "1723:8:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1502,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1723:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1505,
                  "mutability": "mutable",
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 1633,
                  "src": "1733:18:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1504,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1733:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1507,
                  "mutability": "mutable",
                  "name": "otheroffset",
                  "nodeType": "VariableDeclaration",
                  "scope": 1633,
                  "src": "1753:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1506,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1753:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1509,
                  "mutability": "mutable",
                  "name": "otherlen",
                  "nodeType": "VariableDeclaration",
                  "scope": 1633,
                  "src": "1771:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1508,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1771:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1690:95:7"
            },
            "returnParameters": {
              "id": 1513,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1512,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1633,
                  "src": "1809:3:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 1511,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "1809:3:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1808:5:7"
            },
            "scope": 2183,
            "src": "1674:1184:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1660,
              "nodeType": "Block",
              "src": "3401:84:7",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1658,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 1649,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1635,
                          "src": "3425:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 1650,
                          "name": "offset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1637,
                          "src": "3431:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 1651,
                          "name": "len",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1643,
                          "src": "3439:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1648,
                        "name": "keccak",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1476,
                        "src": "3418:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes32)"
                        }
                      },
                      "id": 1652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3418:25:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 1654,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1639,
                          "src": "3454:5:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 1655,
                          "name": "otherOffset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1641,
                          "src": "3461:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 1656,
                          "name": "len",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1643,
                          "src": "3474:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1653,
                        "name": "keccak",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1476,
                        "src": "3447:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes32)"
                        }
                      },
                      "id": 1657,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3447:31:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3418:60:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1647,
                  "id": 1659,
                  "nodeType": "Return",
                  "src": "3411:67:7"
                }
              ]
            },
            "id": 1661,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "equals",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1644,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1635,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1661,
                  "src": "3292:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1634,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3292:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1637,
                  "mutability": "mutable",
                  "name": "offset",
                  "nodeType": "VariableDeclaration",
                  "scope": 1661,
                  "src": "3311:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1636,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3311:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1639,
                  "mutability": "mutable",
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 1661,
                  "src": "3324:18:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1638,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3324:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1641,
                  "mutability": "mutable",
                  "name": "otherOffset",
                  "nodeType": "VariableDeclaration",
                  "scope": 1661,
                  "src": "3344:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1640,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3344:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1643,
                  "mutability": "mutable",
                  "name": "len",
                  "nodeType": "VariableDeclaration",
                  "scope": 1661,
                  "src": "3362:8:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1642,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3362:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3291:80:7"
            },
            "returnParameters": {
              "id": 1647,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1646,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1661,
                  "src": "3395:4:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1645,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3395:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3394:6:7"
            },
            "scope": 2183,
            "src": "3276:209:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1692,
              "nodeType": "Block",
              "src": "3983:124:7",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 1675,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1663,
                          "src": "4007:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 1676,
                          "name": "offset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1665,
                          "src": "4013:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1680,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 1677,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1663,
                              "src": "4021:4:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1678,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "4021:11:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 1679,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1665,
                            "src": "4035:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4021:20:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1674,
                        "name": "keccak",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1476,
                        "src": "4000:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes32)"
                        }
                      },
                      "id": 1681,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4000:42:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 1683,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1667,
                          "src": "4053:5:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 1684,
                          "name": "otherOffset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1669,
                          "src": "4060:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1688,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 1685,
                              "name": "other",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1667,
                              "src": "4073:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1686,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "4073:12:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 1687,
                            "name": "otherOffset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1669,
                            "src": "4088:11:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4073:26:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1682,
                        "name": "keccak",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1476,
                        "src": "4046:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes32)"
                        }
                      },
                      "id": 1689,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4046:54:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4000:100:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1673,
                  "id": 1691,
                  "nodeType": "Return",
                  "src": "3993:107:7"
                }
              ]
            },
            "id": 1693,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "equals",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1670,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1663,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1693,
                  "src": "3884:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1662,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3884:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1665,
                  "mutability": "mutable",
                  "name": "offset",
                  "nodeType": "VariableDeclaration",
                  "scope": 1693,
                  "src": "3903:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1664,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3903:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1667,
                  "mutability": "mutable",
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 1693,
                  "src": "3916:18:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1666,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3916:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1669,
                  "mutability": "mutable",
                  "name": "otherOffset",
                  "nodeType": "VariableDeclaration",
                  "scope": 1693,
                  "src": "3936:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1668,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3936:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3883:70:7"
            },
            "returnParameters": {
              "id": 1673,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1672,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1693,
                  "src": "3977:4:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1671,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3977:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3976:6:7"
            },
            "scope": 2183,
            "src": "3868:239:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1721,
              "nodeType": "Block",
              "src": "4556:108:7",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1710,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 1704,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1695,
                          "src": "4573:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1705,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "4573:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1709,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1706,
                          "name": "offset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1697,
                          "src": "4588:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "expression": {
                            "id": 1707,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1699,
                            "src": "4597:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 1708,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "4597:12:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4588:21:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4573:36:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 1712,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1695,
                          "src": "4620:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 1713,
                          "name": "offset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1697,
                          "src": "4626:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 1714,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1699,
                          "src": "4634:5:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "hexValue": "30",
                          "id": 1715,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4641:1:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        {
                          "expression": {
                            "id": 1716,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1699,
                            "src": "4644:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 1717,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "4644:12:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1711,
                        "name": "equals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          1661,
                          1693,
                          1722,
                          1747
                        ],
                        "referencedDeclaration": 1661,
                        "src": "4613:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure returns (bool)"
                        }
                      },
                      "id": 1718,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4613:44:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4573:84:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1703,
                  "id": 1720,
                  "nodeType": "Return",
                  "src": "4566:91:7"
                }
              ]
            },
            "id": 1722,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "equals",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1700,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1695,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1722,
                  "src": "4475:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1694,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4475:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1697,
                  "mutability": "mutable",
                  "name": "offset",
                  "nodeType": "VariableDeclaration",
                  "scope": 1722,
                  "src": "4494:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1696,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4494:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1699,
                  "mutability": "mutable",
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 1722,
                  "src": "4507:18:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1698,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4507:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4474:52:7"
            },
            "returnParameters": {
              "id": 1703,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1702,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1722,
                  "src": "4550:4:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1701,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4550:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4549:6:7"
            },
            "scope": 2183,
            "src": "4459:205:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1746,
              "nodeType": "Block",
              "src": "4995:93:7",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1735,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 1731,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1724,
                          "src": "5012:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1732,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "5012:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "expression": {
                          "id": 1733,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1726,
                          "src": "5027:5:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1734,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "5027:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5012:27:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 1737,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1724,
                          "src": "5050:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "hexValue": "30",
                          "id": 1738,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5056:1:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        {
                          "id": 1739,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1726,
                          "src": "5059:5:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "hexValue": "30",
                          "id": 1740,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5066:1:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        {
                          "expression": {
                            "id": 1741,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1724,
                            "src": "5069:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 1742,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "5069:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1736,
                        "name": "equals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          1661,
                          1693,
                          1722,
                          1747
                        ],
                        "referencedDeclaration": 1661,
                        "src": "5043:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure returns (bool)"
                        }
                      },
                      "id": 1743,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5043:38:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5012:69:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1730,
                  "id": 1745,
                  "nodeType": "Return",
                  "src": "5005:76:7"
                }
              ]
            },
            "id": 1747,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "equals",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1727,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1724,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1747,
                  "src": "4928:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1723,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4928:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1726,
                  "mutability": "mutable",
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 1747,
                  "src": "4947:18:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1725,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4947:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4927:39:7"
            },
            "returnParameters": {
              "id": 1730,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1729,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1747,
                  "src": "4989:4:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1728,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4989:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4988:6:7"
            },
            "scope": 2183,
            "src": "4912:176:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1763,
              "nodeType": "Block",
              "src": "5412:40:7",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 1758,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1749,
                          "src": "5435:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1760,
                        "indexExpression": {
                          "id": 1759,
                          "name": "idx",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1751,
                          "src": "5440:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5435:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes1",
                          "typeString": "bytes1"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes1",
                          "typeString": "bytes1"
                        }
                      ],
                      "id": 1757,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "5429:5:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint8_$",
                        "typeString": "type(uint8)"
                      },
                      "typeName": {
                        "id": 1756,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "5429:5:7",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 1761,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5429:16:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "functionReturnParameters": 1755,
                  "id": 1762,
                  "nodeType": "Return",
                  "src": "5422:23:7"
                }
              ]
            },
            "id": 1764,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "readUint8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1752,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1749,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1764,
                  "src": "5349:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1748,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5349:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1751,
                  "mutability": "mutable",
                  "name": "idx",
                  "nodeType": "VariableDeclaration",
                  "scope": 1764,
                  "src": "5368:8:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1750,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5368:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5348:29:7"
            },
            "returnParameters": {
              "id": 1755,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1754,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1764,
                  "src": "5401:9:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 1753,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "5401:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5400:11:7"
            },
            "scope": 2183,
            "src": "5330:122:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1783,
              "nodeType": "Block",
              "src": "5780:139:7",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1779,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1776,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1774,
                            "name": "idx",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1768,
                            "src": "5798:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "hexValue": "32",
                            "id": 1775,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5804:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "5798:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "id": 1777,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1766,
                            "src": "5809:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 1778,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "5809:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5798:22:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1773,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5790:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1780,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5790:31:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1781,
                  "nodeType": "ExpressionStatement",
                  "src": "5790:31:7"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "5840:73:7",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "5854:49:7",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "self",
                                          "nodeType": "YulIdentifier",
                                          "src": "5879:4:7"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5885:1:7",
                                          "type": "",
                                          "value": "2"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "5875:3:7"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5875:12:7"
                                    },
                                    {
                                      "name": "idx",
                                      "nodeType": "YulIdentifier",
                                      "src": "5889:3:7"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "5871:3:7"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "5871:22:7"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "5865:5:7"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5865:29:7"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5896:6:7",
                              "type": "",
                              "value": "0xFFFF"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "5861:3:7"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5861:42:7"
                        },
                        "variableNames": [
                          {
                            "name": "ret",
                            "nodeType": "YulIdentifier",
                            "src": "5854:3:7"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1768,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5889:3:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1771,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5854:3:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1766,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5879:4:7",
                      "valueSize": 1
                    }
                  ],
                  "id": 1782,
                  "nodeType": "InlineAssembly",
                  "src": "5831:82:7"
                }
              ]
            },
            "id": 1784,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "readUint16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1769,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1766,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1784,
                  "src": "5716:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1765,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5716:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1768,
                  "mutability": "mutable",
                  "name": "idx",
                  "nodeType": "VariableDeclaration",
                  "scope": 1784,
                  "src": "5735:8:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1767,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5735:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5715:29:7"
            },
            "returnParameters": {
              "id": 1772,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1771,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1784,
                  "src": "5768:10:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 1770,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "5768:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5767:12:7"
            },
            "scope": 2183,
            "src": "5696:223:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1803,
              "nodeType": "Block",
              "src": "6247:143:7",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1796,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1794,
                            "name": "idx",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1788,
                            "src": "6265:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "hexValue": "34",
                            "id": 1795,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6271:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          },
                          "src": "6265:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "id": 1797,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1786,
                            "src": "6276:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 1798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "6276:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6265:22:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1793,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6257:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1800,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6257:31:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1801,
                  "nodeType": "ExpressionStatement",
                  "src": "6257:31:7"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "6307:77:7",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "6321:53:7",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "self",
                                          "nodeType": "YulIdentifier",
                                          "src": "6346:4:7"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6352:1:7",
                                          "type": "",
                                          "value": "4"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6342:3:7"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6342:12:7"
                                    },
                                    {
                                      "name": "idx",
                                      "nodeType": "YulIdentifier",
                                      "src": "6356:3:7"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "6338:3:7"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "6338:22:7"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "6332:5:7"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "6332:29:7"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6363:10:7",
                              "type": "",
                              "value": "0xFFFFFFFF"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "6328:3:7"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6328:46:7"
                        },
                        "variableNames": [
                          {
                            "name": "ret",
                            "nodeType": "YulIdentifier",
                            "src": "6321:3:7"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1788,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "6356:3:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1791,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "6321:3:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1786,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "6346:4:7",
                      "valueSize": 1
                    }
                  ],
                  "id": 1802,
                  "nodeType": "InlineAssembly",
                  "src": "6298:86:7"
                }
              ]
            },
            "id": 1804,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "readUint32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1789,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1786,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1804,
                  "src": "6183:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1785,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6183:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1788,
                  "mutability": "mutable",
                  "name": "idx",
                  "nodeType": "VariableDeclaration",
                  "scope": 1804,
                  "src": "6202:8:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1787,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6202:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6182:29:7"
            },
            "returnParameters": {
              "id": 1792,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1791,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1804,
                  "src": "6235:10:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 1790,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6235:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6234:12:7"
            },
            "scope": 2183,
            "src": "6163:227:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1823,
              "nodeType": "Block",
              "src": "6694:128:7",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1819,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1816,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1814,
                            "name": "idx",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1808,
                            "src": "6712:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "hexValue": "3332",
                            "id": 1815,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6718:2:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "6712:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "id": 1817,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1806,
                            "src": "6724:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 1818,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "6724:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6712:23:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1813,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6704:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1820,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6704:32:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1821,
                  "nodeType": "ExpressionStatement",
                  "src": "6704:32:7"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "6755:61:7",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "6769:37:7",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "self",
                                      "nodeType": "YulIdentifier",
                                      "src": "6790:4:7"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "6796:2:7",
                                      "type": "",
                                      "value": "32"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "6786:3:7"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "6786:13:7"
                                },
                                {
                                  "name": "idx",
                                  "nodeType": "YulIdentifier",
                                  "src": "6801:3:7"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "6782:3:7"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "6782:23:7"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "6776:5:7"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6776:30:7"
                        },
                        "variableNames": [
                          {
                            "name": "ret",
                            "nodeType": "YulIdentifier",
                            "src": "6769:3:7"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1808,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "6801:3:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1811,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "6769:3:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1806,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "6790:4:7",
                      "valueSize": 1
                    }
                  ],
                  "id": 1822,
                  "nodeType": "InlineAssembly",
                  "src": "6746:70:7"
                }
              ]
            },
            "id": 1824,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "readBytes32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1809,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1806,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1824,
                  "src": "6629:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1805,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6629:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1808,
                  "mutability": "mutable",
                  "name": "idx",
                  "nodeType": "VariableDeclaration",
                  "scope": 1824,
                  "src": "6648:8:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1807,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6648:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6628:29:7"
            },
            "returnParameters": {
              "id": 1812,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1811,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1824,
                  "src": "6681:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1810,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6681:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6680:13:7"
            },
            "scope": 2183,
            "src": "6608:214:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1843,
              "nodeType": "Block",
              "src": "7126:201:7",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1834,
                            "name": "idx",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1828,
                            "src": "7144:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "hexValue": "3230",
                            "id": 1835,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7150:2:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_20_by_1",
                              "typeString": "int_const 20"
                            },
                            "value": "20"
                          },
                          "src": "7144:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "id": 1837,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1826,
                            "src": "7156:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 1838,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "7156:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7144:23:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1833,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7136:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7136:32:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1841,
                  "nodeType": "ExpressionStatement",
                  "src": "7136:32:7"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "7187:134:7",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "7201:110:7",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "self",
                                          "nodeType": "YulIdentifier",
                                          "src": "7226:4:7"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7232:2:7",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7222:3:7"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7222:13:7"
                                    },
                                    {
                                      "name": "idx",
                                      "nodeType": "YulIdentifier",
                                      "src": "7237:3:7"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "7218:3:7"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "7218:23:7"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "7212:5:7"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7212:30:7"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7244:66:7",
                              "type": "",
                              "value": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "7208:3:7"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7208:103:7"
                        },
                        "variableNames": [
                          {
                            "name": "ret",
                            "nodeType": "YulIdentifier",
                            "src": "7201:3:7"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1828,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "7237:3:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1831,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "7201:3:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1826,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "7226:4:7",
                      "valueSize": 1
                    }
                  ],
                  "id": 1842,
                  "nodeType": "InlineAssembly",
                  "src": "7178:143:7"
                }
              ]
            },
            "id": 1844,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "readBytes20",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1829,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1826,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1844,
                  "src": "7061:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1825,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7061:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1828,
                  "mutability": "mutable",
                  "name": "idx",
                  "nodeType": "VariableDeclaration",
                  "scope": 1844,
                  "src": "7080:8:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1827,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "7080:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7060:29:7"
            },
            "returnParameters": {
              "id": 1832,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1831,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1844,
                  "src": "7113:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  },
                  "typeName": {
                    "id": 1830,
                    "name": "bytes20",
                    "nodeType": "ElementaryTypeName",
                    "src": "7113:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7112:13:7"
            },
            "scope": 2183,
            "src": "7040:287:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1871,
              "nodeType": "Block",
              "src": "7678:229:7",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1856,
                          "name": "len",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1850,
                          "src": "7696:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "hexValue": "3332",
                          "id": 1857,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7703:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_32_by_1",
                            "typeString": "int_const 32"
                          },
                          "value": "32"
                        },
                        "src": "7696:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1855,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7688:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7688:18:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1860,
                  "nodeType": "ExpressionStatement",
                  "src": "7688:18:7"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1867,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1864,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1862,
                            "name": "idx",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1848,
                            "src": "7724:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 1863,
                            "name": "len",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1850,
                            "src": "7730:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7724:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "id": 1865,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1846,
                            "src": "7737:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 1866,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "7737:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7724:24:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1861,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7716:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1868,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7716:33:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1869,
                  "nodeType": "ExpressionStatement",
                  "src": "7716:33:7"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "7768:133:7",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "7782:47:7",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "7806:3:7",
                                      "type": "",
                                      "value": "256"
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7815:2:7",
                                          "type": "",
                                          "value": "32"
                                        },
                                        {
                                          "name": "len",
                                          "nodeType": "YulIdentifier",
                                          "src": "7819:3:7"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "sub",
                                        "nodeType": "YulIdentifier",
                                        "src": "7811:3:7"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7811:12:7"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "exp",
                                    "nodeType": "YulIdentifier",
                                    "src": "7802:3:7"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "7802:22:7"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "7826:1:7",
                                  "type": "",
                                  "value": "1"
                                }
                              ],
                              "functionName": {
                                "name": "sub",
                                "nodeType": "YulIdentifier",
                                "src": "7798:3:7"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7798:30:7"
                            }
                          ],
                          "functionName": {
                            "name": "not",
                            "nodeType": "YulIdentifier",
                            "src": "7794:3:7"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7794:35:7"
                        },
                        "variables": [
                          {
                            "name": "mask",
                            "nodeType": "YulTypedName",
                            "src": "7786:4:7",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "7842:49:7",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "self",
                                          "nodeType": "YulIdentifier",
                                          "src": "7867:4:7"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7873:2:7",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7863:3:7"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7863:13:7"
                                    },
                                    {
                                      "name": "idx",
                                      "nodeType": "YulIdentifier",
                                      "src": "7878:3:7"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "7859:3:7"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "7859:23:7"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "7853:5:7"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7853:30:7"
                            },
                            {
                              "name": "mask",
                              "nodeType": "YulIdentifier",
                              "src": "7886:4:7"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "7849:3:7"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7849:42:7"
                        },
                        "variableNames": [
                          {
                            "name": "ret",
                            "nodeType": "YulIdentifier",
                            "src": "7842:3:7"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1848,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "7878:3:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1850,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "7819:3:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1853,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "7842:3:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1846,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "7867:4:7",
                      "valueSize": 1
                    }
                  ],
                  "id": 1870,
                  "nodeType": "InlineAssembly",
                  "src": "7759:142:7"
                }
              ]
            },
            "id": 1872,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "readBytesN",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1851,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1846,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1872,
                  "src": "7603:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1845,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7603:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1848,
                  "mutability": "mutable",
                  "name": "idx",
                  "nodeType": "VariableDeclaration",
                  "scope": 1872,
                  "src": "7622:8:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1847,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "7622:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1850,
                  "mutability": "mutable",
                  "name": "len",
                  "nodeType": "VariableDeclaration",
                  "scope": 1872,
                  "src": "7632:8:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1849,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "7632:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7602:39:7"
            },
            "returnParameters": {
              "id": 1854,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1853,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1872,
                  "src": "7665:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1852,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7665:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7664:13:7"
            },
            "scope": 2183,
            "src": "7583:324:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1911,
              "nodeType": "Block",
              "src": "7973:489:7",
              "statements": [
                {
                  "body": {
                    "id": 1897,
                    "nodeType": "Block",
                    "src": "8062:136:7",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "8085:56:7",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dest",
                                    "nodeType": "YulIdentifier",
                                    "src": "8110:4:7"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "8122:3:7"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "8116:5:7"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8116:10:7"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8103:6:7"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8103:24:7"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8103:24:7"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 1874,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8110:4:7",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1876,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8122:3:7",
                            "valueSize": 1
                          }
                        ],
                        "id": 1888,
                        "nodeType": "InlineAssembly",
                        "src": "8076:65:7"
                      },
                      {
                        "expression": {
                          "id": 1891,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1889,
                            "name": "dest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1874,
                            "src": "8154:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 1890,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8162:2:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "8154:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1892,
                        "nodeType": "ExpressionStatement",
                        "src": "8154:10:7"
                      },
                      {
                        "expression": {
                          "id": 1895,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1893,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1876,
                            "src": "8178:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 1894,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8185:2:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "8178:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1896,
                        "nodeType": "ExpressionStatement",
                        "src": "8178:9:7"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1881,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1878,
                      "src": "8040:3:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "hexValue": "3332",
                      "id": 1882,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8047:2:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "8040:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1898,
                  "loopExpression": {
                    "expression": {
                      "id": 1886,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 1884,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1878,
                        "src": "8051:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "-=",
                      "rightHandSide": {
                        "hexValue": "3332",
                        "id": 1885,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8058:2:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "8051:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1887,
                    "nodeType": "ExpressionStatement",
                    "src": "8051:9:7"
                  },
                  "nodeType": "ForStatement",
                  "src": "8033:165:7"
                },
                {
                  "assignments": [
                    1900
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1900,
                      "mutability": "mutable",
                      "name": "mask",
                      "nodeType": "VariableDeclaration",
                      "scope": 1911,
                      "src": "8240:9:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1899,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "8240:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1909,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1908,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1906,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "hexValue": "323536",
                        "id": 1901,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8252:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_256_by_1",
                          "typeString": "int_const 256"
                        },
                        "value": "256"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "**",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1904,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "3332",
                              "id": 1902,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8260:2:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "32"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "id": 1903,
                              "name": "len",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1878,
                              "src": "8265:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "8260:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 1905,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "8259:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "8252:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 1907,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8272:1:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "8252:21:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8240:33:7"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "8292:164:7",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "8306:41:7",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "src",
                                  "nodeType": "YulIdentifier",
                                  "src": "8331:3:7"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "8325:5:7"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8325:10:7"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "mask",
                                  "nodeType": "YulIdentifier",
                                  "src": "8341:4:7"
                                }
                              ],
                              "functionName": {
                                "name": "not",
                                "nodeType": "YulIdentifier",
                                "src": "8337:3:7"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8337:9:7"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "8321:3:7"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8321:26:7"
                        },
                        "variables": [
                          {
                            "name": "srcpart",
                            "nodeType": "YulTypedName",
                            "src": "8310:7:7",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "8360:38:7",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dest",
                                  "nodeType": "YulIdentifier",
                                  "src": "8386:4:7"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "8380:5:7"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8380:11:7"
                            },
                            {
                              "name": "mask",
                              "nodeType": "YulIdentifier",
                              "src": "8393:4:7"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "8376:3:7"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8376:22:7"
                        },
                        "variables": [
                          {
                            "name": "destpart",
                            "nodeType": "YulTypedName",
                            "src": "8364:8:7",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "dest",
                              "nodeType": "YulIdentifier",
                              "src": "8418:4:7"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "destpart",
                                  "nodeType": "YulIdentifier",
                                  "src": "8427:8:7"
                                },
                                {
                                  "name": "srcpart",
                                  "nodeType": "YulIdentifier",
                                  "src": "8437:7:7"
                                }
                              ],
                              "functionName": {
                                "name": "or",
                                "nodeType": "YulIdentifier",
                                "src": "8424:2:7"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8424:21:7"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "8411:6:7"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8411:35:7"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8411:35:7"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1874,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8386:4:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1874,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8418:4:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1900,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8341:4:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1900,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8393:4:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1876,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8331:3:7",
                      "valueSize": 1
                    }
                  ],
                  "id": 1910,
                  "nodeType": "InlineAssembly",
                  "src": "8283:173:7"
                }
              ]
            },
            "id": 1912,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "memcpy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1879,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1874,
                  "mutability": "mutable",
                  "name": "dest",
                  "nodeType": "VariableDeclaration",
                  "scope": 1912,
                  "src": "7929:9:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1873,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "7929:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1876,
                  "mutability": "mutable",
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 1912,
                  "src": "7940:8:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1875,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "7940:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1878,
                  "mutability": "mutable",
                  "name": "len",
                  "nodeType": "VariableDeclaration",
                  "scope": 1912,
                  "src": "7950:8:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1877,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "7950:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7928:31:7"
            },
            "returnParameters": {
              "id": 1880,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7973:0:7"
            },
            "scope": 2183,
            "src": "7913:549:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1954,
              "nodeType": "Block",
              "src": "8779:296:7",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1929,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1926,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1924,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1916,
                            "src": "8797:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 1925,
                            "name": "len",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1918,
                            "src": "8806:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8797:12:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "id": 1927,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1914,
                            "src": "8813:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 1928,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "8813:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8797:27:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1923,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8789:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8789:36:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1931,
                  "nodeType": "ExpressionStatement",
                  "src": "8789:36:7"
                },
                {
                  "assignments": [
                    1933
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1933,
                      "mutability": "mutable",
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 1954,
                      "src": "8836:16:7",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1932,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "8836:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1938,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1936,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1918,
                        "src": "8865:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1935,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "8855:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 1934,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "8859:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 1937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8855:14:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8836:33:7"
                },
                {
                  "assignments": [
                    1940
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1940,
                      "mutability": "mutable",
                      "name": "dest",
                      "nodeType": "VariableDeclaration",
                      "scope": 1954,
                      "src": "8879:9:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1939,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "8879:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1941,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8879:9:7"
                },
                {
                  "assignments": [
                    1943
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1943,
                      "mutability": "mutable",
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 1954,
                      "src": "8898:8:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1942,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "8898:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1944,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8898:8:7"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "8926:90:7",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "8940:20:7",
                        "value": {
                          "arguments": [
                            {
                              "name": "ret",
                              "nodeType": "YulIdentifier",
                              "src": "8952:3:7"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8957:2:7",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "8948:3:7"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8948:12:7"
                        },
                        "variableNames": [
                          {
                            "name": "dest",
                            "nodeType": "YulIdentifier",
                            "src": "8940:4:7"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "8973:33:7",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "self",
                                  "nodeType": "YulIdentifier",
                                  "src": "8988:4:7"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "8994:2:7",
                                  "type": "",
                                  "value": "32"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "8984:3:7"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "8984:13:7"
                            },
                            {
                              "name": "offset",
                              "nodeType": "YulIdentifier",
                              "src": "8999:6:7"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "8980:3:7"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8980:26:7"
                        },
                        "variableNames": [
                          {
                            "name": "src",
                            "nodeType": "YulIdentifier",
                            "src": "8973:3:7"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1940,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8940:4:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1916,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8999:6:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1933,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8952:3:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1914,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8988:4:7",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1943,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "8973:3:7",
                      "valueSize": 1
                    }
                  ],
                  "id": 1945,
                  "nodeType": "InlineAssembly",
                  "src": "8917:99:7"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1947,
                        "name": "dest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1940,
                        "src": "9032:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1948,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1943,
                        "src": "9038:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1949,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1918,
                        "src": "9043:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1946,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1912,
                      "src": "9025:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 1950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9025:22:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1951,
                  "nodeType": "ExpressionStatement",
                  "src": "9025:22:7"
                },
                {
                  "expression": {
                    "id": 1952,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1933,
                    "src": "9065:3:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 1922,
                  "id": 1953,
                  "nodeType": "Return",
                  "src": "9058:10:7"
                }
              ]
            },
            "id": 1955,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "substring",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1919,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1914,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1955,
                  "src": "8701:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1913,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8701:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1916,
                  "mutability": "mutable",
                  "name": "offset",
                  "nodeType": "VariableDeclaration",
                  "scope": 1955,
                  "src": "8720:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1915,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "8720:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1918,
                  "mutability": "mutable",
                  "name": "len",
                  "nodeType": "VariableDeclaration",
                  "scope": 1955,
                  "src": "8733:8:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1917,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "8733:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8700:42:7"
            },
            "returnParameters": {
              "id": 1922,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1921,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1955,
                  "src": "8765:12:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1920,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8765:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8764:14:7"
            },
            "scope": 2183,
            "src": "8682:393:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 1958,
            "mutability": "constant",
            "name": "base32HexTable",
            "nodeType": "VariableDeclaration",
            "scope": 2183,
            "src": "9203:179:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes_memory_ptr",
              "typeString": "bytes"
            },
            "typeName": {
              "id": 1956,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "9203:5:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            },
            "value": {
              "hexValue": "00010203040506070809ffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fffffffffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
              "id": 1957,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "hexString",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "9235:147:7",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_9e82410dbf01e63aa72c1e18aee3deb28d15751fdce22e55714ad62f7fde606a",
                "typeString": "literal_string hex\"00010203040506070809ffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fffffffffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\""
              }
            },
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2181,
              "nodeType": "Block",
              "src": "9764:1299:7",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1973,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1971,
                          "name": "len",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1965,
                          "src": "9782:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "hexValue": "3532",
                          "id": 1972,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9789:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_52_by_1",
                            "typeString": "int_const 52"
                          },
                          "value": "52"
                        },
                        "src": "9782:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1970,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9774:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1974,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9774:18:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1975,
                  "nodeType": "ExpressionStatement",
                  "src": "9774:18:7"
                },
                {
                  "assignments": [
                    1977
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1977,
                      "mutability": "mutable",
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 2181,
                      "src": "9803:8:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1976,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9803:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1979,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 1978,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9814:1:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9803:12:7"
                },
                {
                  "assignments": [
                    1981
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1981,
                      "mutability": "mutable",
                      "name": "decoded",
                      "nodeType": "VariableDeclaration",
                      "scope": 2181,
                      "src": "9825:13:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 1980,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "9825:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1982,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9825:13:7"
                },
                {
                  "body": {
                    "id": 2051,
                    "nodeType": "Block",
                    "src": "9878:320:7",
                    "statements": [
                      {
                        "assignments": [
                          1994
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1994,
                            "mutability": "mutable",
                            "name": "char",
                            "nodeType": "VariableDeclaration",
                            "scope": 2051,
                            "src": "9892:11:7",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            },
                            "typeName": {
                              "id": 1993,
                              "name": "bytes1",
                              "nodeType": "ElementaryTypeName",
                              "src": "9892:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2000,
                        "initialValue": {
                          "baseExpression": {
                            "id": 1995,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1961,
                            "src": "9906:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 1999,
                          "indexExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1998,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1996,
                              "name": "off",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1963,
                              "src": "9911:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "id": 1997,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1984,
                              "src": "9917:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "9911:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9906:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9892:27:7"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 2008,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes1",
                                  "typeString": "bytes1"
                                },
                                "id": 2004,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2002,
                                  "name": "char",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1994,
                                  "src": "9941:4:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "hexValue": "30783330",
                                  "id": 2003,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9949:4:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_48_by_1",
                                    "typeString": "int_const 48"
                                  },
                                  "value": "0x30"
                                },
                                "src": "9941:12:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes1",
                                  "typeString": "bytes1"
                                },
                                "id": 2007,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2005,
                                  "name": "char",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1994,
                                  "src": "9957:4:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "hexValue": "30783741",
                                  "id": 2006,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9965:4:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_122_by_1",
                                    "typeString": "int_const 122"
                                  },
                                  "value": "0x7A"
                                },
                                "src": "9957:12:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "9941:28:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 2001,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9933:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 2009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9933:37:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2010,
                        "nodeType": "ExpressionStatement",
                        "src": "9933:37:7"
                      },
                      {
                        "expression": {
                          "id": 2026,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2011,
                            "name": "decoded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1981,
                            "src": "9984:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "baseExpression": {
                                  "id": 2014,
                                  "name": "base32HexTable",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1958,
                                  "src": "10000:14:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 2024,
                                "indexExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2023,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "id": 2019,
                                            "name": "char",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1994,
                                            "src": "10026:4:7",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes1",
                                              "typeString": "bytes1"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes1",
                                              "typeString": "bytes1"
                                            }
                                          ],
                                          "id": 2018,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "10020:5:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint8_$",
                                            "typeString": "type(uint8)"
                                          },
                                          "typeName": {
                                            "id": 2017,
                                            "name": "uint8",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "10020:5:7",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 2020,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10020:11:7",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      ],
                                      "id": 2016,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "10015:4:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": {
                                        "id": 2015,
                                        "name": "uint",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10015:4:7",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 2021,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10015:17:7",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "hexValue": "30783330",
                                    "id": 2022,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10035:4:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_48_by_1",
                                      "typeString": "int_const 48"
                                    },
                                    "value": "0x30"
                                  },
                                  "src": "10015:24:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "10000:40:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes1",
                                  "typeString": "bytes1"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes1",
                                  "typeString": "bytes1"
                                }
                              ],
                              "id": 2013,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9994:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint8_$",
                                "typeString": "type(uint8)"
                              },
                              "typeName": {
                                "id": 2012,
                                "name": "uint8",
                                "nodeType": "ElementaryTypeName",
                                "src": "9994:5:7",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 2025,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9994:47:7",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "9984:57:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 2027,
                        "nodeType": "ExpressionStatement",
                        "src": "9984:57:7"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "id": 2031,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2029,
                                "name": "decoded",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1981,
                                "src": "10063:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "hexValue": "30783230",
                                "id": 2030,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10074:4:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_32_by_1",
                                  "typeString": "int_const 32"
                                },
                                "value": "0x20"
                              },
                              "src": "10063:15:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 2028,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "10055:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 2032,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10055:24:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2033,
                        "nodeType": "ExpressionStatement",
                        "src": "10055:24:7"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2038,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2034,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1984,
                            "src": "10096:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2037,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2035,
                              "name": "len",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1965,
                              "src": "10101:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 2036,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10107:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "10101:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10096:12:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2041,
                        "nodeType": "IfStatement",
                        "src": "10093:55:7",
                        "trueBody": {
                          "id": 2040,
                          "nodeType": "Block",
                          "src": "10110:38:7",
                          "statements": [
                            {
                              "id": 2039,
                              "nodeType": "Break",
                              "src": "10128:5:7"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 2049,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2042,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1977,
                            "src": "10161:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2048,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2045,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2043,
                                    "name": "ret",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1977,
                                    "src": "10168:3:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<<",
                                  "rightExpression": {
                                    "hexValue": "35",
                                    "id": 2044,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10175:1:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_5_by_1",
                                      "typeString": "int_const 5"
                                    },
                                    "value": "5"
                                  },
                                  "src": "10168:8:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 2046,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "10167:10:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "|",
                            "rightExpression": {
                              "id": 2047,
                              "name": "decoded",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1981,
                              "src": "10180:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "src": "10167:20:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10161:26:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2050,
                        "nodeType": "ExpressionStatement",
                        "src": "10161:26:7"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1989,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1987,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1984,
                      "src": "9864:1:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 1988,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1965,
                      "src": "9868:3:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9864:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2052,
                  "initializationExpression": {
                    "assignments": [
                      1984
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1984,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 2052,
                        "src": "9852:6:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1983,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "9852:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 1986,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 1985,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9861:1:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "9852:10:7"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 1991,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "9873:3:7",
                      "subExpression": {
                        "id": 1990,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1984,
                        "src": "9873:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1992,
                    "nodeType": "ExpressionStatement",
                    "src": "9873:3:7"
                  },
                  "nodeType": "ForStatement",
                  "src": "9848:350:7"
                },
                {
                  "assignments": [
                    2054
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2054,
                      "mutability": "mutable",
                      "name": "bitlen",
                      "nodeType": "VariableDeclaration",
                      "scope": 2181,
                      "src": "10208:11:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2053,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10208:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2058,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2057,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2055,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1965,
                      "src": "10222:3:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "hexValue": "35",
                      "id": 2056,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10228:1:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_5_by_1",
                        "typeString": "int_const 5"
                      },
                      "value": "5"
                    },
                    "src": "10222:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10208:21:7"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2061,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 2059,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1965,
                        "src": "10242:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "%",
                      "rightExpression": {
                        "hexValue": "38",
                        "id": 2060,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10248:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_8_by_1",
                          "typeString": "int_const 8"
                        },
                        "value": "8"
                      },
                      "src": "10242:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 2062,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10253:1:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10242:12:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2078,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2076,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 2074,
                          "name": "len",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1965,
                          "src": "10368:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "%",
                        "rightExpression": {
                          "hexValue": "38",
                          "id": 2075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10374:1:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_8_by_1",
                            "typeString": "int_const 8"
                          },
                          "value": "8"
                        },
                        "src": "10368:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "32",
                        "id": 2077,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10379:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "src": "10368:12:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2100,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2098,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2096,
                            "name": "len",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1965,
                            "src": "10519:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "%",
                          "rightExpression": {
                            "hexValue": "38",
                            "id": 2097,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10525:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_8_by_1",
                              "typeString": "int_const 8"
                            },
                            "value": "8"
                          },
                          "src": "10519:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "34",
                          "id": 2099,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10530:1:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_4_by_1",
                            "typeString": "int_const 4"
                          },
                          "value": "4"
                        },
                        "src": "10519:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2122,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2120,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2118,
                              "name": "len",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1965,
                              "src": "10672:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "%",
                            "rightExpression": {
                              "hexValue": "38",
                              "id": 2119,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10678:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_8_by_1",
                                "typeString": "int_const 8"
                              },
                              "value": "8"
                            },
                            "src": "10672:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "35",
                            "id": 2121,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10683:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_5_by_1",
                              "typeString": "int_const 5"
                            },
                            "value": "5"
                          },
                          "src": "10672:12:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2144,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2142,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2140,
                                "name": "len",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1965,
                                "src": "10825:3:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "%",
                              "rightExpression": {
                                "hexValue": "38",
                                "id": 2141,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10831:1:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_8_by_1",
                                  "typeString": "int_const 8"
                                },
                                "value": "8"
                              },
                              "src": "10825:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "hexValue": "37",
                              "id": 2143,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10836:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_7_by_1",
                                "typeString": "int_const 7"
                              },
                              "value": "7"
                            },
                            "src": "10825:12:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "id": 2165,
                            "nodeType": "Block",
                            "src": "10976:33:7",
                            "statements": [
                              {
                                "expression": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 2162,
                                    "name": "revert",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      -19,
                                      -19
                                    ],
                                    "referencedDeclaration": -19,
                                    "src": "10990:6:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 2163,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10990:8:7",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 2164,
                                "nodeType": "ExpressionStatement",
                                "src": "10990:8:7"
                              }
                            ]
                          },
                          "id": 2166,
                          "nodeType": "IfStatement",
                          "src": "10822:187:7",
                          "trueBody": {
                            "id": 2161,
                            "nodeType": "Block",
                            "src": "10839:131:7",
                            "statements": [
                              {
                                "expression": {
                                  "id": 2155,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 2145,
                                    "name": "ret",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1977,
                                    "src": "10901:3:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2154,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 2148,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 2146,
                                            "name": "ret",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1977,
                                            "src": "10908:3:7",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "<<",
                                          "rightExpression": {
                                            "hexValue": "32",
                                            "id": 2147,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "10915:1:7",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_2_by_1",
                                              "typeString": "int_const 2"
                                            },
                                            "value": "2"
                                          },
                                          "src": "10908:8:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 2149,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "10907:10:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "|",
                                    "rightExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          },
                                          "id": 2152,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 2150,
                                            "name": "decoded",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1981,
                                            "src": "10921:7:7",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint8",
                                              "typeString": "uint8"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": ">>",
                                          "rightExpression": {
                                            "hexValue": "33",
                                            "id": 2151,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "10932:1:7",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_3_by_1",
                                              "typeString": "int_const 3"
                                            },
                                            "value": "3"
                                          },
                                          "src": "10921:12:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        }
                                      ],
                                      "id": 2153,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "10920:14:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "src": "10907:27:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10901:33:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2156,
                                "nodeType": "ExpressionStatement",
                                "src": "10901:33:7"
                              },
                              {
                                "expression": {
                                  "id": 2159,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 2157,
                                    "name": "bitlen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2054,
                                    "src": "10948:6:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "-=",
                                  "rightHandSide": {
                                    "hexValue": "33",
                                    "id": 2158,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10958:1:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_3_by_1",
                                      "typeString": "int_const 3"
                                    },
                                    "value": "3"
                                  },
                                  "src": "10948:11:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2160,
                                "nodeType": "ExpressionStatement",
                                "src": "10948:11:7"
                              }
                            ]
                          }
                        },
                        "id": 2167,
                        "nodeType": "IfStatement",
                        "src": "10669:340:7",
                        "trueBody": {
                          "id": 2139,
                          "nodeType": "Block",
                          "src": "10686:130:7",
                          "statements": [
                            {
                              "expression": {
                                "id": 2133,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2123,
                                  "name": "ret",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1977,
                                  "src": "10747:3:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2132,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2126,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2124,
                                          "name": "ret",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1977,
                                          "src": "10754:3:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<<",
                                        "rightExpression": {
                                          "hexValue": "34",
                                          "id": 2125,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "10761:1:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_4_by_1",
                                            "typeString": "int_const 4"
                                          },
                                          "value": "4"
                                        },
                                        "src": "10754:8:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 2127,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "10753:10:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "|",
                                  "rightExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        },
                                        "id": 2130,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2128,
                                          "name": "decoded",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1981,
                                          "src": "10767:7:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">>",
                                        "rightExpression": {
                                          "hexValue": "31",
                                          "id": 2129,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "10778:1:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "src": "10767:12:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      }
                                    ],
                                    "id": 2131,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "10766:14:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "src": "10753:27:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10747:33:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2134,
                              "nodeType": "ExpressionStatement",
                              "src": "10747:33:7"
                            },
                            {
                              "expression": {
                                "id": 2137,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2135,
                                  "name": "bitlen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2054,
                                  "src": "10794:6:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "hexValue": "31",
                                  "id": 2136,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10804:1:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "10794:11:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2138,
                              "nodeType": "ExpressionStatement",
                              "src": "10794:11:7"
                            }
                          ]
                        }
                      },
                      "id": 2168,
                      "nodeType": "IfStatement",
                      "src": "10516:493:7",
                      "trueBody": {
                        "id": 2117,
                        "nodeType": "Block",
                        "src": "10533:130:7",
                        "statements": [
                          {
                            "expression": {
                              "id": 2111,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2101,
                                "name": "ret",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1977,
                                "src": "10594:3:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2110,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2104,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2102,
                                        "name": "ret",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1977,
                                        "src": "10601:3:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<<",
                                      "rightExpression": {
                                        "hexValue": "31",
                                        "id": 2103,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10608:1:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "10601:8:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 2105,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "10600:10:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "|",
                                "rightExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      },
                                      "id": 2108,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2106,
                                        "name": "decoded",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1981,
                                        "src": "10614:7:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">>",
                                      "rightExpression": {
                                        "hexValue": "34",
                                        "id": 2107,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10625:1:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_4_by_1",
                                          "typeString": "int_const 4"
                                        },
                                        "value": "4"
                                      },
                                      "src": "10614:12:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    }
                                  ],
                                  "id": 2109,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "10613:14:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "src": "10600:27:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10594:33:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2112,
                            "nodeType": "ExpressionStatement",
                            "src": "10594:33:7"
                          },
                          {
                            "expression": {
                              "id": 2115,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2113,
                                "name": "bitlen",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2054,
                                "src": "10641:6:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "-=",
                              "rightHandSide": {
                                "hexValue": "34",
                                "id": 2114,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10651:1:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "10641:11:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2116,
                            "nodeType": "ExpressionStatement",
                            "src": "10641:11:7"
                          }
                        ]
                      }
                    },
                    "id": 2169,
                    "nodeType": "IfStatement",
                    "src": "10365:644:7",
                    "trueBody": {
                      "id": 2095,
                      "nodeType": "Block",
                      "src": "10382:128:7",
                      "statements": [
                        {
                          "expression": {
                            "id": 2089,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 2079,
                              "name": "ret",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1977,
                              "src": "10441:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2088,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2082,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2080,
                                      "name": "ret",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1977,
                                      "src": "10448:3:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "33",
                                      "id": 2081,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10455:1:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_3_by_1",
                                        "typeString": "int_const 3"
                                      },
                                      "value": "3"
                                    },
                                    "src": "10448:8:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 2083,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "10447:10:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "|",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    "id": 2086,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2084,
                                      "name": "decoded",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1981,
                                      "src": "10461:7:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">>",
                                    "rightExpression": {
                                      "hexValue": "32",
                                      "id": 2085,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10472:1:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "src": "10461:12:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "id": 2087,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "10460:14:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "10447:27:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10441:33:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2090,
                          "nodeType": "ExpressionStatement",
                          "src": "10441:33:7"
                        },
                        {
                          "expression": {
                            "id": 2093,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 2091,
                              "name": "bitlen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2054,
                              "src": "10488:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "-=",
                            "rightHandSide": {
                              "hexValue": "32",
                              "id": 2092,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10498:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "10488:11:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2094,
                          "nodeType": "ExpressionStatement",
                          "src": "10488:11:7"
                        }
                      ]
                    }
                  },
                  "id": 2170,
                  "nodeType": "IfStatement",
                  "src": "10239:770:7",
                  "trueBody": {
                    "id": 2073,
                    "nodeType": "Block",
                    "src": "10256:103:7",
                    "statements": [
                      {
                        "expression": {
                          "id": 2071,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2064,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1977,
                            "src": "10322:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2070,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2067,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2065,
                                    "name": "ret",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1977,
                                    "src": "10329:3:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<<",
                                  "rightExpression": {
                                    "hexValue": "35",
                                    "id": 2066,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10336:1:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_5_by_1",
                                      "typeString": "int_const 5"
                                    },
                                    "value": "5"
                                  },
                                  "src": "10329:8:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 2068,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "10328:10:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "|",
                            "rightExpression": {
                              "id": 2069,
                              "name": "decoded",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1981,
                              "src": "10341:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "src": "10328:20:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10322:26:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2072,
                        "nodeType": "ExpressionStatement",
                        "src": "10322:26:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2178,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 2173,
                          "name": "ret",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1977,
                          "src": "11034:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<<",
                        "rightExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2176,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "323536",
                                "id": 2174,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11042:3:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_256_by_1",
                                  "typeString": "int_const 256"
                                },
                                "value": "256"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "id": 2175,
                                "name": "bitlen",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2054,
                                "src": "11048:6:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "11042:12:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 2177,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "11041:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11034:21:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2172,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "11026:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes32_$",
                        "typeString": "type(bytes32)"
                      },
                      "typeName": {
                        "id": 2171,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11026:7:7",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 2179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11026:30:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1969,
                  "id": 2180,
                  "nodeType": "Return",
                  "src": "11019:37:7"
                }
              ]
            },
            "documentation": {
              "id": 1959,
              "nodeType": "StructuredDocumentation",
              "src": "9389:271:7",
              "text": " @dev Decodes unpadded base32 data of up to one word in length.\n @param self The data to decode.\n @param off Offset into the string to start at.\n @param len Number of characters to decode.\n @return The decoded data, left aligned."
            },
            "id": 2182,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "base32HexDecodeWord",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1966,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1961,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2182,
                  "src": "9694:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1960,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9694:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1963,
                  "mutability": "mutable",
                  "name": "off",
                  "nodeType": "VariableDeclaration",
                  "scope": 2182,
                  "src": "9713:8:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1962,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9713:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1965,
                  "mutability": "mutable",
                  "name": "len",
                  "nodeType": "VariableDeclaration",
                  "scope": 2182,
                  "src": "9723:8:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1964,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9723:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9693:39:7"
            },
            "returnParameters": {
              "id": 1969,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1968,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2182,
                  "src": "9755:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1967,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9755:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9754:9:7"
            },
            "scope": 2183,
            "src": "9665:1398:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 2184,
        "src": "25:11040:7"
      }
    ],
    "src": "0:11066:7"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "@ensdomains/dnssec-oracle/contracts/BytesUtils.sol",
      "exportedSymbols": {
        "BytesUtils": [
          2183
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.7",
            ".4"
          ]
        },
        "id": 1454,
        "name": "PragmaDirective",
        "src": "0:23:7"
      },
      {
        "attributes": {
          "abstract": false,
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "library",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            2183
          ],
          "name": "BytesUtils",
          "scope": 2184
        },
        "children": [
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "keccak",
              "scope": 2183,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 1476,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1455,
                        "name": "ElementaryTypeName",
                        "src": "321:5:7"
                      }
                    ],
                    "id": 1456,
                    "name": "VariableDeclaration",
                    "src": "321:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "offset",
                      "scope": 1476,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1457,
                        "name": "ElementaryTypeName",
                        "src": "340:4:7"
                      }
                    ],
                    "id": 1458,
                    "name": "VariableDeclaration",
                    "src": "340:11:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "len",
                      "scope": 1476,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1459,
                        "name": "ElementaryTypeName",
                        "src": "353:4:7"
                      }
                    ],
                    "id": 1460,
                    "name": "VariableDeclaration",
                    "src": "353:8:7"
                  }
                ],
                "id": 1461,
                "name": "ParameterList",
                "src": "320:42:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "ret",
                      "scope": 1476,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 1462,
                        "name": "ElementaryTypeName",
                        "src": "386:7:7"
                      }
                    ],
                    "id": 1463,
                    "name": "VariableDeclaration",
                    "src": "386:11:7"
                  }
                ],
                "id": 1464,
                "name": "ParameterList",
                "src": "385:13:7"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1465,
                            "name": "Identifier",
                            "src": "409:7:7"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1458,
                                      "type": "uint256",
                                      "value": "offset"
                                    },
                                    "id": 1466,
                                    "name": "Identifier",
                                    "src": "417:6:7"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1460,
                                      "type": "uint256",
                                      "value": "len"
                                    },
                                    "id": 1467,
                                    "name": "Identifier",
                                    "src": "426:3:7"
                                  }
                                ],
                                "id": 1468,
                                "name": "BinaryOperation",
                                "src": "417:12:7"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1456,
                                      "type": "bytes memory",
                                      "value": "self"
                                    },
                                    "id": 1469,
                                    "name": "Identifier",
                                    "src": "433:4:7"
                                  }
                                ],
                                "id": 1470,
                                "name": "MemberAccess",
                                "src": "433:11:7"
                              }
                            ],
                            "id": 1471,
                            "name": "BinaryOperation",
                            "src": "417:27:7"
                          }
                        ],
                        "id": 1472,
                        "name": "FunctionCall",
                        "src": "409:36:7"
                      }
                    ],
                    "id": 1473,
                    "name": "ExpressionStatement",
                    "src": "409:36:7"
                  },
                  {
                    "attributes": {
                      "evmVersion": "istanbul",
                      "externalReferences": [
                        {
                          "declaration": 1460,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "523:3:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1458,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "514:6:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1463,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "478:3:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1456,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "503:4:7",
                          "valueSize": 1
                        }
                      ],
                      "operations": "{\n    ret := keccak256(add(add(self, 32), offset), len)\n}"
                    },
                    "children": [],
                    "id": 1474,
                    "name": "InlineAssembly",
                    "src": "455:82:7"
                  }
                ],
                "id": 1475,
                "name": "Block",
                "src": "399:144:7"
              }
            ],
            "id": 1476,
            "name": "FunctionDefinition",
            "src": "305:238:7"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "compare",
              "scope": 2183,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 1497,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1477,
                        "name": "ElementaryTypeName",
                        "src": "917:5:7"
                      }
                    ],
                    "id": 1478,
                    "name": "VariableDeclaration",
                    "src": "917:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "other",
                      "scope": 1497,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1479,
                        "name": "ElementaryTypeName",
                        "src": "936:5:7"
                      }
                    ],
                    "id": 1480,
                    "name": "VariableDeclaration",
                    "src": "936:18:7"
                  }
                ],
                "id": 1481,
                "name": "ParameterList",
                "src": "916:39:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 1497,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int",
                          "type": "int256"
                        },
                        "id": 1482,
                        "name": "ElementaryTypeName",
                        "src": "979:3:7"
                      }
                    ],
                    "id": 1483,
                    "name": "VariableDeclaration",
                    "src": "979:3:7"
                  }
                ],
                "id": 1484,
                "name": "ParameterList",
                "src": "978:5:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1484
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "int256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                1497,
                                1633
                              ],
                              "referencedDeclaration": 1633,
                              "type": "function (bytes memory,uint256,uint256,bytes memory,uint256,uint256) pure returns (int256)",
                              "value": "compare"
                            },
                            "id": 1485,
                            "name": "Identifier",
                            "src": "1001:7:7"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1478,
                              "type": "bytes memory",
                              "value": "self"
                            },
                            "id": 1486,
                            "name": "Identifier",
                            "src": "1009:4:7"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 1487,
                            "name": "Literal",
                            "src": "1015:1:7"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1478,
                                  "type": "bytes memory",
                                  "value": "self"
                                },
                                "id": 1488,
                                "name": "Identifier",
                                "src": "1018:4:7"
                              }
                            ],
                            "id": 1489,
                            "name": "MemberAccess",
                            "src": "1018:11:7"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1480,
                              "type": "bytes memory",
                              "value": "other"
                            },
                            "id": 1490,
                            "name": "Identifier",
                            "src": "1031:5:7"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 1491,
                            "name": "Literal",
                            "src": "1038:1:7"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1480,
                                  "type": "bytes memory",
                                  "value": "other"
                                },
                                "id": 1492,
                                "name": "Identifier",
                                "src": "1041:5:7"
                              }
                            ],
                            "id": 1493,
                            "name": "MemberAccess",
                            "src": "1041:12:7"
                          }
                        ],
                        "id": 1494,
                        "name": "FunctionCall",
                        "src": "1001:53:7"
                      }
                    ],
                    "id": 1495,
                    "name": "Return",
                    "src": "994:60:7"
                  }
                ],
                "id": 1496,
                "name": "Block",
                "src": "984:77:7"
              }
            ],
            "id": 1497,
            "name": "FunctionDefinition",
            "src": "900:161:7"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "compare",
              "scope": 2183,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 1633,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1498,
                        "name": "ElementaryTypeName",
                        "src": "1691:5:7"
                      }
                    ],
                    "id": 1499,
                    "name": "VariableDeclaration",
                    "src": "1691:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "offset",
                      "scope": 1633,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1500,
                        "name": "ElementaryTypeName",
                        "src": "1710:4:7"
                      }
                    ],
                    "id": 1501,
                    "name": "VariableDeclaration",
                    "src": "1710:11:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "len",
                      "scope": 1633,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1502,
                        "name": "ElementaryTypeName",
                        "src": "1723:4:7"
                      }
                    ],
                    "id": 1503,
                    "name": "VariableDeclaration",
                    "src": "1723:8:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "other",
                      "scope": 1633,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1504,
                        "name": "ElementaryTypeName",
                        "src": "1733:5:7"
                      }
                    ],
                    "id": 1505,
                    "name": "VariableDeclaration",
                    "src": "1733:18:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "otheroffset",
                      "scope": 1633,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1506,
                        "name": "ElementaryTypeName",
                        "src": "1753:4:7"
                      }
                    ],
                    "id": 1507,
                    "name": "VariableDeclaration",
                    "src": "1753:16:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "otherlen",
                      "scope": 1633,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1508,
                        "name": "ElementaryTypeName",
                        "src": "1771:4:7"
                      }
                    ],
                    "id": 1509,
                    "name": "VariableDeclaration",
                    "src": "1771:13:7"
                  }
                ],
                "id": 1510,
                "name": "ParameterList",
                "src": "1690:95:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 1633,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int",
                          "type": "int256"
                        },
                        "id": 1511,
                        "name": "ElementaryTypeName",
                        "src": "1809:3:7"
                      }
                    ],
                    "id": 1512,
                    "name": "VariableDeclaration",
                    "src": "1809:3:7"
                  }
                ],
                "id": 1513,
                "name": "ParameterList",
                "src": "1808:5:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        1515
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "shortest",
                          "scope": 1632,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 1514,
                            "name": "ElementaryTypeName",
                            "src": "1824:4:7"
                          }
                        ],
                        "id": 1515,
                        "name": "VariableDeclaration",
                        "src": "1824:13:7"
                      },
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 1503,
                          "type": "uint256",
                          "value": "len"
                        },
                        "id": 1516,
                        "name": "Identifier",
                        "src": "1840:3:7"
                      }
                    ],
                    "id": 1517,
                    "name": "VariableDeclarationStatement",
                    "src": "1824:19:7"
                  },
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1509,
                              "type": "uint256",
                              "value": "otherlen"
                            },
                            "id": 1518,
                            "name": "Identifier",
                            "src": "1857:8:7"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1503,
                              "type": "uint256",
                              "value": "len"
                            },
                            "id": 1519,
                            "name": "Identifier",
                            "src": "1868:3:7"
                          }
                        ],
                        "id": 1520,
                        "name": "BinaryOperation",
                        "src": "1857:14:7"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "=",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1515,
                                  "type": "uint256",
                                  "value": "shortest"
                                },
                                "id": 1521,
                                "name": "Identifier",
                                "src": "1881:8:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1509,
                                  "type": "uint256",
                                  "value": "otherlen"
                                },
                                "id": 1522,
                                "name": "Identifier",
                                "src": "1892:8:7"
                              }
                            ],
                            "id": 1523,
                            "name": "Assignment",
                            "src": "1881:19:7"
                          }
                        ],
                        "id": 1524,
                        "name": "ExpressionStatement",
                        "src": "1881:19:7"
                      }
                    ],
                    "id": 1525,
                    "name": "IfStatement",
                    "src": "1853:47:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1527
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "selfptr",
                          "scope": 1632,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 1526,
                            "name": "ElementaryTypeName",
                            "src": "1911:4:7"
                          }
                        ],
                        "id": 1527,
                        "name": "VariableDeclaration",
                        "src": "1911:12:7"
                      }
                    ],
                    "id": 1528,
                    "name": "VariableDeclarationStatement",
                    "src": "1911:12:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1530
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "otherptr",
                          "scope": 1632,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 1529,
                            "name": "ElementaryTypeName",
                            "src": "1933:4:7"
                          }
                        ],
                        "id": 1530,
                        "name": "VariableDeclaration",
                        "src": "1933:13:7"
                      }
                    ],
                    "id": 1531,
                    "name": "VariableDeclarationStatement",
                    "src": "1933:13:7"
                  },
                  {
                    "attributes": {
                      "evmVersion": "istanbul",
                      "externalReferences": [
                        {
                          "declaration": 1501,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2005:6:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1505,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2046:5:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1507,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2057:11:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1530,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2030:8:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1499,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "1995:4:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1527,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "1980:7:7",
                          "valueSize": 1
                        }
                      ],
                      "operations": "{\n    selfptr := add(self, add(offset, 32))\n    otherptr := add(other, add(otheroffset, 32))\n}"
                    },
                    "children": [],
                    "id": 1532,
                    "name": "InlineAssembly",
                    "src": "1957:127:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "assignments": [
                            1534
                          ]
                        },
                        "children": [
                          {
                            "attributes": {
                              "constant": false,
                              "mutability": "mutable",
                              "name": "idx",
                              "scope": 1621,
                              "stateVariable": false,
                              "storageLocation": "default",
                              "type": "uint256",
                              "visibility": "internal"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint",
                                  "type": "uint256"
                                },
                                "id": 1533,
                                "name": "ElementaryTypeName",
                                "src": "2098:4:7"
                              }
                            ],
                            "id": 1534,
                            "name": "VariableDeclaration",
                            "src": "2098:8:7"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 1535,
                            "name": "Literal",
                            "src": "2109:1:7"
                          }
                        ],
                        "id": 1536,
                        "name": "VariableDeclarationStatement",
                        "src": "2098:12:7"
                      },
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1534,
                              "type": "uint256",
                              "value": "idx"
                            },
                            "id": 1537,
                            "name": "Identifier",
                            "src": "2112:3:7"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1515,
                              "type": "uint256",
                              "value": "shortest"
                            },
                            "id": 1538,
                            "name": "Identifier",
                            "src": "2118:8:7"
                          }
                        ],
                        "id": 1539,
                        "name": "BinaryOperation",
                        "src": "2112:14:7"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "+=",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1534,
                                  "type": "uint256",
                                  "value": "idx"
                                },
                                "id": 1540,
                                "name": "Identifier",
                                "src": "2128:3:7"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "3332",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 32",
                                  "value": "32"
                                },
                                "id": 1541,
                                "name": "Literal",
                                "src": "2135:2:7"
                              }
                            ],
                            "id": 1542,
                            "name": "Assignment",
                            "src": "2128:9:7"
                          }
                        ],
                        "id": 1543,
                        "name": "ExpressionStatement",
                        "src": "2128:9:7"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                1545
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "a",
                                  "scope": 1620,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint",
                                      "type": "uint256"
                                    },
                                    "id": 1544,
                                    "name": "ElementaryTypeName",
                                    "src": "2153:4:7"
                                  }
                                ],
                                "id": 1545,
                                "name": "VariableDeclaration",
                                "src": "2153:6:7"
                              }
                            ],
                            "id": 1546,
                            "name": "VariableDeclarationStatement",
                            "src": "2153:6:7"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                1548
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "b",
                                  "scope": 1620,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint",
                                      "type": "uint256"
                                    },
                                    "id": 1547,
                                    "name": "ElementaryTypeName",
                                    "src": "2173:4:7"
                                  }
                                ],
                                "id": 1548,
                                "name": "VariableDeclaration",
                                "src": "2173:6:7"
                              }
                            ],
                            "id": 1549,
                            "name": "VariableDeclarationStatement",
                            "src": "2173:6:7"
                          },
                          {
                            "attributes": {
                              "evmVersion": "istanbul",
                              "externalReferences": [
                                {
                                  "declaration": 1545,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "2220:1:7",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 1548,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "2256:1:7",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 1530,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "2267:8:7",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 1527,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "2231:7:7",
                                  "valueSize": 1
                                }
                              ],
                              "operations": "{\n    a := mload(selfptr)\n    b := mload(otherptr)\n}"
                            },
                            "children": [],
                            "id": 1550,
                            "name": "InlineAssembly",
                            "src": "2193:97:7"
                          },
                          {
                            "attributes": {},
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "!=",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1545,
                                      "type": "uint256",
                                      "value": "a"
                                    },
                                    "id": 1551,
                                    "name": "Identifier",
                                    "src": "2307:1:7"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1548,
                                      "type": "uint256",
                                      "value": "b"
                                    },
                                    "id": 1552,
                                    "name": "Identifier",
                                    "src": "2312:1:7"
                                  }
                                ],
                                "id": 1553,
                                "name": "BinaryOperation",
                                "src": "2307:6:7"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "assignments": [
                                        1555
                                      ]
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "constant": false,
                                          "mutability": "mutable",
                                          "name": "mask",
                                          "scope": 1610,
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "type": "uint256",
                                          "visibility": "internal"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "uint",
                                              "type": "uint256"
                                            },
                                            "id": 1554,
                                            "name": "ElementaryTypeName",
                                            "src": "2394:4:7"
                                          }
                                        ],
                                        "id": 1555,
                                        "name": "VariableDeclaration",
                                        "src": "2394:9:7"
                                      }
                                    ],
                                    "id": 1556,
                                    "name": "VariableDeclarationStatement",
                                    "src": "2394:9:7"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": ">",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1515,
                                              "type": "uint256",
                                              "value": "shortest"
                                            },
                                            "id": 1557,
                                            "name": "Identifier",
                                            "src": "2425:8:7"
                                          },
                                          {
                                            "attributes": {
                                              "hexvalue": "3332",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "token": "number",
                                              "type": "int_const 32",
                                              "value": "32"
                                            },
                                            "id": 1558,
                                            "name": "Literal",
                                            "src": "2436:2:7"
                                          }
                                        ],
                                        "id": 1559,
                                        "name": "BinaryOperation",
                                        "src": "2425:13:7"
                                      },
                                      {
                                        "children": [
                                          {
                                            "children": [
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "=",
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 1555,
                                                      "type": "uint256",
                                                      "value": "mask"
                                                    },
                                                    "id": 1560,
                                                    "name": "Identifier",
                                                    "src": "2462:4:7"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "isStructConstructorCall": false,
                                                      "lValueRequested": false,
                                                      "names": [
                                                        null
                                                      ],
                                                      "tryCall": false,
                                                      "type": "uint256",
                                                      "type_conversion": true
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": [
                                                            {
                                                              "typeIdentifier": "t_rational_minus_1_by_1",
                                                              "typeString": "int_const -1"
                                                            }
                                                          ],
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "type": "type(uint256)"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "name": "uint256"
                                                            },
                                                            "id": 1561,
                                                            "name": "ElementaryTypeName",
                                                            "src": "2469:7:7"
                                                          }
                                                        ],
                                                        "id": 1562,
                                                        "name": "ElementaryTypeNameExpression",
                                                        "src": "2469:7:7"
                                                      },
                                                      {
                                                        "attributes": {
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "operator": "-",
                                                          "prefix": true,
                                                          "type": "int_const -1"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "hexvalue": "31",
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": true,
                                                              "lValueRequested": false,
                                                              "token": "number",
                                                              "type": "int_const 1",
                                                              "value": "1"
                                                            },
                                                            "id": 1563,
                                                            "name": "Literal",
                                                            "src": "2479:1:7"
                                                          }
                                                        ],
                                                        "id": 1564,
                                                        "name": "UnaryOperation",
                                                        "src": "2477:3:7"
                                                      }
                                                    ],
                                                    "id": 1565,
                                                    "name": "FunctionCall",
                                                    "src": "2469:12:7"
                                                  }
                                                ],
                                                "id": 1566,
                                                "name": "Assignment",
                                                "src": "2462:19:7"
                                              }
                                            ],
                                            "id": 1567,
                                            "name": "ExpressionStatement",
                                            "src": "2462:19:7"
                                          }
                                        ],
                                        "id": 1568,
                                        "name": "Block",
                                        "src": "2440:80:7"
                                      },
                                      {
                                        "children": [
                                          {
                                            "children": [
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "=",
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 1555,
                                                      "type": "uint256",
                                                      "value": "mask"
                                                    },
                                                    "id": 1569,
                                                    "name": "Identifier",
                                                    "src": "2548:4:7"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "operator": "~",
                                                      "prefix": true,
                                                      "type": "uint256"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "isConstant": false,
                                                          "isInlineArray": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "type": "uint256"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              },
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "operator": "-",
                                                              "type": "uint256"
                                                            },
                                                            "children": [
                                                              {
                                                                "attributes": {
                                                                  "commonType": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                  },
                                                                  "isConstant": false,
                                                                  "isLValue": false,
                                                                  "isPure": false,
                                                                  "lValueRequested": false,
                                                                  "operator": "**",
                                                                  "type": "uint256"
                                                                },
                                                                "children": [
                                                                  {
                                                                    "attributes": {
                                                                      "hexvalue": "32",
                                                                      "isConstant": false,
                                                                      "isLValue": false,
                                                                      "isPure": true,
                                                                      "lValueRequested": false,
                                                                      "token": "number",
                                                                      "type": "int_const 2",
                                                                      "value": "2"
                                                                    },
                                                                    "id": 1570,
                                                                    "name": "Literal",
                                                                    "src": "2557:1:7"
                                                                  },
                                                                  {
                                                                    "attributes": {
                                                                      "isConstant": false,
                                                                      "isInlineArray": false,
                                                                      "isLValue": false,
                                                                      "isPure": false,
                                                                      "lValueRequested": false,
                                                                      "type": "uint256"
                                                                    },
                                                                    "children": [
                                                                      {
                                                                        "attributes": {
                                                                          "commonType": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                          },
                                                                          "isConstant": false,
                                                                          "isLValue": false,
                                                                          "isPure": false,
                                                                          "lValueRequested": false,
                                                                          "operator": "*",
                                                                          "type": "uint256"
                                                                        },
                                                                        "children": [
                                                                          {
                                                                            "attributes": {
                                                                              "hexvalue": "38",
                                                                              "isConstant": false,
                                                                              "isLValue": false,
                                                                              "isPure": true,
                                                                              "lValueRequested": false,
                                                                              "token": "number",
                                                                              "type": "int_const 8",
                                                                              "value": "8"
                                                                            },
                                                                            "id": 1571,
                                                                            "name": "Literal",
                                                                            "src": "2563:1:7"
                                                                          },
                                                                          {
                                                                            "attributes": {
                                                                              "isConstant": false,
                                                                              "isInlineArray": false,
                                                                              "isLValue": false,
                                                                              "isPure": false,
                                                                              "lValueRequested": false,
                                                                              "type": "uint256"
                                                                            },
                                                                            "children": [
                                                                              {
                                                                                "attributes": {
                                                                                  "commonType": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                  },
                                                                                  "isConstant": false,
                                                                                  "isLValue": false,
                                                                                  "isPure": false,
                                                                                  "lValueRequested": false,
                                                                                  "operator": "+",
                                                                                  "type": "uint256"
                                                                                },
                                                                                "children": [
                                                                                  {
                                                                                    "attributes": {
                                                                                      "commonType": {
                                                                                        "typeIdentifier": "t_uint256",
                                                                                        "typeString": "uint256"
                                                                                      },
                                                                                      "isConstant": false,
                                                                                      "isLValue": false,
                                                                                      "isPure": false,
                                                                                      "lValueRequested": false,
                                                                                      "operator": "-",
                                                                                      "type": "uint256"
                                                                                    },
                                                                                    "children": [
                                                                                      {
                                                                                        "attributes": {
                                                                                          "hexvalue": "3332",
                                                                                          "isConstant": false,
                                                                                          "isLValue": false,
                                                                                          "isPure": true,
                                                                                          "lValueRequested": false,
                                                                                          "token": "number",
                                                                                          "type": "int_const 32",
                                                                                          "value": "32"
                                                                                        },
                                                                                        "id": 1572,
                                                                                        "name": "Literal",
                                                                                        "src": "2568:2:7"
                                                                                      },
                                                                                      {
                                                                                        "attributes": {
                                                                                          "overloadedDeclarations": [
                                                                                            null
                                                                                          ],
                                                                                          "referencedDeclaration": 1515,
                                                                                          "type": "uint256",
                                                                                          "value": "shortest"
                                                                                        },
                                                                                        "id": 1573,
                                                                                        "name": "Identifier",
                                                                                        "src": "2573:8:7"
                                                                                      }
                                                                                    ],
                                                                                    "id": 1574,
                                                                                    "name": "BinaryOperation",
                                                                                    "src": "2568:13:7"
                                                                                  },
                                                                                  {
                                                                                    "attributes": {
                                                                                      "overloadedDeclarations": [
                                                                                        null
                                                                                      ],
                                                                                      "referencedDeclaration": 1534,
                                                                                      "type": "uint256",
                                                                                      "value": "idx"
                                                                                    },
                                                                                    "id": 1575,
                                                                                    "name": "Identifier",
                                                                                    "src": "2584:3:7"
                                                                                  }
                                                                                ],
                                                                                "id": 1576,
                                                                                "name": "BinaryOperation",
                                                                                "src": "2568:19:7"
                                                                              }
                                                                            ],
                                                                            "id": 1577,
                                                                            "name": "TupleExpression",
                                                                            "src": "2567:21:7"
                                                                          }
                                                                        ],
                                                                        "id": 1578,
                                                                        "name": "BinaryOperation",
                                                                        "src": "2563:25:7"
                                                                      }
                                                                    ],
                                                                    "id": 1579,
                                                                    "name": "TupleExpression",
                                                                    "src": "2562:27:7"
                                                                  }
                                                                ],
                                                                "id": 1580,
                                                                "name": "BinaryOperation",
                                                                "src": "2557:32:7"
                                                              },
                                                              {
                                                                "attributes": {
                                                                  "hexvalue": "31",
                                                                  "isConstant": false,
                                                                  "isLValue": false,
                                                                  "isPure": true,
                                                                  "lValueRequested": false,
                                                                  "token": "number",
                                                                  "type": "int_const 1",
                                                                  "value": "1"
                                                                },
                                                                "id": 1581,
                                                                "name": "Literal",
                                                                "src": "2592:1:7"
                                                              }
                                                            ],
                                                            "id": 1582,
                                                            "name": "BinaryOperation",
                                                            "src": "2557:36:7"
                                                          }
                                                        ],
                                                        "id": 1583,
                                                        "name": "TupleExpression",
                                                        "src": "2556:38:7"
                                                      }
                                                    ],
                                                    "id": 1584,
                                                    "name": "UnaryOperation",
                                                    "src": "2555:39:7"
                                                  }
                                                ],
                                                "id": 1585,
                                                "name": "Assignment",
                                                "src": "2548:46:7"
                                              }
                                            ],
                                            "id": 1586,
                                            "name": "ExpressionStatement",
                                            "src": "2548:46:7"
                                          }
                                        ],
                                        "id": 1587,
                                        "name": "Block",
                                        "src": "2526:87:7"
                                      }
                                    ],
                                    "id": 1588,
                                    "name": "IfStatement",
                                    "src": "2421:192:7"
                                  },
                                  {
                                    "attributes": {
                                      "assignments": [
                                        1590
                                      ]
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "constant": false,
                                          "mutability": "mutable",
                                          "name": "diff",
                                          "scope": 1610,
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "type": "uint256",
                                          "visibility": "internal"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "uint",
                                              "type": "uint256"
                                            },
                                            "id": 1589,
                                            "name": "ElementaryTypeName",
                                            "src": "2630:4:7"
                                          }
                                        ],
                                        "id": 1590,
                                        "name": "VariableDeclaration",
                                        "src": "2630:9:7"
                                      },
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "-",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "&",
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 1545,
                                                      "type": "uint256",
                                                      "value": "a"
                                                    },
                                                    "id": 1591,
                                                    "name": "Identifier",
                                                    "src": "2643:1:7"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 1555,
                                                      "type": "uint256",
                                                      "value": "mask"
                                                    },
                                                    "id": 1592,
                                                    "name": "Identifier",
                                                    "src": "2647:4:7"
                                                  }
                                                ],
                                                "id": 1593,
                                                "name": "BinaryOperation",
                                                "src": "2643:8:7"
                                              }
                                            ],
                                            "id": 1594,
                                            "name": "TupleExpression",
                                            "src": "2642:10:7"
                                          },
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "&",
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 1548,
                                                      "type": "uint256",
                                                      "value": "b"
                                                    },
                                                    "id": 1595,
                                                    "name": "Identifier",
                                                    "src": "2656:1:7"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 1555,
                                                      "type": "uint256",
                                                      "value": "mask"
                                                    },
                                                    "id": 1596,
                                                    "name": "Identifier",
                                                    "src": "2660:4:7"
                                                  }
                                                ],
                                                "id": 1597,
                                                "name": "BinaryOperation",
                                                "src": "2656:8:7"
                                              }
                                            ],
                                            "id": 1598,
                                            "name": "TupleExpression",
                                            "src": "2655:10:7"
                                          }
                                        ],
                                        "id": 1599,
                                        "name": "BinaryOperation",
                                        "src": "2642:23:7"
                                      }
                                    ],
                                    "id": 1600,
                                    "name": "VariableDeclarationStatement",
                                    "src": "2630:35:7"
                                  },
                                  {
                                    "attributes": {},
                                    "children": [
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "!=",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1590,
                                              "type": "uint256",
                                              "value": "diff"
                                            },
                                            "id": 1601,
                                            "name": "Identifier",
                                            "src": "2687:4:7"
                                          },
                                          {
                                            "attributes": {
                                              "hexvalue": "30",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "token": "number",
                                              "type": "int_const 0",
                                              "value": "0"
                                            },
                                            "id": 1602,
                                            "name": "Literal",
                                            "src": "2695:1:7"
                                          }
                                        ],
                                        "id": 1603,
                                        "name": "BinaryOperation",
                                        "src": "2687:9:7"
                                      },
                                      {
                                        "attributes": {
                                          "functionReturnParameters": 1513
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "int256",
                                              "type_conversion": true
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "type": "type(int256)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "name": "int"
                                                    },
                                                    "id": 1604,
                                                    "name": "ElementaryTypeName",
                                                    "src": "2721:3:7"
                                                  }
                                                ],
                                                "id": 1605,
                                                "name": "ElementaryTypeNameExpression",
                                                "src": "2721:3:7"
                                              },
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 1590,
                                                  "type": "uint256",
                                                  "value": "diff"
                                                },
                                                "id": 1606,
                                                "name": "Identifier",
                                                "src": "2725:4:7"
                                              }
                                            ],
                                            "id": 1607,
                                            "name": "FunctionCall",
                                            "src": "2721:9:7"
                                          }
                                        ],
                                        "id": 1608,
                                        "name": "Return",
                                        "src": "2714:16:7"
                                      }
                                    ],
                                    "id": 1609,
                                    "name": "IfStatement",
                                    "src": "2683:47:7"
                                  }
                                ],
                                "id": 1610,
                                "name": "Block",
                                "src": "2315:430:7"
                              }
                            ],
                            "id": 1611,
                            "name": "IfStatement",
                            "src": "2303:442:7"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1527,
                                      "type": "uint256",
                                      "value": "selfptr"
                                    },
                                    "id": 1612,
                                    "name": "Identifier",
                                    "src": "2758:7:7"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "3332",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 32",
                                      "value": "32"
                                    },
                                    "id": 1613,
                                    "name": "Literal",
                                    "src": "2769:2:7"
                                  }
                                ],
                                "id": 1614,
                                "name": "Assignment",
                                "src": "2758:13:7"
                              }
                            ],
                            "id": 1615,
                            "name": "ExpressionStatement",
                            "src": "2758:13:7"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1530,
                                      "type": "uint256",
                                      "value": "otherptr"
                                    },
                                    "id": 1616,
                                    "name": "Identifier",
                                    "src": "2785:8:7"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "3332",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 32",
                                      "value": "32"
                                    },
                                    "id": 1617,
                                    "name": "Literal",
                                    "src": "2797:2:7"
                                  }
                                ],
                                "id": 1618,
                                "name": "Assignment",
                                "src": "2785:14:7"
                              }
                            ],
                            "id": 1619,
                            "name": "ExpressionStatement",
                            "src": "2785:14:7"
                          }
                        ],
                        "id": 1620,
                        "name": "Block",
                        "src": "2139:671:7"
                      }
                    ],
                    "id": 1621,
                    "name": "ForStatement",
                    "src": "2093:717:7"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 1513
                    },
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "-",
                          "type": "int256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "int256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(int256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "int"
                                    },
                                    "id": 1622,
                                    "name": "ElementaryTypeName",
                                    "src": "2827:3:7"
                                  }
                                ],
                                "id": 1623,
                                "name": "ElementaryTypeNameExpression",
                                "src": "2827:3:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1503,
                                  "type": "uint256",
                                  "value": "len"
                                },
                                "id": 1624,
                                "name": "Identifier",
                                "src": "2831:3:7"
                              }
                            ],
                            "id": 1625,
                            "name": "FunctionCall",
                            "src": "2827:8:7"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "int256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(int256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "int"
                                    },
                                    "id": 1626,
                                    "name": "ElementaryTypeName",
                                    "src": "2838:3:7"
                                  }
                                ],
                                "id": 1627,
                                "name": "ElementaryTypeNameExpression",
                                "src": "2838:3:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1509,
                                  "type": "uint256",
                                  "value": "otherlen"
                                },
                                "id": 1628,
                                "name": "Identifier",
                                "src": "2842:8:7"
                              }
                            ],
                            "id": 1629,
                            "name": "FunctionCall",
                            "src": "2838:13:7"
                          }
                        ],
                        "id": 1630,
                        "name": "BinaryOperation",
                        "src": "2827:24:7"
                      }
                    ],
                    "id": 1631,
                    "name": "Return",
                    "src": "2820:31:7"
                  }
                ],
                "id": 1632,
                "name": "Block",
                "src": "1814:1044:7"
              }
            ],
            "id": 1633,
            "name": "FunctionDefinition",
            "src": "1674:1184:7"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "equals",
              "scope": 2183,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 1661,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1634,
                        "name": "ElementaryTypeName",
                        "src": "3292:5:7"
                      }
                    ],
                    "id": 1635,
                    "name": "VariableDeclaration",
                    "src": "3292:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "offset",
                      "scope": 1661,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1636,
                        "name": "ElementaryTypeName",
                        "src": "3311:4:7"
                      }
                    ],
                    "id": 1637,
                    "name": "VariableDeclaration",
                    "src": "3311:11:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "other",
                      "scope": 1661,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1638,
                        "name": "ElementaryTypeName",
                        "src": "3324:5:7"
                      }
                    ],
                    "id": 1639,
                    "name": "VariableDeclaration",
                    "src": "3324:18:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "otherOffset",
                      "scope": 1661,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1640,
                        "name": "ElementaryTypeName",
                        "src": "3344:4:7"
                      }
                    ],
                    "id": 1641,
                    "name": "VariableDeclaration",
                    "src": "3344:16:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "len",
                      "scope": 1661,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1642,
                        "name": "ElementaryTypeName",
                        "src": "3362:4:7"
                      }
                    ],
                    "id": 1643,
                    "name": "VariableDeclaration",
                    "src": "3362:8:7"
                  }
                ],
                "id": 1644,
                "name": "ParameterList",
                "src": "3291:80:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 1661,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1645,
                        "name": "ElementaryTypeName",
                        "src": "3395:4:7"
                      }
                    ],
                    "id": 1646,
                    "name": "VariableDeclaration",
                    "src": "3395:4:7"
                  }
                ],
                "id": 1647,
                "name": "ParameterList",
                "src": "3394:6:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1647
                    },
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1476,
                                  "type": "function (bytes memory,uint256,uint256) pure returns (bytes32)",
                                  "value": "keccak"
                                },
                                "id": 1648,
                                "name": "Identifier",
                                "src": "3418:6:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1635,
                                  "type": "bytes memory",
                                  "value": "self"
                                },
                                "id": 1649,
                                "name": "Identifier",
                                "src": "3425:4:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1637,
                                  "type": "uint256",
                                  "value": "offset"
                                },
                                "id": 1650,
                                "name": "Identifier",
                                "src": "3431:6:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1643,
                                  "type": "uint256",
                                  "value": "len"
                                },
                                "id": 1651,
                                "name": "Identifier",
                                "src": "3439:3:7"
                              }
                            ],
                            "id": 1652,
                            "name": "FunctionCall",
                            "src": "3418:25:7"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1476,
                                  "type": "function (bytes memory,uint256,uint256) pure returns (bytes32)",
                                  "value": "keccak"
                                },
                                "id": 1653,
                                "name": "Identifier",
                                "src": "3447:6:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1639,
                                  "type": "bytes memory",
                                  "value": "other"
                                },
                                "id": 1654,
                                "name": "Identifier",
                                "src": "3454:5:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1641,
                                  "type": "uint256",
                                  "value": "otherOffset"
                                },
                                "id": 1655,
                                "name": "Identifier",
                                "src": "3461:11:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1643,
                                  "type": "uint256",
                                  "value": "len"
                                },
                                "id": 1656,
                                "name": "Identifier",
                                "src": "3474:3:7"
                              }
                            ],
                            "id": 1657,
                            "name": "FunctionCall",
                            "src": "3447:31:7"
                          }
                        ],
                        "id": 1658,
                        "name": "BinaryOperation",
                        "src": "3418:60:7"
                      }
                    ],
                    "id": 1659,
                    "name": "Return",
                    "src": "3411:67:7"
                  }
                ],
                "id": 1660,
                "name": "Block",
                "src": "3401:84:7"
              }
            ],
            "id": 1661,
            "name": "FunctionDefinition",
            "src": "3276:209:7"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "equals",
              "scope": 2183,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 1693,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1662,
                        "name": "ElementaryTypeName",
                        "src": "3884:5:7"
                      }
                    ],
                    "id": 1663,
                    "name": "VariableDeclaration",
                    "src": "3884:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "offset",
                      "scope": 1693,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1664,
                        "name": "ElementaryTypeName",
                        "src": "3903:4:7"
                      }
                    ],
                    "id": 1665,
                    "name": "VariableDeclaration",
                    "src": "3903:11:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "other",
                      "scope": 1693,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1666,
                        "name": "ElementaryTypeName",
                        "src": "3916:5:7"
                      }
                    ],
                    "id": 1667,
                    "name": "VariableDeclaration",
                    "src": "3916:18:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "otherOffset",
                      "scope": 1693,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1668,
                        "name": "ElementaryTypeName",
                        "src": "3936:4:7"
                      }
                    ],
                    "id": 1669,
                    "name": "VariableDeclaration",
                    "src": "3936:16:7"
                  }
                ],
                "id": 1670,
                "name": "ParameterList",
                "src": "3883:70:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 1693,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1671,
                        "name": "ElementaryTypeName",
                        "src": "3977:4:7"
                      }
                    ],
                    "id": 1672,
                    "name": "VariableDeclaration",
                    "src": "3977:4:7"
                  }
                ],
                "id": 1673,
                "name": "ParameterList",
                "src": "3976:6:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1673
                    },
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1476,
                                  "type": "function (bytes memory,uint256,uint256) pure returns (bytes32)",
                                  "value": "keccak"
                                },
                                "id": 1674,
                                "name": "Identifier",
                                "src": "4000:6:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1663,
                                  "type": "bytes memory",
                                  "value": "self"
                                },
                                "id": 1675,
                                "name": "Identifier",
                                "src": "4007:4:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1665,
                                  "type": "uint256",
                                  "value": "offset"
                                },
                                "id": 1676,
                                "name": "Identifier",
                                "src": "4013:6:7"
                              },
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1663,
                                          "type": "bytes memory",
                                          "value": "self"
                                        },
                                        "id": 1677,
                                        "name": "Identifier",
                                        "src": "4021:4:7"
                                      }
                                    ],
                                    "id": 1678,
                                    "name": "MemberAccess",
                                    "src": "4021:11:7"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1665,
                                      "type": "uint256",
                                      "value": "offset"
                                    },
                                    "id": 1679,
                                    "name": "Identifier",
                                    "src": "4035:6:7"
                                  }
                                ],
                                "id": 1680,
                                "name": "BinaryOperation",
                                "src": "4021:20:7"
                              }
                            ],
                            "id": 1681,
                            "name": "FunctionCall",
                            "src": "4000:42:7"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1476,
                                  "type": "function (bytes memory,uint256,uint256) pure returns (bytes32)",
                                  "value": "keccak"
                                },
                                "id": 1682,
                                "name": "Identifier",
                                "src": "4046:6:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1667,
                                  "type": "bytes memory",
                                  "value": "other"
                                },
                                "id": 1683,
                                "name": "Identifier",
                                "src": "4053:5:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1669,
                                  "type": "uint256",
                                  "value": "otherOffset"
                                },
                                "id": 1684,
                                "name": "Identifier",
                                "src": "4060:11:7"
                              },
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1667,
                                          "type": "bytes memory",
                                          "value": "other"
                                        },
                                        "id": 1685,
                                        "name": "Identifier",
                                        "src": "4073:5:7"
                                      }
                                    ],
                                    "id": 1686,
                                    "name": "MemberAccess",
                                    "src": "4073:12:7"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1669,
                                      "type": "uint256",
                                      "value": "otherOffset"
                                    },
                                    "id": 1687,
                                    "name": "Identifier",
                                    "src": "4088:11:7"
                                  }
                                ],
                                "id": 1688,
                                "name": "BinaryOperation",
                                "src": "4073:26:7"
                              }
                            ],
                            "id": 1689,
                            "name": "FunctionCall",
                            "src": "4046:54:7"
                          }
                        ],
                        "id": 1690,
                        "name": "BinaryOperation",
                        "src": "4000:100:7"
                      }
                    ],
                    "id": 1691,
                    "name": "Return",
                    "src": "3993:107:7"
                  }
                ],
                "id": 1692,
                "name": "Block",
                "src": "3983:124:7"
              }
            ],
            "id": 1693,
            "name": "FunctionDefinition",
            "src": "3868:239:7"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "equals",
              "scope": 2183,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 1722,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1694,
                        "name": "ElementaryTypeName",
                        "src": "4475:5:7"
                      }
                    ],
                    "id": 1695,
                    "name": "VariableDeclaration",
                    "src": "4475:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "offset",
                      "scope": 1722,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1696,
                        "name": "ElementaryTypeName",
                        "src": "4494:4:7"
                      }
                    ],
                    "id": 1697,
                    "name": "VariableDeclaration",
                    "src": "4494:11:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "other",
                      "scope": 1722,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1698,
                        "name": "ElementaryTypeName",
                        "src": "4507:5:7"
                      }
                    ],
                    "id": 1699,
                    "name": "VariableDeclaration",
                    "src": "4507:18:7"
                  }
                ],
                "id": 1700,
                "name": "ParameterList",
                "src": "4474:52:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 1722,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1701,
                        "name": "ElementaryTypeName",
                        "src": "4550:4:7"
                      }
                    ],
                    "id": 1702,
                    "name": "VariableDeclaration",
                    "src": "4550:4:7"
                  }
                ],
                "id": 1703,
                "name": "ParameterList",
                "src": "4549:6:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1703
                    },
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1695,
                                      "type": "bytes memory",
                                      "value": "self"
                                    },
                                    "id": 1704,
                                    "name": "Identifier",
                                    "src": "4573:4:7"
                                  }
                                ],
                                "id": 1705,
                                "name": "MemberAccess",
                                "src": "4573:11:7"
                              },
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1697,
                                      "type": "uint256",
                                      "value": "offset"
                                    },
                                    "id": 1706,
                                    "name": "Identifier",
                                    "src": "4588:6:7"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1699,
                                          "type": "bytes memory",
                                          "value": "other"
                                        },
                                        "id": 1707,
                                        "name": "Identifier",
                                        "src": "4597:5:7"
                                      }
                                    ],
                                    "id": 1708,
                                    "name": "MemberAccess",
                                    "src": "4597:12:7"
                                  }
                                ],
                                "id": 1709,
                                "name": "BinaryOperation",
                                "src": "4588:21:7"
                              }
                            ],
                            "id": 1710,
                            "name": "BinaryOperation",
                            "src": "4573:36:7"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    1661,
                                    1693,
                                    1722,
                                    1747
                                  ],
                                  "referencedDeclaration": 1661,
                                  "type": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure returns (bool)",
                                  "value": "equals"
                                },
                                "id": 1711,
                                "name": "Identifier",
                                "src": "4613:6:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1695,
                                  "type": "bytes memory",
                                  "value": "self"
                                },
                                "id": 1712,
                                "name": "Identifier",
                                "src": "4620:4:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1697,
                                  "type": "uint256",
                                  "value": "offset"
                                },
                                "id": 1713,
                                "name": "Identifier",
                                "src": "4626:6:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1699,
                                  "type": "bytes memory",
                                  "value": "other"
                                },
                                "id": 1714,
                                "name": "Identifier",
                                "src": "4634:5:7"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 1715,
                                "name": "Literal",
                                "src": "4641:1:7"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1699,
                                      "type": "bytes memory",
                                      "value": "other"
                                    },
                                    "id": 1716,
                                    "name": "Identifier",
                                    "src": "4644:5:7"
                                  }
                                ],
                                "id": 1717,
                                "name": "MemberAccess",
                                "src": "4644:12:7"
                              }
                            ],
                            "id": 1718,
                            "name": "FunctionCall",
                            "src": "4613:44:7"
                          }
                        ],
                        "id": 1719,
                        "name": "BinaryOperation",
                        "src": "4573:84:7"
                      }
                    ],
                    "id": 1720,
                    "name": "Return",
                    "src": "4566:91:7"
                  }
                ],
                "id": 1721,
                "name": "Block",
                "src": "4556:108:7"
              }
            ],
            "id": 1722,
            "name": "FunctionDefinition",
            "src": "4459:205:7"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "equals",
              "scope": 2183,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 1747,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1723,
                        "name": "ElementaryTypeName",
                        "src": "4928:5:7"
                      }
                    ],
                    "id": 1724,
                    "name": "VariableDeclaration",
                    "src": "4928:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "other",
                      "scope": 1747,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1725,
                        "name": "ElementaryTypeName",
                        "src": "4947:5:7"
                      }
                    ],
                    "id": 1726,
                    "name": "VariableDeclaration",
                    "src": "4947:18:7"
                  }
                ],
                "id": 1727,
                "name": "ParameterList",
                "src": "4927:39:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 1747,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1728,
                        "name": "ElementaryTypeName",
                        "src": "4989:4:7"
                      }
                    ],
                    "id": 1729,
                    "name": "VariableDeclaration",
                    "src": "4989:4:7"
                  }
                ],
                "id": 1730,
                "name": "ParameterList",
                "src": "4988:6:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1730
                    },
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1724,
                                      "type": "bytes memory",
                                      "value": "self"
                                    },
                                    "id": 1731,
                                    "name": "Identifier",
                                    "src": "5012:4:7"
                                  }
                                ],
                                "id": 1732,
                                "name": "MemberAccess",
                                "src": "5012:11:7"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1726,
                                      "type": "bytes memory",
                                      "value": "other"
                                    },
                                    "id": 1733,
                                    "name": "Identifier",
                                    "src": "5027:5:7"
                                  }
                                ],
                                "id": 1734,
                                "name": "MemberAccess",
                                "src": "5027:12:7"
                              }
                            ],
                            "id": 1735,
                            "name": "BinaryOperation",
                            "src": "5012:27:7"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    1661,
                                    1693,
                                    1722,
                                    1747
                                  ],
                                  "referencedDeclaration": 1661,
                                  "type": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure returns (bool)",
                                  "value": "equals"
                                },
                                "id": 1736,
                                "name": "Identifier",
                                "src": "5043:6:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1724,
                                  "type": "bytes memory",
                                  "value": "self"
                                },
                                "id": 1737,
                                "name": "Identifier",
                                "src": "5050:4:7"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 1738,
                                "name": "Literal",
                                "src": "5056:1:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1726,
                                  "type": "bytes memory",
                                  "value": "other"
                                },
                                "id": 1739,
                                "name": "Identifier",
                                "src": "5059:5:7"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 1740,
                                "name": "Literal",
                                "src": "5066:1:7"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1724,
                                      "type": "bytes memory",
                                      "value": "self"
                                    },
                                    "id": 1741,
                                    "name": "Identifier",
                                    "src": "5069:4:7"
                                  }
                                ],
                                "id": 1742,
                                "name": "MemberAccess",
                                "src": "5069:11:7"
                              }
                            ],
                            "id": 1743,
                            "name": "FunctionCall",
                            "src": "5043:38:7"
                          }
                        ],
                        "id": 1744,
                        "name": "BinaryOperation",
                        "src": "5012:69:7"
                      }
                    ],
                    "id": 1745,
                    "name": "Return",
                    "src": "5005:76:7"
                  }
                ],
                "id": 1746,
                "name": "Block",
                "src": "4995:93:7"
              }
            ],
            "id": 1747,
            "name": "FunctionDefinition",
            "src": "4912:176:7"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "readUint8",
              "scope": 2183,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 1764,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1748,
                        "name": "ElementaryTypeName",
                        "src": "5349:5:7"
                      }
                    ],
                    "id": 1749,
                    "name": "VariableDeclaration",
                    "src": "5349:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "idx",
                      "scope": 1764,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1750,
                        "name": "ElementaryTypeName",
                        "src": "5368:4:7"
                      }
                    ],
                    "id": 1751,
                    "name": "VariableDeclaration",
                    "src": "5368:8:7"
                  }
                ],
                "id": 1752,
                "name": "ParameterList",
                "src": "5348:29:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "ret",
                      "scope": 1764,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 1753,
                        "name": "ElementaryTypeName",
                        "src": "5401:5:7"
                      }
                    ],
                    "id": 1754,
                    "name": "VariableDeclaration",
                    "src": "5401:9:7"
                  }
                ],
                "id": 1755,
                "name": "ParameterList",
                "src": "5400:11:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1755
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint8",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes1",
                                  "typeString": "bytes1"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint8)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint8"
                                },
                                "id": 1756,
                                "name": "ElementaryTypeName",
                                "src": "5429:5:7"
                              }
                            ],
                            "id": 1757,
                            "name": "ElementaryTypeNameExpression",
                            "src": "5429:5:7"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "bytes1"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1749,
                                  "type": "bytes memory",
                                  "value": "self"
                                },
                                "id": 1758,
                                "name": "Identifier",
                                "src": "5435:4:7"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1751,
                                  "type": "uint256",
                                  "value": "idx"
                                },
                                "id": 1759,
                                "name": "Identifier",
                                "src": "5440:3:7"
                              }
                            ],
                            "id": 1760,
                            "name": "IndexAccess",
                            "src": "5435:9:7"
                          }
                        ],
                        "id": 1761,
                        "name": "FunctionCall",
                        "src": "5429:16:7"
                      }
                    ],
                    "id": 1762,
                    "name": "Return",
                    "src": "5422:23:7"
                  }
                ],
                "id": 1763,
                "name": "Block",
                "src": "5412:40:7"
              }
            ],
            "id": 1764,
            "name": "FunctionDefinition",
            "src": "5330:122:7"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "readUint16",
              "scope": 2183,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 1784,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1765,
                        "name": "ElementaryTypeName",
                        "src": "5716:5:7"
                      }
                    ],
                    "id": 1766,
                    "name": "VariableDeclaration",
                    "src": "5716:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "idx",
                      "scope": 1784,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1767,
                        "name": "ElementaryTypeName",
                        "src": "5735:4:7"
                      }
                    ],
                    "id": 1768,
                    "name": "VariableDeclaration",
                    "src": "5735:8:7"
                  }
                ],
                "id": 1769,
                "name": "ParameterList",
                "src": "5715:29:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "ret",
                      "scope": 1784,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 1770,
                        "name": "ElementaryTypeName",
                        "src": "5768:6:7"
                      }
                    ],
                    "id": 1771,
                    "name": "VariableDeclaration",
                    "src": "5768:10:7"
                  }
                ],
                "id": 1772,
                "name": "ParameterList",
                "src": "5767:12:7"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1773,
                            "name": "Identifier",
                            "src": "5790:7:7"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1768,
                                      "type": "uint256",
                                      "value": "idx"
                                    },
                                    "id": 1774,
                                    "name": "Identifier",
                                    "src": "5798:3:7"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "32",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 2",
                                      "value": "2"
                                    },
                                    "id": 1775,
                                    "name": "Literal",
                                    "src": "5804:1:7"
                                  }
                                ],
                                "id": 1776,
                                "name": "BinaryOperation",
                                "src": "5798:7:7"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1766,
                                      "type": "bytes memory",
                                      "value": "self"
                                    },
                                    "id": 1777,
                                    "name": "Identifier",
                                    "src": "5809:4:7"
                                  }
                                ],
                                "id": 1778,
                                "name": "MemberAccess",
                                "src": "5809:11:7"
                              }
                            ],
                            "id": 1779,
                            "name": "BinaryOperation",
                            "src": "5798:22:7"
                          }
                        ],
                        "id": 1780,
                        "name": "FunctionCall",
                        "src": "5790:31:7"
                      }
                    ],
                    "id": 1781,
                    "name": "ExpressionStatement",
                    "src": "5790:31:7"
                  },
                  {
                    "attributes": {
                      "evmVersion": "istanbul",
                      "externalReferences": [
                        {
                          "declaration": 1768,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "5889:3:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1771,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "5854:3:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1766,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "5879:4:7",
                          "valueSize": 1
                        }
                      ],
                      "operations": "{\n    ret := and(mload(add(add(self, 2), idx)), 0xFFFF)\n}"
                    },
                    "children": [],
                    "id": 1782,
                    "name": "InlineAssembly",
                    "src": "5831:82:7"
                  }
                ],
                "id": 1783,
                "name": "Block",
                "src": "5780:139:7"
              }
            ],
            "id": 1784,
            "name": "FunctionDefinition",
            "src": "5696:223:7"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "readUint32",
              "scope": 2183,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 1804,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1785,
                        "name": "ElementaryTypeName",
                        "src": "6183:5:7"
                      }
                    ],
                    "id": 1786,
                    "name": "VariableDeclaration",
                    "src": "6183:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "idx",
                      "scope": 1804,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1787,
                        "name": "ElementaryTypeName",
                        "src": "6202:4:7"
                      }
                    ],
                    "id": 1788,
                    "name": "VariableDeclaration",
                    "src": "6202:8:7"
                  }
                ],
                "id": 1789,
                "name": "ParameterList",
                "src": "6182:29:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "ret",
                      "scope": 1804,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint32",
                          "type": "uint32"
                        },
                        "id": 1790,
                        "name": "ElementaryTypeName",
                        "src": "6235:6:7"
                      }
                    ],
                    "id": 1791,
                    "name": "VariableDeclaration",
                    "src": "6235:10:7"
                  }
                ],
                "id": 1792,
                "name": "ParameterList",
                "src": "6234:12:7"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1793,
                            "name": "Identifier",
                            "src": "6257:7:7"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1788,
                                      "type": "uint256",
                                      "value": "idx"
                                    },
                                    "id": 1794,
                                    "name": "Identifier",
                                    "src": "6265:3:7"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "34",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 4",
                                      "value": "4"
                                    },
                                    "id": 1795,
                                    "name": "Literal",
                                    "src": "6271:1:7"
                                  }
                                ],
                                "id": 1796,
                                "name": "BinaryOperation",
                                "src": "6265:7:7"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1786,
                                      "type": "bytes memory",
                                      "value": "self"
                                    },
                                    "id": 1797,
                                    "name": "Identifier",
                                    "src": "6276:4:7"
                                  }
                                ],
                                "id": 1798,
                                "name": "MemberAccess",
                                "src": "6276:11:7"
                              }
                            ],
                            "id": 1799,
                            "name": "BinaryOperation",
                            "src": "6265:22:7"
                          }
                        ],
                        "id": 1800,
                        "name": "FunctionCall",
                        "src": "6257:31:7"
                      }
                    ],
                    "id": 1801,
                    "name": "ExpressionStatement",
                    "src": "6257:31:7"
                  },
                  {
                    "attributes": {
                      "evmVersion": "istanbul",
                      "externalReferences": [
                        {
                          "declaration": 1788,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "6356:3:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1791,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "6321:3:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1786,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "6346:4:7",
                          "valueSize": 1
                        }
                      ],
                      "operations": "{\n    ret := and(mload(add(add(self, 4), idx)), 0xFFFFFFFF)\n}"
                    },
                    "children": [],
                    "id": 1802,
                    "name": "InlineAssembly",
                    "src": "6298:86:7"
                  }
                ],
                "id": 1803,
                "name": "Block",
                "src": "6247:143:7"
              }
            ],
            "id": 1804,
            "name": "FunctionDefinition",
            "src": "6163:227:7"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "readBytes32",
              "scope": 2183,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 1824,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1805,
                        "name": "ElementaryTypeName",
                        "src": "6629:5:7"
                      }
                    ],
                    "id": 1806,
                    "name": "VariableDeclaration",
                    "src": "6629:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "idx",
                      "scope": 1824,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1807,
                        "name": "ElementaryTypeName",
                        "src": "6648:4:7"
                      }
                    ],
                    "id": 1808,
                    "name": "VariableDeclaration",
                    "src": "6648:8:7"
                  }
                ],
                "id": 1809,
                "name": "ParameterList",
                "src": "6628:29:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "ret",
                      "scope": 1824,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 1810,
                        "name": "ElementaryTypeName",
                        "src": "6681:7:7"
                      }
                    ],
                    "id": 1811,
                    "name": "VariableDeclaration",
                    "src": "6681:11:7"
                  }
                ],
                "id": 1812,
                "name": "ParameterList",
                "src": "6680:13:7"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1813,
                            "name": "Identifier",
                            "src": "6704:7:7"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1808,
                                      "type": "uint256",
                                      "value": "idx"
                                    },
                                    "id": 1814,
                                    "name": "Identifier",
                                    "src": "6712:3:7"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "3332",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 32",
                                      "value": "32"
                                    },
                                    "id": 1815,
                                    "name": "Literal",
                                    "src": "6718:2:7"
                                  }
                                ],
                                "id": 1816,
                                "name": "BinaryOperation",
                                "src": "6712:8:7"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1806,
                                      "type": "bytes memory",
                                      "value": "self"
                                    },
                                    "id": 1817,
                                    "name": "Identifier",
                                    "src": "6724:4:7"
                                  }
                                ],
                                "id": 1818,
                                "name": "MemberAccess",
                                "src": "6724:11:7"
                              }
                            ],
                            "id": 1819,
                            "name": "BinaryOperation",
                            "src": "6712:23:7"
                          }
                        ],
                        "id": 1820,
                        "name": "FunctionCall",
                        "src": "6704:32:7"
                      }
                    ],
                    "id": 1821,
                    "name": "ExpressionStatement",
                    "src": "6704:32:7"
                  },
                  {
                    "attributes": {
                      "evmVersion": "istanbul",
                      "externalReferences": [
                        {
                          "declaration": 1808,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "6801:3:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1811,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "6769:3:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1806,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "6790:4:7",
                          "valueSize": 1
                        }
                      ],
                      "operations": "{\n    ret := mload(add(add(self, 32), idx))\n}"
                    },
                    "children": [],
                    "id": 1822,
                    "name": "InlineAssembly",
                    "src": "6746:70:7"
                  }
                ],
                "id": 1823,
                "name": "Block",
                "src": "6694:128:7"
              }
            ],
            "id": 1824,
            "name": "FunctionDefinition",
            "src": "6608:214:7"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "readBytes20",
              "scope": 2183,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 1844,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1825,
                        "name": "ElementaryTypeName",
                        "src": "7061:5:7"
                      }
                    ],
                    "id": 1826,
                    "name": "VariableDeclaration",
                    "src": "7061:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "idx",
                      "scope": 1844,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1827,
                        "name": "ElementaryTypeName",
                        "src": "7080:4:7"
                      }
                    ],
                    "id": 1828,
                    "name": "VariableDeclaration",
                    "src": "7080:8:7"
                  }
                ],
                "id": 1829,
                "name": "ParameterList",
                "src": "7060:29:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "ret",
                      "scope": 1844,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes20",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes20",
                          "type": "bytes20"
                        },
                        "id": 1830,
                        "name": "ElementaryTypeName",
                        "src": "7113:7:7"
                      }
                    ],
                    "id": 1831,
                    "name": "VariableDeclaration",
                    "src": "7113:11:7"
                  }
                ],
                "id": 1832,
                "name": "ParameterList",
                "src": "7112:13:7"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1833,
                            "name": "Identifier",
                            "src": "7136:7:7"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1828,
                                      "type": "uint256",
                                      "value": "idx"
                                    },
                                    "id": 1834,
                                    "name": "Identifier",
                                    "src": "7144:3:7"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "3230",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 20",
                                      "value": "20"
                                    },
                                    "id": 1835,
                                    "name": "Literal",
                                    "src": "7150:2:7"
                                  }
                                ],
                                "id": 1836,
                                "name": "BinaryOperation",
                                "src": "7144:8:7"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1826,
                                      "type": "bytes memory",
                                      "value": "self"
                                    },
                                    "id": 1837,
                                    "name": "Identifier",
                                    "src": "7156:4:7"
                                  }
                                ],
                                "id": 1838,
                                "name": "MemberAccess",
                                "src": "7156:11:7"
                              }
                            ],
                            "id": 1839,
                            "name": "BinaryOperation",
                            "src": "7144:23:7"
                          }
                        ],
                        "id": 1840,
                        "name": "FunctionCall",
                        "src": "7136:32:7"
                      }
                    ],
                    "id": 1841,
                    "name": "ExpressionStatement",
                    "src": "7136:32:7"
                  },
                  {
                    "attributes": {
                      "evmVersion": "istanbul",
                      "externalReferences": [
                        {
                          "declaration": 1828,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7237:3:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1831,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7201:3:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1826,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7226:4:7",
                          "valueSize": 1
                        }
                      ],
                      "operations": "{\n    ret := and(mload(add(add(self, 32), idx)), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000)\n}"
                    },
                    "children": [],
                    "id": 1842,
                    "name": "InlineAssembly",
                    "src": "7178:143:7"
                  }
                ],
                "id": 1843,
                "name": "Block",
                "src": "7126:201:7"
              }
            ],
            "id": 1844,
            "name": "FunctionDefinition",
            "src": "7040:287:7"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "readBytesN",
              "scope": 2183,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 1872,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1845,
                        "name": "ElementaryTypeName",
                        "src": "7603:5:7"
                      }
                    ],
                    "id": 1846,
                    "name": "VariableDeclaration",
                    "src": "7603:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "idx",
                      "scope": 1872,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1847,
                        "name": "ElementaryTypeName",
                        "src": "7622:4:7"
                      }
                    ],
                    "id": 1848,
                    "name": "VariableDeclaration",
                    "src": "7622:8:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "len",
                      "scope": 1872,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1849,
                        "name": "ElementaryTypeName",
                        "src": "7632:4:7"
                      }
                    ],
                    "id": 1850,
                    "name": "VariableDeclaration",
                    "src": "7632:8:7"
                  }
                ],
                "id": 1851,
                "name": "ParameterList",
                "src": "7602:39:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "ret",
                      "scope": 1872,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 1852,
                        "name": "ElementaryTypeName",
                        "src": "7665:7:7"
                      }
                    ],
                    "id": 1853,
                    "name": "VariableDeclaration",
                    "src": "7665:11:7"
                  }
                ],
                "id": 1854,
                "name": "ParameterList",
                "src": "7664:13:7"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1855,
                            "name": "Identifier",
                            "src": "7688:7:7"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1850,
                                  "type": "uint256",
                                  "value": "len"
                                },
                                "id": 1856,
                                "name": "Identifier",
                                "src": "7696:3:7"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "3332",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 32",
                                  "value": "32"
                                },
                                "id": 1857,
                                "name": "Literal",
                                "src": "7703:2:7"
                              }
                            ],
                            "id": 1858,
                            "name": "BinaryOperation",
                            "src": "7696:9:7"
                          }
                        ],
                        "id": 1859,
                        "name": "FunctionCall",
                        "src": "7688:18:7"
                      }
                    ],
                    "id": 1860,
                    "name": "ExpressionStatement",
                    "src": "7688:18:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1861,
                            "name": "Identifier",
                            "src": "7716:7:7"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1848,
                                      "type": "uint256",
                                      "value": "idx"
                                    },
                                    "id": 1862,
                                    "name": "Identifier",
                                    "src": "7724:3:7"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1850,
                                      "type": "uint256",
                                      "value": "len"
                                    },
                                    "id": 1863,
                                    "name": "Identifier",
                                    "src": "7730:3:7"
                                  }
                                ],
                                "id": 1864,
                                "name": "BinaryOperation",
                                "src": "7724:9:7"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1846,
                                      "type": "bytes memory",
                                      "value": "self"
                                    },
                                    "id": 1865,
                                    "name": "Identifier",
                                    "src": "7737:4:7"
                                  }
                                ],
                                "id": 1866,
                                "name": "MemberAccess",
                                "src": "7737:11:7"
                              }
                            ],
                            "id": 1867,
                            "name": "BinaryOperation",
                            "src": "7724:24:7"
                          }
                        ],
                        "id": 1868,
                        "name": "FunctionCall",
                        "src": "7716:33:7"
                      }
                    ],
                    "id": 1869,
                    "name": "ExpressionStatement",
                    "src": "7716:33:7"
                  },
                  {
                    "attributes": {
                      "evmVersion": "istanbul",
                      "externalReferences": [
                        {
                          "declaration": 1848,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7878:3:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1850,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7819:3:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1853,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7842:3:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1846,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "7867:4:7",
                          "valueSize": 1
                        }
                      ],
                      "operations": "{\n    let mask := not(sub(exp(256, sub(32, len)), 1))\n    ret := and(mload(add(add(self, 32), idx)), mask)\n}"
                    },
                    "children": [],
                    "id": 1870,
                    "name": "InlineAssembly",
                    "src": "7759:142:7"
                  }
                ],
                "id": 1871,
                "name": "Block",
                "src": "7678:229:7"
              }
            ],
            "id": 1872,
            "name": "FunctionDefinition",
            "src": "7583:324:7"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "memcpy",
              "scope": 2183,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "dest",
                      "scope": 1912,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1873,
                        "name": "ElementaryTypeName",
                        "src": "7929:4:7"
                      }
                    ],
                    "id": 1874,
                    "name": "VariableDeclaration",
                    "src": "7929:9:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "src",
                      "scope": 1912,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1875,
                        "name": "ElementaryTypeName",
                        "src": "7940:4:7"
                      }
                    ],
                    "id": 1876,
                    "name": "VariableDeclaration",
                    "src": "7940:8:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "len",
                      "scope": 1912,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1877,
                        "name": "ElementaryTypeName",
                        "src": "7950:4:7"
                      }
                    ],
                    "id": 1878,
                    "name": "VariableDeclaration",
                    "src": "7950:8:7"
                  }
                ],
                "id": 1879,
                "name": "ParameterList",
                "src": "7928:31:7"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1880,
                "name": "ParameterList",
                "src": "7973:0:7"
              },
              {
                "children": [
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1878,
                              "type": "uint256",
                              "value": "len"
                            },
                            "id": 1881,
                            "name": "Identifier",
                            "src": "8040:3:7"
                          },
                          {
                            "attributes": {
                              "hexvalue": "3332",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 32",
                              "value": "32"
                            },
                            "id": 1882,
                            "name": "Literal",
                            "src": "8047:2:7"
                          }
                        ],
                        "id": 1883,
                        "name": "BinaryOperation",
                        "src": "8040:9:7"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "-=",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1878,
                                  "type": "uint256",
                                  "value": "len"
                                },
                                "id": 1884,
                                "name": "Identifier",
                                "src": "8051:3:7"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "3332",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 32",
                                  "value": "32"
                                },
                                "id": 1885,
                                "name": "Literal",
                                "src": "8058:2:7"
                              }
                            ],
                            "id": 1886,
                            "name": "Assignment",
                            "src": "8051:9:7"
                          }
                        ],
                        "id": 1887,
                        "name": "ExpressionStatement",
                        "src": "8051:9:7"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "evmVersion": "istanbul",
                              "externalReferences": [
                                {
                                  "declaration": 1874,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "8110:4:7",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 1876,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "8122:3:7",
                                  "valueSize": 1
                                }
                              ],
                              "operations": "{ mstore(dest, mload(src)) }"
                            },
                            "children": [],
                            "id": 1888,
                            "name": "InlineAssembly",
                            "src": "8076:65:7"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1874,
                                      "type": "uint256",
                                      "value": "dest"
                                    },
                                    "id": 1889,
                                    "name": "Identifier",
                                    "src": "8154:4:7"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "3332",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 32",
                                      "value": "32"
                                    },
                                    "id": 1890,
                                    "name": "Literal",
                                    "src": "8162:2:7"
                                  }
                                ],
                                "id": 1891,
                                "name": "Assignment",
                                "src": "8154:10:7"
                              }
                            ],
                            "id": 1892,
                            "name": "ExpressionStatement",
                            "src": "8154:10:7"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1876,
                                      "type": "uint256",
                                      "value": "src"
                                    },
                                    "id": 1893,
                                    "name": "Identifier",
                                    "src": "8178:3:7"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "3332",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 32",
                                      "value": "32"
                                    },
                                    "id": 1894,
                                    "name": "Literal",
                                    "src": "8185:2:7"
                                  }
                                ],
                                "id": 1895,
                                "name": "Assignment",
                                "src": "8178:9:7"
                              }
                            ],
                            "id": 1896,
                            "name": "ExpressionStatement",
                            "src": "8178:9:7"
                          }
                        ],
                        "id": 1897,
                        "name": "Block",
                        "src": "8062:136:7"
                      }
                    ],
                    "id": 1898,
                    "name": "ForStatement",
                    "src": "8033:165:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1900
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "mask",
                          "scope": 1911,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 1899,
                            "name": "ElementaryTypeName",
                            "src": "8240:4:7"
                          }
                        ],
                        "id": 1900,
                        "name": "VariableDeclaration",
                        "src": "8240:9:7"
                      },
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "-",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "**",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "hexvalue": "323536",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 256",
                                  "value": "256"
                                },
                                "id": 1901,
                                "name": "Literal",
                                "src": "8252:3:7"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "hexvalue": "3332",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "token": "number",
                                          "type": "int_const 32",
                                          "value": "32"
                                        },
                                        "id": 1902,
                                        "name": "Literal",
                                        "src": "8260:2:7"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1878,
                                          "type": "uint256",
                                          "value": "len"
                                        },
                                        "id": 1903,
                                        "name": "Identifier",
                                        "src": "8265:3:7"
                                      }
                                    ],
                                    "id": 1904,
                                    "name": "BinaryOperation",
                                    "src": "8260:8:7"
                                  }
                                ],
                                "id": 1905,
                                "name": "TupleExpression",
                                "src": "8259:10:7"
                              }
                            ],
                            "id": 1906,
                            "name": "BinaryOperation",
                            "src": "8252:17:7"
                          },
                          {
                            "attributes": {
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 1907,
                            "name": "Literal",
                            "src": "8272:1:7"
                          }
                        ],
                        "id": 1908,
                        "name": "BinaryOperation",
                        "src": "8252:21:7"
                      }
                    ],
                    "id": 1909,
                    "name": "VariableDeclarationStatement",
                    "src": "8240:33:7"
                  },
                  {
                    "attributes": {
                      "evmVersion": "istanbul",
                      "externalReferences": [
                        {
                          "declaration": 1874,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "8386:4:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1874,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "8418:4:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1900,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "8341:4:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1900,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "8393:4:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1876,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "8331:3:7",
                          "valueSize": 1
                        }
                      ],
                      "operations": "{\n    let srcpart := and(mload(src), not(mask))\n    let destpart := and(mload(dest), mask)\n    mstore(dest, or(destpart, srcpart))\n}"
                    },
                    "children": [],
                    "id": 1910,
                    "name": "InlineAssembly",
                    "src": "8283:173:7"
                  }
                ],
                "id": 1911,
                "name": "Block",
                "src": "7973:489:7"
              }
            ],
            "id": 1912,
            "name": "FunctionDefinition",
            "src": "7913:549:7"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "substring",
              "scope": 2183,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 1955,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1913,
                        "name": "ElementaryTypeName",
                        "src": "8701:5:7"
                      }
                    ],
                    "id": 1914,
                    "name": "VariableDeclaration",
                    "src": "8701:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "offset",
                      "scope": 1955,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1915,
                        "name": "ElementaryTypeName",
                        "src": "8720:4:7"
                      }
                    ],
                    "id": 1916,
                    "name": "VariableDeclaration",
                    "src": "8720:11:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "len",
                      "scope": 1955,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1917,
                        "name": "ElementaryTypeName",
                        "src": "8733:4:7"
                      }
                    ],
                    "id": 1918,
                    "name": "VariableDeclaration",
                    "src": "8733:8:7"
                  }
                ],
                "id": 1919,
                "name": "ParameterList",
                "src": "8700:42:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 1955,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1920,
                        "name": "ElementaryTypeName",
                        "src": "8765:5:7"
                      }
                    ],
                    "id": 1921,
                    "name": "VariableDeclaration",
                    "src": "8765:12:7"
                  }
                ],
                "id": 1922,
                "name": "ParameterList",
                "src": "8764:14:7"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1923,
                            "name": "Identifier",
                            "src": "8789:7:7"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1916,
                                      "type": "uint256",
                                      "value": "offset"
                                    },
                                    "id": 1924,
                                    "name": "Identifier",
                                    "src": "8797:6:7"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1918,
                                      "type": "uint256",
                                      "value": "len"
                                    },
                                    "id": 1925,
                                    "name": "Identifier",
                                    "src": "8806:3:7"
                                  }
                                ],
                                "id": 1926,
                                "name": "BinaryOperation",
                                "src": "8797:12:7"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1914,
                                      "type": "bytes memory",
                                      "value": "self"
                                    },
                                    "id": 1927,
                                    "name": "Identifier",
                                    "src": "8813:4:7"
                                  }
                                ],
                                "id": 1928,
                                "name": "MemberAccess",
                                "src": "8813:11:7"
                              }
                            ],
                            "id": 1929,
                            "name": "BinaryOperation",
                            "src": "8797:27:7"
                          }
                        ],
                        "id": 1930,
                        "name": "FunctionCall",
                        "src": "8789:36:7"
                      }
                    ],
                    "id": 1931,
                    "name": "ExpressionStatement",
                    "src": "8789:36:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1933
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "ret",
                          "scope": 1954,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 1932,
                            "name": "ElementaryTypeName",
                            "src": "8836:5:7"
                          }
                        ],
                        "id": 1933,
                        "name": "VariableDeclaration",
                        "src": "8836:16:7"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "function (uint256) pure returns (bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "bytes",
                                  "type": "bytes"
                                },
                                "id": 1934,
                                "name": "ElementaryTypeName",
                                "src": "8859:5:7"
                              }
                            ],
                            "id": 1935,
                            "name": "NewExpression",
                            "src": "8855:9:7"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1918,
                              "type": "uint256",
                              "value": "len"
                            },
                            "id": 1936,
                            "name": "Identifier",
                            "src": "8865:3:7"
                          }
                        ],
                        "id": 1937,
                        "name": "FunctionCall",
                        "src": "8855:14:7"
                      }
                    ],
                    "id": 1938,
                    "name": "VariableDeclarationStatement",
                    "src": "8836:33:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1940
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "dest",
                          "scope": 1954,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 1939,
                            "name": "ElementaryTypeName",
                            "src": "8879:4:7"
                          }
                        ],
                        "id": 1940,
                        "name": "VariableDeclaration",
                        "src": "8879:9:7"
                      }
                    ],
                    "id": 1941,
                    "name": "VariableDeclarationStatement",
                    "src": "8879:9:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1943
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "src",
                          "scope": 1954,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 1942,
                            "name": "ElementaryTypeName",
                            "src": "8898:4:7"
                          }
                        ],
                        "id": 1943,
                        "name": "VariableDeclaration",
                        "src": "8898:8:7"
                      }
                    ],
                    "id": 1944,
                    "name": "VariableDeclarationStatement",
                    "src": "8898:8:7"
                  },
                  {
                    "attributes": {
                      "evmVersion": "istanbul",
                      "externalReferences": [
                        {
                          "declaration": 1940,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "8940:4:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1916,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "8999:6:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1933,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "8952:3:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1914,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "8988:4:7",
                          "valueSize": 1
                        },
                        {
                          "declaration": 1943,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "8973:3:7",
                          "valueSize": 1
                        }
                      ],
                      "operations": "{\n    dest := add(ret, 32)\n    src := add(add(self, 32), offset)\n}"
                    },
                    "children": [],
                    "id": 1945,
                    "name": "InlineAssembly",
                    "src": "8917:99:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1912,
                              "type": "function (uint256,uint256,uint256) pure",
                              "value": "memcpy"
                            },
                            "id": 1946,
                            "name": "Identifier",
                            "src": "9025:6:7"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1940,
                              "type": "uint256",
                              "value": "dest"
                            },
                            "id": 1947,
                            "name": "Identifier",
                            "src": "9032:4:7"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1943,
                              "type": "uint256",
                              "value": "src"
                            },
                            "id": 1948,
                            "name": "Identifier",
                            "src": "9038:3:7"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1918,
                              "type": "uint256",
                              "value": "len"
                            },
                            "id": 1949,
                            "name": "Identifier",
                            "src": "9043:3:7"
                          }
                        ],
                        "id": 1950,
                        "name": "FunctionCall",
                        "src": "9025:22:7"
                      }
                    ],
                    "id": 1951,
                    "name": "ExpressionStatement",
                    "src": "9025:22:7"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 1922
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 1933,
                          "type": "bytes memory",
                          "value": "ret"
                        },
                        "id": 1952,
                        "name": "Identifier",
                        "src": "9065:3:7"
                      }
                    ],
                    "id": 1953,
                    "name": "Return",
                    "src": "9058:10:7"
                  }
                ],
                "id": 1954,
                "name": "Block",
                "src": "8779:296:7"
              }
            ],
            "id": 1955,
            "name": "FunctionDefinition",
            "src": "8682:393:7"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "base32HexTable",
              "scope": 2183,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes",
                  "type": "bytes"
                },
                "id": 1956,
                "name": "ElementaryTypeName",
                "src": "9203:5:7"
              },
              {
                "attributes": {
                  "hexvalue": "00010203040506070809ffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fffffffffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "token": "hexString",
                  "type": "literal_string hex\"00010203040506070809ffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1fffffffffffffffffffff0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f\""
                },
                "id": 1957,
                "name": "Literal",
                "src": "9235:147:7"
              }
            ],
            "id": 1958,
            "name": "VariableDeclaration",
            "src": "9203:179:7"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "base32HexDecodeWord",
              "scope": 2183,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Decodes unpadded base32 data of up to one word in length.\n @param self The data to decode.\n @param off Offset into the string to start at.\n @param len Number of characters to decode.\n @return The decoded data, left aligned."
                },
                "id": 1959,
                "name": "StructuredDocumentation",
                "src": "9389:271:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 2182,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1960,
                        "name": "ElementaryTypeName",
                        "src": "9694:5:7"
                      }
                    ],
                    "id": 1961,
                    "name": "VariableDeclaration",
                    "src": "9694:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "off",
                      "scope": 2182,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1962,
                        "name": "ElementaryTypeName",
                        "src": "9713:4:7"
                      }
                    ],
                    "id": 1963,
                    "name": "VariableDeclaration",
                    "src": "9713:8:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "len",
                      "scope": 2182,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1964,
                        "name": "ElementaryTypeName",
                        "src": "9723:4:7"
                      }
                    ],
                    "id": 1965,
                    "name": "VariableDeclaration",
                    "src": "9723:8:7"
                  }
                ],
                "id": 1966,
                "name": "ParameterList",
                "src": "9693:39:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 2182,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 1967,
                        "name": "ElementaryTypeName",
                        "src": "9755:7:7"
                      }
                    ],
                    "id": 1968,
                    "name": "VariableDeclaration",
                    "src": "9755:7:7"
                  }
                ],
                "id": 1969,
                "name": "ParameterList",
                "src": "9754:9:7"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1970,
                            "name": "Identifier",
                            "src": "9774:7:7"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1965,
                                  "type": "uint256",
                                  "value": "len"
                                },
                                "id": 1971,
                                "name": "Identifier",
                                "src": "9782:3:7"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "3532",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 52",
                                  "value": "52"
                                },
                                "id": 1972,
                                "name": "Literal",
                                "src": "9789:2:7"
                              }
                            ],
                            "id": 1973,
                            "name": "BinaryOperation",
                            "src": "9782:9:7"
                          }
                        ],
                        "id": 1974,
                        "name": "FunctionCall",
                        "src": "9774:18:7"
                      }
                    ],
                    "id": 1975,
                    "name": "ExpressionStatement",
                    "src": "9774:18:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1977
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "ret",
                          "scope": 2181,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 1976,
                            "name": "ElementaryTypeName",
                            "src": "9803:4:7"
                          }
                        ],
                        "id": 1977,
                        "name": "VariableDeclaration",
                        "src": "9803:8:7"
                      },
                      {
                        "attributes": {
                          "hexvalue": "30",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "token": "number",
                          "type": "int_const 0",
                          "value": "0"
                        },
                        "id": 1978,
                        "name": "Literal",
                        "src": "9814:1:7"
                      }
                    ],
                    "id": 1979,
                    "name": "VariableDeclarationStatement",
                    "src": "9803:12:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1981
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "decoded",
                          "scope": 2181,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint8",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint8",
                              "type": "uint8"
                            },
                            "id": 1980,
                            "name": "ElementaryTypeName",
                            "src": "9825:5:7"
                          }
                        ],
                        "id": 1981,
                        "name": "VariableDeclaration",
                        "src": "9825:13:7"
                      }
                    ],
                    "id": 1982,
                    "name": "VariableDeclarationStatement",
                    "src": "9825:13:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "assignments": [
                            1984
                          ]
                        },
                        "children": [
                          {
                            "attributes": {
                              "constant": false,
                              "mutability": "mutable",
                              "name": "i",
                              "scope": 2052,
                              "stateVariable": false,
                              "storageLocation": "default",
                              "type": "uint256",
                              "visibility": "internal"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint",
                                  "type": "uint256"
                                },
                                "id": 1983,
                                "name": "ElementaryTypeName",
                                "src": "9852:4:7"
                              }
                            ],
                            "id": 1984,
                            "name": "VariableDeclaration",
                            "src": "9852:6:7"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 1985,
                            "name": "Literal",
                            "src": "9861:1:7"
                          }
                        ],
                        "id": 1986,
                        "name": "VariableDeclarationStatement",
                        "src": "9852:10:7"
                      },
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1984,
                              "type": "uint256",
                              "value": "i"
                            },
                            "id": 1987,
                            "name": "Identifier",
                            "src": "9864:1:7"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1965,
                              "type": "uint256",
                              "value": "len"
                            },
                            "id": 1988,
                            "name": "Identifier",
                            "src": "9868:3:7"
                          }
                        ],
                        "id": 1989,
                        "name": "BinaryOperation",
                        "src": "9864:7:7"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "++",
                              "prefix": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1984,
                                  "type": "uint256",
                                  "value": "i"
                                },
                                "id": 1990,
                                "name": "Identifier",
                                "src": "9873:1:7"
                              }
                            ],
                            "id": 1991,
                            "name": "UnaryOperation",
                            "src": "9873:3:7"
                          }
                        ],
                        "id": 1992,
                        "name": "ExpressionStatement",
                        "src": "9873:3:7"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                1994
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "char",
                                  "scope": 2051,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "bytes1",
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes1",
                                      "type": "bytes1"
                                    },
                                    "id": 1993,
                                    "name": "ElementaryTypeName",
                                    "src": "9892:6:7"
                                  }
                                ],
                                "id": 1994,
                                "name": "VariableDeclaration",
                                "src": "9892:11:7"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "bytes1"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1961,
                                      "type": "bytes memory",
                                      "value": "self"
                                    },
                                    "id": 1995,
                                    "name": "Identifier",
                                    "src": "9906:4:7"
                                  },
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "+",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1963,
                                          "type": "uint256",
                                          "value": "off"
                                        },
                                        "id": 1996,
                                        "name": "Identifier",
                                        "src": "9911:3:7"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1984,
                                          "type": "uint256",
                                          "value": "i"
                                        },
                                        "id": 1997,
                                        "name": "Identifier",
                                        "src": "9917:1:7"
                                      }
                                    ],
                                    "id": 1998,
                                    "name": "BinaryOperation",
                                    "src": "9911:7:7"
                                  }
                                ],
                                "id": 1999,
                                "name": "IndexAccess",
                                "src": "9906:13:7"
                              }
                            ],
                            "id": 2000,
                            "name": "VariableDeclarationStatement",
                            "src": "9892:27:7"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        -18,
                                        -18
                                      ],
                                      "referencedDeclaration": -18,
                                      "type": "function (bool) pure",
                                      "value": "require"
                                    },
                                    "id": 2001,
                                    "name": "Identifier",
                                    "src": "9933:7:7"
                                  },
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "&&",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_bytes1",
                                            "typeString": "bytes1"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": ">=",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1994,
                                              "type": "bytes1",
                                              "value": "char"
                                            },
                                            "id": 2002,
                                            "name": "Identifier",
                                            "src": "9941:4:7"
                                          },
                                          {
                                            "attributes": {
                                              "hexvalue": "30783330",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "token": "number",
                                              "type": "int_const 48",
                                              "value": "0x30"
                                            },
                                            "id": 2003,
                                            "name": "Literal",
                                            "src": "9949:4:7"
                                          }
                                        ],
                                        "id": 2004,
                                        "name": "BinaryOperation",
                                        "src": "9941:12:7"
                                      },
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_bytes1",
                                            "typeString": "bytes1"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "<=",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1994,
                                              "type": "bytes1",
                                              "value": "char"
                                            },
                                            "id": 2005,
                                            "name": "Identifier",
                                            "src": "9957:4:7"
                                          },
                                          {
                                            "attributes": {
                                              "hexvalue": "30783741",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "token": "number",
                                              "type": "int_const 122",
                                              "value": "0x7A"
                                            },
                                            "id": 2006,
                                            "name": "Literal",
                                            "src": "9965:4:7"
                                          }
                                        ],
                                        "id": 2007,
                                        "name": "BinaryOperation",
                                        "src": "9957:12:7"
                                      }
                                    ],
                                    "id": 2008,
                                    "name": "BinaryOperation",
                                    "src": "9941:28:7"
                                  }
                                ],
                                "id": 2009,
                                "name": "FunctionCall",
                                "src": "9933:37:7"
                              }
                            ],
                            "id": 2010,
                            "name": "ExpressionStatement",
                            "src": "9933:37:7"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint8"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1981,
                                      "type": "uint8",
                                      "value": "decoded"
                                    },
                                    "id": 2011,
                                    "name": "Identifier",
                                    "src": "9984:7:7"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint8",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes1",
                                              "typeString": "bytes1"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(uint8)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "uint8"
                                            },
                                            "id": 2012,
                                            "name": "ElementaryTypeName",
                                            "src": "9994:5:7"
                                          }
                                        ],
                                        "id": 2013,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "9994:5:7"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "bytes1"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1958,
                                              "type": "bytes memory",
                                              "value": "base32HexTable"
                                            },
                                            "id": 2014,
                                            "name": "Identifier",
                                            "src": "10000:14:7"
                                          },
                                          {
                                            "attributes": {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "-",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "tryCall": false,
                                                  "type": "uint256",
                                                  "type_conversion": true
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_uint8",
                                                          "typeString": "uint8"
                                                        }
                                                      ],
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "type": "type(uint256)"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "name": "uint"
                                                        },
                                                        "id": 2015,
                                                        "name": "ElementaryTypeName",
                                                        "src": "10015:4:7"
                                                      }
                                                    ],
                                                    "id": 2016,
                                                    "name": "ElementaryTypeNameExpression",
                                                    "src": "10015:4:7"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "isStructConstructorCall": false,
                                                      "lValueRequested": false,
                                                      "names": [
                                                        null
                                                      ],
                                                      "tryCall": false,
                                                      "type": "uint8",
                                                      "type_conversion": true
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": [
                                                            {
                                                              "typeIdentifier": "t_bytes1",
                                                              "typeString": "bytes1"
                                                            }
                                                          ],
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "type": "type(uint8)"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "name": "uint8"
                                                            },
                                                            "id": 2017,
                                                            "name": "ElementaryTypeName",
                                                            "src": "10020:5:7"
                                                          }
                                                        ],
                                                        "id": 2018,
                                                        "name": "ElementaryTypeNameExpression",
                                                        "src": "10020:5:7"
                                                      },
                                                      {
                                                        "attributes": {
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 1994,
                                                          "type": "bytes1",
                                                          "value": "char"
                                                        },
                                                        "id": 2019,
                                                        "name": "Identifier",
                                                        "src": "10026:4:7"
                                                      }
                                                    ],
                                                    "id": 2020,
                                                    "name": "FunctionCall",
                                                    "src": "10020:11:7"
                                                  }
                                                ],
                                                "id": 2021,
                                                "name": "FunctionCall",
                                                "src": "10015:17:7"
                                              },
                                              {
                                                "attributes": {
                                                  "hexvalue": "30783330",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "token": "number",
                                                  "type": "int_const 48",
                                                  "value": "0x30"
                                                },
                                                "id": 2022,
                                                "name": "Literal",
                                                "src": "10035:4:7"
                                              }
                                            ],
                                            "id": 2023,
                                            "name": "BinaryOperation",
                                            "src": "10015:24:7"
                                          }
                                        ],
                                        "id": 2024,
                                        "name": "IndexAccess",
                                        "src": "10000:40:7"
                                      }
                                    ],
                                    "id": 2025,
                                    "name": "FunctionCall",
                                    "src": "9994:47:7"
                                  }
                                ],
                                "id": 2026,
                                "name": "Assignment",
                                "src": "9984:57:7"
                              }
                            ],
                            "id": 2027,
                            "name": "ExpressionStatement",
                            "src": "9984:57:7"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        -18,
                                        -18
                                      ],
                                      "referencedDeclaration": -18,
                                      "type": "function (bool) pure",
                                      "value": "require"
                                    },
                                    "id": 2028,
                                    "name": "Identifier",
                                    "src": "10055:7:7"
                                  },
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "<=",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1981,
                                          "type": "uint8",
                                          "value": "decoded"
                                        },
                                        "id": 2029,
                                        "name": "Identifier",
                                        "src": "10063:7:7"
                                      },
                                      {
                                        "attributes": {
                                          "hexvalue": "30783230",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "token": "number",
                                          "type": "int_const 32",
                                          "value": "0x20"
                                        },
                                        "id": 2030,
                                        "name": "Literal",
                                        "src": "10074:4:7"
                                      }
                                    ],
                                    "id": 2031,
                                    "name": "BinaryOperation",
                                    "src": "10063:15:7"
                                  }
                                ],
                                "id": 2032,
                                "name": "FunctionCall",
                                "src": "10055:24:7"
                              }
                            ],
                            "id": 2033,
                            "name": "ExpressionStatement",
                            "src": "10055:24:7"
                          },
                          {
                            "attributes": {},
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1984,
                                      "type": "uint256",
                                      "value": "i"
                                    },
                                    "id": 2034,
                                    "name": "Identifier",
                                    "src": "10096:1:7"
                                  },
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1965,
                                          "type": "uint256",
                                          "value": "len"
                                        },
                                        "id": 2035,
                                        "name": "Identifier",
                                        "src": "10101:3:7"
                                      },
                                      {
                                        "attributes": {
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 2036,
                                        "name": "Literal",
                                        "src": "10107:1:7"
                                      }
                                    ],
                                    "id": 2037,
                                    "name": "BinaryOperation",
                                    "src": "10101:7:7"
                                  }
                                ],
                                "id": 2038,
                                "name": "BinaryOperation",
                                "src": "10096:12:7"
                              },
                              {
                                "children": [
                                  {
                                    "id": 2039,
                                    "name": "Break",
                                    "src": "10128:5:7"
                                  }
                                ],
                                "id": 2040,
                                "name": "Block",
                                "src": "10110:38:7"
                              }
                            ],
                            "id": 2041,
                            "name": "IfStatement",
                            "src": "10093:55:7"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1977,
                                      "type": "uint256",
                                      "value": "ret"
                                    },
                                    "id": 2042,
                                    "name": "Identifier",
                                    "src": "10161:3:7"
                                  },
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "|",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "<<",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 1977,
                                                  "type": "uint256",
                                                  "value": "ret"
                                                },
                                                "id": 2043,
                                                "name": "Identifier",
                                                "src": "10168:3:7"
                                              },
                                              {
                                                "attributes": {
                                                  "hexvalue": "35",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "token": "number",
                                                  "type": "int_const 5",
                                                  "value": "5"
                                                },
                                                "id": 2044,
                                                "name": "Literal",
                                                "src": "10175:1:7"
                                              }
                                            ],
                                            "id": 2045,
                                            "name": "BinaryOperation",
                                            "src": "10168:8:7"
                                          }
                                        ],
                                        "id": 2046,
                                        "name": "TupleExpression",
                                        "src": "10167:10:7"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1981,
                                          "type": "uint8",
                                          "value": "decoded"
                                        },
                                        "id": 2047,
                                        "name": "Identifier",
                                        "src": "10180:7:7"
                                      }
                                    ],
                                    "id": 2048,
                                    "name": "BinaryOperation",
                                    "src": "10167:20:7"
                                  }
                                ],
                                "id": 2049,
                                "name": "Assignment",
                                "src": "10161:26:7"
                              }
                            ],
                            "id": 2050,
                            "name": "ExpressionStatement",
                            "src": "10161:26:7"
                          }
                        ],
                        "id": 2051,
                        "name": "Block",
                        "src": "9878:320:7"
                      }
                    ],
                    "id": 2052,
                    "name": "ForStatement",
                    "src": "9848:350:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2054
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "bitlen",
                          "scope": 2181,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 2053,
                            "name": "ElementaryTypeName",
                            "src": "10208:4:7"
                          }
                        ],
                        "id": 2054,
                        "name": "VariableDeclaration",
                        "src": "10208:11:7"
                      },
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "*",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1965,
                              "type": "uint256",
                              "value": "len"
                            },
                            "id": 2055,
                            "name": "Identifier",
                            "src": "10222:3:7"
                          },
                          {
                            "attributes": {
                              "hexvalue": "35",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 5",
                              "value": "5"
                            },
                            "id": 2056,
                            "name": "Literal",
                            "src": "10228:1:7"
                          }
                        ],
                        "id": 2057,
                        "name": "BinaryOperation",
                        "src": "10222:7:7"
                      }
                    ],
                    "id": 2058,
                    "name": "VariableDeclarationStatement",
                    "src": "10208:21:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "%",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1965,
                                  "type": "uint256",
                                  "value": "len"
                                },
                                "id": 2059,
                                "name": "Identifier",
                                "src": "10242:3:7"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "38",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 8",
                                  "value": "8"
                                },
                                "id": 2060,
                                "name": "Literal",
                                "src": "10248:1:7"
                              }
                            ],
                            "id": 2061,
                            "name": "BinaryOperation",
                            "src": "10242:7:7"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 2062,
                            "name": "Literal",
                            "src": "10253:1:7"
                          }
                        ],
                        "id": 2063,
                        "name": "BinaryOperation",
                        "src": "10242:12:7"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1977,
                                      "type": "uint256",
                                      "value": "ret"
                                    },
                                    "id": 2064,
                                    "name": "Identifier",
                                    "src": "10322:3:7"
                                  },
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "|",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "<<",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 1977,
                                                  "type": "uint256",
                                                  "value": "ret"
                                                },
                                                "id": 2065,
                                                "name": "Identifier",
                                                "src": "10329:3:7"
                                              },
                                              {
                                                "attributes": {
                                                  "hexvalue": "35",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "token": "number",
                                                  "type": "int_const 5",
                                                  "value": "5"
                                                },
                                                "id": 2066,
                                                "name": "Literal",
                                                "src": "10336:1:7"
                                              }
                                            ],
                                            "id": 2067,
                                            "name": "BinaryOperation",
                                            "src": "10329:8:7"
                                          }
                                        ],
                                        "id": 2068,
                                        "name": "TupleExpression",
                                        "src": "10328:10:7"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1981,
                                          "type": "uint8",
                                          "value": "decoded"
                                        },
                                        "id": 2069,
                                        "name": "Identifier",
                                        "src": "10341:7:7"
                                      }
                                    ],
                                    "id": 2070,
                                    "name": "BinaryOperation",
                                    "src": "10328:20:7"
                                  }
                                ],
                                "id": 2071,
                                "name": "Assignment",
                                "src": "10322:26:7"
                              }
                            ],
                            "id": 2072,
                            "name": "ExpressionStatement",
                            "src": "10322:26:7"
                          }
                        ],
                        "id": 2073,
                        "name": "Block",
                        "src": "10256:103:7"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "%",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1965,
                                      "type": "uint256",
                                      "value": "len"
                                    },
                                    "id": 2074,
                                    "name": "Identifier",
                                    "src": "10368:3:7"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "38",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 8",
                                      "value": "8"
                                    },
                                    "id": 2075,
                                    "name": "Literal",
                                    "src": "10374:1:7"
                                  }
                                ],
                                "id": 2076,
                                "name": "BinaryOperation",
                                "src": "10368:7:7"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "32",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 2",
                                  "value": "2"
                                },
                                "id": 2077,
                                "name": "Literal",
                                "src": "10379:1:7"
                              }
                            ],
                            "id": 2078,
                            "name": "BinaryOperation",
                            "src": "10368:12:7"
                          },
                          {
                            "children": [
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "=",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1977,
                                          "type": "uint256",
                                          "value": "ret"
                                        },
                                        "id": 2079,
                                        "name": "Identifier",
                                        "src": "10441:3:7"
                                      },
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "|",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "<<",
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 1977,
                                                      "type": "uint256",
                                                      "value": "ret"
                                                    },
                                                    "id": 2080,
                                                    "name": "Identifier",
                                                    "src": "10448:3:7"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "hexvalue": "33",
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "token": "number",
                                                      "type": "int_const 3",
                                                      "value": "3"
                                                    },
                                                    "id": 2081,
                                                    "name": "Literal",
                                                    "src": "10455:1:7"
                                                  }
                                                ],
                                                "id": 2082,
                                                "name": "BinaryOperation",
                                                "src": "10448:8:7"
                                              }
                                            ],
                                            "id": 2083,
                                            "name": "TupleExpression",
                                            "src": "10447:10:7"
                                          },
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "uint8"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": ">>",
                                                  "type": "uint8"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 1981,
                                                      "type": "uint8",
                                                      "value": "decoded"
                                                    },
                                                    "id": 2084,
                                                    "name": "Identifier",
                                                    "src": "10461:7:7"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "hexvalue": "32",
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "token": "number",
                                                      "type": "int_const 2",
                                                      "value": "2"
                                                    },
                                                    "id": 2085,
                                                    "name": "Literal",
                                                    "src": "10472:1:7"
                                                  }
                                                ],
                                                "id": 2086,
                                                "name": "BinaryOperation",
                                                "src": "10461:12:7"
                                              }
                                            ],
                                            "id": 2087,
                                            "name": "TupleExpression",
                                            "src": "10460:14:7"
                                          }
                                        ],
                                        "id": 2088,
                                        "name": "BinaryOperation",
                                        "src": "10447:27:7"
                                      }
                                    ],
                                    "id": 2089,
                                    "name": "Assignment",
                                    "src": "10441:33:7"
                                  }
                                ],
                                "id": 2090,
                                "name": "ExpressionStatement",
                                "src": "10441:33:7"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-=",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2054,
                                          "type": "uint256",
                                          "value": "bitlen"
                                        },
                                        "id": 2091,
                                        "name": "Identifier",
                                        "src": "10488:6:7"
                                      },
                                      {
                                        "attributes": {
                                          "hexvalue": "32",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "token": "number",
                                          "type": "int_const 2",
                                          "value": "2"
                                        },
                                        "id": 2092,
                                        "name": "Literal",
                                        "src": "10498:1:7"
                                      }
                                    ],
                                    "id": 2093,
                                    "name": "Assignment",
                                    "src": "10488:11:7"
                                  }
                                ],
                                "id": 2094,
                                "name": "ExpressionStatement",
                                "src": "10488:11:7"
                              }
                            ],
                            "id": 2095,
                            "name": "Block",
                            "src": "10382:128:7"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "%",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1965,
                                          "type": "uint256",
                                          "value": "len"
                                        },
                                        "id": 2096,
                                        "name": "Identifier",
                                        "src": "10519:3:7"
                                      },
                                      {
                                        "attributes": {
                                          "hexvalue": "38",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "token": "number",
                                          "type": "int_const 8",
                                          "value": "8"
                                        },
                                        "id": 2097,
                                        "name": "Literal",
                                        "src": "10525:1:7"
                                      }
                                    ],
                                    "id": 2098,
                                    "name": "BinaryOperation",
                                    "src": "10519:7:7"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "34",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 4",
                                      "value": "4"
                                    },
                                    "id": 2099,
                                    "name": "Literal",
                                    "src": "10530:1:7"
                                  }
                                ],
                                "id": 2100,
                                "name": "BinaryOperation",
                                "src": "10519:12:7"
                              },
                              {
                                "children": [
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "=",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1977,
                                              "type": "uint256",
                                              "value": "ret"
                                            },
                                            "id": 2101,
                                            "name": "Identifier",
                                            "src": "10594:3:7"
                                          },
                                          {
                                            "attributes": {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "|",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "operator": "<<",
                                                      "type": "uint256"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 1977,
                                                          "type": "uint256",
                                                          "value": "ret"
                                                        },
                                                        "id": 2102,
                                                        "name": "Identifier",
                                                        "src": "10601:3:7"
                                                      },
                                                      {
                                                        "attributes": {
                                                          "hexvalue": "31",
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "token": "number",
                                                          "type": "int_const 1",
                                                          "value": "1"
                                                        },
                                                        "id": 2103,
                                                        "name": "Literal",
                                                        "src": "10608:1:7"
                                                      }
                                                    ],
                                                    "id": 2104,
                                                    "name": "BinaryOperation",
                                                    "src": "10601:8:7"
                                                  }
                                                ],
                                                "id": 2105,
                                                "name": "TupleExpression",
                                                "src": "10600:10:7"
                                              },
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "type": "uint8"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint8",
                                                        "typeString": "uint8"
                                                      },
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "operator": ">>",
                                                      "type": "uint8"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 1981,
                                                          "type": "uint8",
                                                          "value": "decoded"
                                                        },
                                                        "id": 2106,
                                                        "name": "Identifier",
                                                        "src": "10614:7:7"
                                                      },
                                                      {
                                                        "attributes": {
                                                          "hexvalue": "34",
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "token": "number",
                                                          "type": "int_const 4",
                                                          "value": "4"
                                                        },
                                                        "id": 2107,
                                                        "name": "Literal",
                                                        "src": "10625:1:7"
                                                      }
                                                    ],
                                                    "id": 2108,
                                                    "name": "BinaryOperation",
                                                    "src": "10614:12:7"
                                                  }
                                                ],
                                                "id": 2109,
                                                "name": "TupleExpression",
                                                "src": "10613:14:7"
                                              }
                                            ],
                                            "id": 2110,
                                            "name": "BinaryOperation",
                                            "src": "10600:27:7"
                                          }
                                        ],
                                        "id": 2111,
                                        "name": "Assignment",
                                        "src": "10594:33:7"
                                      }
                                    ],
                                    "id": 2112,
                                    "name": "ExpressionStatement",
                                    "src": "10594:33:7"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "-=",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2054,
                                              "type": "uint256",
                                              "value": "bitlen"
                                            },
                                            "id": 2113,
                                            "name": "Identifier",
                                            "src": "10641:6:7"
                                          },
                                          {
                                            "attributes": {
                                              "hexvalue": "34",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "token": "number",
                                              "type": "int_const 4",
                                              "value": "4"
                                            },
                                            "id": 2114,
                                            "name": "Literal",
                                            "src": "10651:1:7"
                                          }
                                        ],
                                        "id": 2115,
                                        "name": "Assignment",
                                        "src": "10641:11:7"
                                      }
                                    ],
                                    "id": 2116,
                                    "name": "ExpressionStatement",
                                    "src": "10641:11:7"
                                  }
                                ],
                                "id": 2117,
                                "name": "Block",
                                "src": "10533:130:7"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "==",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "%",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1965,
                                              "type": "uint256",
                                              "value": "len"
                                            },
                                            "id": 2118,
                                            "name": "Identifier",
                                            "src": "10672:3:7"
                                          },
                                          {
                                            "attributes": {
                                              "hexvalue": "38",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "token": "number",
                                              "type": "int_const 8",
                                              "value": "8"
                                            },
                                            "id": 2119,
                                            "name": "Literal",
                                            "src": "10678:1:7"
                                          }
                                        ],
                                        "id": 2120,
                                        "name": "BinaryOperation",
                                        "src": "10672:7:7"
                                      },
                                      {
                                        "attributes": {
                                          "hexvalue": "35",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "token": "number",
                                          "type": "int_const 5",
                                          "value": "5"
                                        },
                                        "id": 2121,
                                        "name": "Literal",
                                        "src": "10683:1:7"
                                      }
                                    ],
                                    "id": 2122,
                                    "name": "BinaryOperation",
                                    "src": "10672:12:7"
                                  },
                                  {
                                    "children": [
                                      {
                                        "children": [
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "=",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 1977,
                                                  "type": "uint256",
                                                  "value": "ret"
                                                },
                                                "id": 2123,
                                                "name": "Identifier",
                                                "src": "10747:3:7"
                                              },
                                              {
                                                "attributes": {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "|",
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "isConstant": false,
                                                      "isInlineArray": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "type": "uint256"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          },
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "operator": "<<",
                                                          "type": "uint256"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "overloadedDeclarations": [
                                                                null
                                                              ],
                                                              "referencedDeclaration": 1977,
                                                              "type": "uint256",
                                                              "value": "ret"
                                                            },
                                                            "id": 2124,
                                                            "name": "Identifier",
                                                            "src": "10754:3:7"
                                                          },
                                                          {
                                                            "attributes": {
                                                              "hexvalue": "34",
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": true,
                                                              "lValueRequested": false,
                                                              "token": "number",
                                                              "type": "int_const 4",
                                                              "value": "4"
                                                            },
                                                            "id": 2125,
                                                            "name": "Literal",
                                                            "src": "10761:1:7"
                                                          }
                                                        ],
                                                        "id": 2126,
                                                        "name": "BinaryOperation",
                                                        "src": "10754:8:7"
                                                      }
                                                    ],
                                                    "id": 2127,
                                                    "name": "TupleExpression",
                                                    "src": "10753:10:7"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "isConstant": false,
                                                      "isInlineArray": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "type": "uint8"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "commonType": {
                                                            "typeIdentifier": "t_uint8",
                                                            "typeString": "uint8"
                                                          },
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "operator": ">>",
                                                          "type": "uint8"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "overloadedDeclarations": [
                                                                null
                                                              ],
                                                              "referencedDeclaration": 1981,
                                                              "type": "uint8",
                                                              "value": "decoded"
                                                            },
                                                            "id": 2128,
                                                            "name": "Identifier",
                                                            "src": "10767:7:7"
                                                          },
                                                          {
                                                            "attributes": {
                                                              "hexvalue": "31",
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": true,
                                                              "lValueRequested": false,
                                                              "token": "number",
                                                              "type": "int_const 1",
                                                              "value": "1"
                                                            },
                                                            "id": 2129,
                                                            "name": "Literal",
                                                            "src": "10778:1:7"
                                                          }
                                                        ],
                                                        "id": 2130,
                                                        "name": "BinaryOperation",
                                                        "src": "10767:12:7"
                                                      }
                                                    ],
                                                    "id": 2131,
                                                    "name": "TupleExpression",
                                                    "src": "10766:14:7"
                                                  }
                                                ],
                                                "id": 2132,
                                                "name": "BinaryOperation",
                                                "src": "10753:27:7"
                                              }
                                            ],
                                            "id": 2133,
                                            "name": "Assignment",
                                            "src": "10747:33:7"
                                          }
                                        ],
                                        "id": 2134,
                                        "name": "ExpressionStatement",
                                        "src": "10747:33:7"
                                      },
                                      {
                                        "children": [
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "-=",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 2054,
                                                  "type": "uint256",
                                                  "value": "bitlen"
                                                },
                                                "id": 2135,
                                                "name": "Identifier",
                                                "src": "10794:6:7"
                                              },
                                              {
                                                "attributes": {
                                                  "hexvalue": "31",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "token": "number",
                                                  "type": "int_const 1",
                                                  "value": "1"
                                                },
                                                "id": 2136,
                                                "name": "Literal",
                                                "src": "10804:1:7"
                                              }
                                            ],
                                            "id": 2137,
                                            "name": "Assignment",
                                            "src": "10794:11:7"
                                          }
                                        ],
                                        "id": 2138,
                                        "name": "ExpressionStatement",
                                        "src": "10794:11:7"
                                      }
                                    ],
                                    "id": 2139,
                                    "name": "Block",
                                    "src": "10686:130:7"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "==",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "%",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 1965,
                                                  "type": "uint256",
                                                  "value": "len"
                                                },
                                                "id": 2140,
                                                "name": "Identifier",
                                                "src": "10825:3:7"
                                              },
                                              {
                                                "attributes": {
                                                  "hexvalue": "38",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "token": "number",
                                                  "type": "int_const 8",
                                                  "value": "8"
                                                },
                                                "id": 2141,
                                                "name": "Literal",
                                                "src": "10831:1:7"
                                              }
                                            ],
                                            "id": 2142,
                                            "name": "BinaryOperation",
                                            "src": "10825:7:7"
                                          },
                                          {
                                            "attributes": {
                                              "hexvalue": "37",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "token": "number",
                                              "type": "int_const 7",
                                              "value": "7"
                                            },
                                            "id": 2143,
                                            "name": "Literal",
                                            "src": "10836:1:7"
                                          }
                                        ],
                                        "id": 2144,
                                        "name": "BinaryOperation",
                                        "src": "10825:12:7"
                                      },
                                      {
                                        "children": [
                                          {
                                            "children": [
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "=",
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 1977,
                                                      "type": "uint256",
                                                      "value": "ret"
                                                    },
                                                    "id": 2145,
                                                    "name": "Identifier",
                                                    "src": "10901:3:7"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "operator": "|",
                                                      "type": "uint256"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "isConstant": false,
                                                          "isInlineArray": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "type": "uint256"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              },
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "operator": "<<",
                                                              "type": "uint256"
                                                            },
                                                            "children": [
                                                              {
                                                                "attributes": {
                                                                  "overloadedDeclarations": [
                                                                    null
                                                                  ],
                                                                  "referencedDeclaration": 1977,
                                                                  "type": "uint256",
                                                                  "value": "ret"
                                                                },
                                                                "id": 2146,
                                                                "name": "Identifier",
                                                                "src": "10908:3:7"
                                                              },
                                                              {
                                                                "attributes": {
                                                                  "hexvalue": "32",
                                                                  "isConstant": false,
                                                                  "isLValue": false,
                                                                  "isPure": true,
                                                                  "lValueRequested": false,
                                                                  "token": "number",
                                                                  "type": "int_const 2",
                                                                  "value": "2"
                                                                },
                                                                "id": 2147,
                                                                "name": "Literal",
                                                                "src": "10915:1:7"
                                                              }
                                                            ],
                                                            "id": 2148,
                                                            "name": "BinaryOperation",
                                                            "src": "10908:8:7"
                                                          }
                                                        ],
                                                        "id": 2149,
                                                        "name": "TupleExpression",
                                                        "src": "10907:10:7"
                                                      },
                                                      {
                                                        "attributes": {
                                                          "isConstant": false,
                                                          "isInlineArray": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "type": "uint8"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "commonType": {
                                                                "typeIdentifier": "t_uint8",
                                                                "typeString": "uint8"
                                                              },
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "operator": ">>",
                                                              "type": "uint8"
                                                            },
                                                            "children": [
                                                              {
                                                                "attributes": {
                                                                  "overloadedDeclarations": [
                                                                    null
                                                                  ],
                                                                  "referencedDeclaration": 1981,
                                                                  "type": "uint8",
                                                                  "value": "decoded"
                                                                },
                                                                "id": 2150,
                                                                "name": "Identifier",
                                                                "src": "10921:7:7"
                                                              },
                                                              {
                                                                "attributes": {
                                                                  "hexvalue": "33",
                                                                  "isConstant": false,
                                                                  "isLValue": false,
                                                                  "isPure": true,
                                                                  "lValueRequested": false,
                                                                  "token": "number",
                                                                  "type": "int_const 3",
                                                                  "value": "3"
                                                                },
                                                                "id": 2151,
                                                                "name": "Literal",
                                                                "src": "10932:1:7"
                                                              }
                                                            ],
                                                            "id": 2152,
                                                            "name": "BinaryOperation",
                                                            "src": "10921:12:7"
                                                          }
                                                        ],
                                                        "id": 2153,
                                                        "name": "TupleExpression",
                                                        "src": "10920:14:7"
                                                      }
                                                    ],
                                                    "id": 2154,
                                                    "name": "BinaryOperation",
                                                    "src": "10907:27:7"
                                                  }
                                                ],
                                                "id": 2155,
                                                "name": "Assignment",
                                                "src": "10901:33:7"
                                              }
                                            ],
                                            "id": 2156,
                                            "name": "ExpressionStatement",
                                            "src": "10901:33:7"
                                          },
                                          {
                                            "children": [
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "-=",
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 2054,
                                                      "type": "uint256",
                                                      "value": "bitlen"
                                                    },
                                                    "id": 2157,
                                                    "name": "Identifier",
                                                    "src": "10948:6:7"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "hexvalue": "33",
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "token": "number",
                                                      "type": "int_const 3",
                                                      "value": "3"
                                                    },
                                                    "id": 2158,
                                                    "name": "Literal",
                                                    "src": "10958:1:7"
                                                  }
                                                ],
                                                "id": 2159,
                                                "name": "Assignment",
                                                "src": "10948:11:7"
                                              }
                                            ],
                                            "id": 2160,
                                            "name": "ExpressionStatement",
                                            "src": "10948:11:7"
                                          }
                                        ],
                                        "id": 2161,
                                        "name": "Block",
                                        "src": "10839:131:7"
                                      },
                                      {
                                        "children": [
                                          {
                                            "children": [
                                              {
                                                "attributes": {
                                                  "arguments": [
                                                    null
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "tryCall": false,
                                                  "type": "tuple()",
                                                  "type_conversion": false
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        null
                                                      ],
                                                      "overloadedDeclarations": [
                                                        -19,
                                                        -19
                                                      ],
                                                      "referencedDeclaration": -19,
                                                      "type": "function () pure",
                                                      "value": "revert"
                                                    },
                                                    "id": 2162,
                                                    "name": "Identifier",
                                                    "src": "10990:6:7"
                                                  }
                                                ],
                                                "id": 2163,
                                                "name": "FunctionCall",
                                                "src": "10990:8:7"
                                              }
                                            ],
                                            "id": 2164,
                                            "name": "ExpressionStatement",
                                            "src": "10990:8:7"
                                          }
                                        ],
                                        "id": 2165,
                                        "name": "Block",
                                        "src": "10976:33:7"
                                      }
                                    ],
                                    "id": 2166,
                                    "name": "IfStatement",
                                    "src": "10822:187:7"
                                  }
                                ],
                                "id": 2167,
                                "name": "IfStatement",
                                "src": "10669:340:7"
                              }
                            ],
                            "id": 2168,
                            "name": "IfStatement",
                            "src": "10516:493:7"
                          }
                        ],
                        "id": 2169,
                        "name": "IfStatement",
                        "src": "10365:644:7"
                      }
                    ],
                    "id": 2170,
                    "name": "IfStatement",
                    "src": "10239:770:7"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 1969
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bytes32",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(bytes32)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "bytes32"
                                },
                                "id": 2171,
                                "name": "ElementaryTypeName",
                                "src": "11026:7:7"
                              }
                            ],
                            "id": 2172,
                            "name": "ElementaryTypeNameExpression",
                            "src": "11026:7:7"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<<",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1977,
                                  "type": "uint256",
                                  "value": "ret"
                                },
                                "id": 2173,
                                "name": "Identifier",
                                "src": "11034:3:7"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "hexvalue": "323536",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "token": "number",
                                          "type": "int_const 256",
                                          "value": "256"
                                        },
                                        "id": 2174,
                                        "name": "Literal",
                                        "src": "11042:3:7"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2054,
                                          "type": "uint256",
                                          "value": "bitlen"
                                        },
                                        "id": 2175,
                                        "name": "Identifier",
                                        "src": "11048:6:7"
                                      }
                                    ],
                                    "id": 2176,
                                    "name": "BinaryOperation",
                                    "src": "11042:12:7"
                                  }
                                ],
                                "id": 2177,
                                "name": "TupleExpression",
                                "src": "11041:14:7"
                              }
                            ],
                            "id": 2178,
                            "name": "BinaryOperation",
                            "src": "11034:21:7"
                          }
                        ],
                        "id": 2179,
                        "name": "FunctionCall",
                        "src": "11026:30:7"
                      }
                    ],
                    "id": 2180,
                    "name": "Return",
                    "src": "11019:37:7"
                  }
                ],
                "id": 2181,
                "name": "Block",
                "src": "9764:1299:7"
              }
            ],
            "id": 2182,
            "name": "FunctionDefinition",
            "src": "9665:1398:7"
          }
        ],
        "id": 2183,
        "name": "ContractDefinition",
        "src": "25:11040:7"
      }
    ],
    "id": 2184,
    "name": "SourceUnit",
    "src": "0:11066:7"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.4+commit.3f05b770.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.3",
  "updatedAt": "2021-01-21T03:26:26.158Z",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}