{
  "contractName": "StorageAccessible",
  "sourceName": "@gnosis.pm/safe-contracts/contracts/common/StorageAccessible.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "offset",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "getStorageAt",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "targetContract",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "calldataPayload",
          "type": "bytes"
        }
      ],
      "name": "simulateAndRevert",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50610305806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80635624b25b1461003b578063b4faba0914610064575b600080fd5b61004e610049366004610122565b610079565b60405161005b9190610144565b60405180910390f35b6100776100723660046101af565b6100ff565b005b60606000610088836020610295565b67ffffffffffffffff8111156100a0576100a0610199565b6040519080825280601f01601f1916602001820160405280156100ca576020820181803683370190505b50905060005b838110156100f75784810154602080830284010152806100ef816102b4565b9150506100d0565b509392505050565b600080825160208401855af480600052503d6020523d600060403e60403d016000fd5b6000806040838503121561013557600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561017157858101830151858201604001528201610155565b81811115610183576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156101c257600080fd5b82356001600160a01b03811681146101d957600080fd5b9150602083013567ffffffffffffffff808211156101f657600080fd5b818501915085601f83011261020a57600080fd5b81358181111561021c5761021c610199565b604051601f8201601f19908116603f0116810190838211818310171561024457610244610199565b8160405282815288602084870101111561025d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156102af576102af61027f565b500290565b60006000198214156102c8576102c861027f565b506001019056fea2646970667358221220e32cbe36c9c2007f0732a51885cedb505c5aaec95e0cfb2578ae1a5e7e26ddd664736f6c634300080a0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80635624b25b1461003b578063b4faba0914610064575b600080fd5b61004e610049366004610122565b610079565b60405161005b9190610144565b60405180910390f35b6100776100723660046101af565b6100ff565b005b60606000610088836020610295565b67ffffffffffffffff8111156100a0576100a0610199565b6040519080825280601f01601f1916602001820160405280156100ca576020820181803683370190505b50905060005b838110156100f75784810154602080830284010152806100ef816102b4565b9150506100d0565b509392505050565b600080825160208401855af480600052503d6020523d600060403e60403d016000fd5b6000806040838503121561013557600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561017157858101830151858201604001528201610155565b81811115610183576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156101c257600080fd5b82356001600160a01b03811681146101d957600080fd5b9150602083013567ffffffffffffffff808211156101f657600080fd5b818501915085601f83011261020a57600080fd5b81358181111561021c5761021c610199565b604051601f8201601f19908116603f0116810190838211818310171561024457610244610199565b8160405282815288602084870101111561025d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156102af576102af61027f565b500290565b60006000198214156102c8576102c861027f565b506001019056fea2646970667358221220e32cbe36c9c2007f0732a51885cedb505c5aaec95e0cfb2578ae1a5e7e26ddd664736f6c634300080a0033",
  "linkReferences": {},
  "deployedLinkReferences": {},
  "devdoc": {
    "kind": "dev",
    "methods": {
      "getStorageAt(uint256,uint256)": {
        "details": "Reads `length` bytes of storage in the currents contract",
        "params": {
          "length": "- the number of words (32 bytes) of data to read",
          "offset": "- the offset in the current contract's storage in words to start reading from"
        },
        "returns": {
          "_0": "the bytes that were read."
        }
      },
      "simulateAndRevert(address,bytes)": {
        "details": "Performs a delegetecall on a targetContract in the context of self. Internally reverts execution to avoid side effects (making it static). This method reverts with data equal to `abi.encode(bool(success), bytes(response))`. Specifically, the `returndata` after a call to this method will be: `success:bool || response.length:uint256 || response:bytes`.",
        "params": {
          "calldataPayload": "Calldata that should be sent to the target contract (encoded method name and arguments).",
          "targetContract": "Address of the contract containing the code to execute."
        }
      }
    },
    "title": "StorageAccessible - generic base contract that allows callers to access all internal storage.",
    "version": 1
  },
  "evm": {
    "bytecode": {
      "functionDebugData": {},
      "generatedSources": [],
      "linkReferences": {},
      "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x305 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5624B25B EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0xB4FABA09 EQ PUSH2 0x64 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x49 CALLDATASIZE PUSH1 0x4 PUSH2 0x122 JUMP JUMPDEST PUSH2 0x79 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x144 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x77 PUSH2 0x72 CALLDATASIZE PUSH1 0x4 PUSH2 0x1AF JUMP JUMPDEST PUSH2 0xFF JUMP JUMPDEST STOP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x88 DUP4 PUSH1 0x20 PUSH2 0x295 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xA0 JUMPI PUSH2 0xA0 PUSH2 0x199 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xCA JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF7 JUMPI DUP5 DUP2 ADD SLOAD PUSH1 0x20 DUP1 DUP4 MUL DUP5 ADD ADD MSTORE DUP1 PUSH2 0xEF DUP2 PUSH2 0x2B4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xD0 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD PUSH1 0x20 DUP5 ADD DUP6 GAS DELEGATECALL DUP1 PUSH1 0x0 MSTORE POP RETURNDATASIZE PUSH1 0x20 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x40 RETURNDATACOPY PUSH1 0x40 RETURNDATASIZE ADD PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x171 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x155 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x183 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x21C JUMPI PUSH2 0x21C PUSH2 0x199 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x244 JUMPI PUSH2 0x244 PUSH2 0x199 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x25D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2AF JUMPI PUSH2 0x2AF PUSH2 0x27F JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x2C8 JUMPI PUSH2 0x2C8 PUSH2 0x27F JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE3 0x2C 0xBE CALLDATASIZE 0xC9 0xC2 STOP PUSH32 0x732A51885CEDB505C5AAEC95E0CFB2578AE1A5E7E26DDD664736F6C63430008 EXP STOP CALLER ",
      "sourceMap": "315:1913:12:-:0;;;;;;;;;;;;;;;;;;;"
    },
    "deployedBytecode": {
      "functionDebugData": {
        "@getStorageAt_2137": {
          "entryPoint": 121,
          "id": 2137,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "@simulateAndRevert_2147": {
          "entryPoint": 255,
          "id": 2147,
          "parameterSlots": 2,
          "returnSlots": 0
        },
        "abi_decode_tuple_t_addresst_bytes_memory_ptr": {
          "entryPoint": 431,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 2
        },
        "abi_decode_tuple_t_uint256t_uint256": {
          "entryPoint": 290,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 2
        },
        "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed": {
          "entryPoint": 324,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "checked_mul_t_uint256": {
          "entryPoint": 661,
          "id": null,
          "parameterSlots": 2,
          "returnSlots": 1
        },
        "increment_t_uint256": {
          "entryPoint": 692,
          "id": null,
          "parameterSlots": 1,
          "returnSlots": 1
        },
        "panic_error_0x11": {
          "entryPoint": 639,
          "id": null,
          "parameterSlots": 0,
          "returnSlots": 0
        },
        "panic_error_0x41": {
          "entryPoint": 409,
          "id": null,
          "parameterSlots": 0,
          "returnSlots": 0
        }
      },
      "generatedSources": [
        {
          "ast": {
            "nodeType": "YulBlock",
            "src": "0:2541:86",
            "statements": [
              {
                "nodeType": "YulBlock",
                "src": "6:3:86",
                "statements": []
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "101:161:86",
                  "statements": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "147:16:86",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "156:1:86",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "159:1:86",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "149:6:86"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "149:12:86"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "149:12:86"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "dataEnd",
                                "nodeType": "YulIdentifier",
                                "src": "122:7:86"
                              },
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "131:9:86"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "118:3:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "118:23:86"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "143:2:86",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "114:3:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "114:32:86"
                      },
                      "nodeType": "YulIf",
                      "src": "111:52:86"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "172:33:86",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "195:9:86"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "182:12:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "182:23:86"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "172:6:86"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "214:42:86",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "241:9:86"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "252:2:86",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "237:3:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "237:18:86"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "224:12:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "224:32:86"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "214:6:86"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_decode_tuple_t_uint256t_uint256",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "59:9:86",
                    "type": ""
                  },
                  {
                    "name": "dataEnd",
                    "nodeType": "YulTypedName",
                    "src": "70:7:86",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "82:6:86",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "90:6:86",
                    "type": ""
                  }
                ],
                "src": "14:248:86"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "386:476:86",
                  "statements": [
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "396:12:86",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "406:2:86",
                        "type": "",
                        "value": "32"
                      },
                      "variables": [
                        {
                          "name": "_1",
                          "nodeType": "YulTypedName",
                          "src": "400:2:86",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "424:9:86"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "435:2:86"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "417:6:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "417:21:86"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "417:21:86"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "447:27:86",
                      "value": {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "467:6:86"
                          }
                        ],
                        "functionName": {
                          "name": "mload",
                          "nodeType": "YulIdentifier",
                          "src": "461:5:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "461:13:86"
                      },
                      "variables": [
                        {
                          "name": "length",
                          "nodeType": "YulTypedName",
                          "src": "451:6:86",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "494:9:86"
                              },
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "505:2:86"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "490:3:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "490:18:86"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "510:6:86"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "483:6:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "483:34:86"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "483:34:86"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "526:10:86",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "535:1:86",
                        "type": "",
                        "value": "0"
                      },
                      "variables": [
                        {
                          "name": "i",
                          "nodeType": "YulTypedName",
                          "src": "530:1:86",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "595:90:86",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "headStart",
                                          "nodeType": "YulIdentifier",
                                          "src": "624:9:86"
                                        },
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "635:1:86"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "620:3:86"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "620:17:86"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "639:2:86",
                                      "type": "",
                                      "value": "64"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "616:3:86"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "616:26:86"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "value0",
                                              "nodeType": "YulIdentifier",
                                              "src": "658:6:86"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "666:1:86"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "654:3:86"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "654:14:86"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "670:2:86"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "650:3:86"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "650:23:86"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "644:5:86"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "644:30:86"
                                }
                              ],
                              "functionName": {
                                "name": "mstore",
                                "nodeType": "YulIdentifier",
                                "src": "609:6:86"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "609:66:86"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "609:66:86"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "556:1:86"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "559:6:86"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "553:2:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "553:13:86"
                      },
                      "nodeType": "YulForLoop",
                      "post": {
                        "nodeType": "YulBlock",
                        "src": "567:19:86",
                        "statements": [
                          {
                            "nodeType": "YulAssignment",
                            "src": "569:15:86",
                            "value": {
                              "arguments": [
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "578:1:86"
                                },
                                {
                                  "name": "_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "581:2:86"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "574:3:86"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "574:10:86"
                            },
                            "variableNames": [
                              {
                                "name": "i",
                                "nodeType": "YulIdentifier",
                                "src": "569:1:86"
                              }
                            ]
                          }
                        ]
                      },
                      "pre": {
                        "nodeType": "YulBlock",
                        "src": "549:3:86",
                        "statements": []
                      },
                      "src": "545:140:86"
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "719:66:86",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "headStart",
                                          "nodeType": "YulIdentifier",
                                          "src": "748:9:86"
                                        },
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "759:6:86"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "744:3:86"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "744:22:86"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "768:2:86",
                                      "type": "",
                                      "value": "64"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "740:3:86"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "740:31:86"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "773:1:86",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "mstore",
                                "nodeType": "YulIdentifier",
                                "src": "733:6:86"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "733:42:86"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "733:42:86"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "700:1:86"
                          },
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "703:6:86"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "697:2:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "697:13:86"
                      },
                      "nodeType": "YulIf",
                      "src": "694:91:86"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "794:62:86",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "810:9:86"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "829:6:86"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "837:2:86",
                                        "type": "",
                                        "value": "31"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "825:3:86"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "825:15:86"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "846:2:86",
                                        "type": "",
                                        "value": "31"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "842:3:86"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "842:7:86"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "821:3:86"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "821:29:86"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "806:3:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "806:45:86"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "853:2:86",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "802:3:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "802:54:86"
                      },
                      "variableNames": [
                        {
                          "name": "tail",
                          "nodeType": "YulIdentifier",
                          "src": "794:4:86"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "355:9:86",
                    "type": ""
                  },
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "366:6:86",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "tail",
                    "nodeType": "YulTypedName",
                    "src": "377:4:86",
                    "type": ""
                  }
                ],
                "src": "267:595:86"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "899:95:86",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "916:1:86",
                            "type": "",
                            "value": "0"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "923:3:86",
                                "type": "",
                                "value": "224"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "928:10:86",
                                "type": "",
                                "value": "0x4e487b71"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "919:3:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "919:20:86"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "909:6:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "909:31:86"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "909:31:86"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "956:1:86",
                            "type": "",
                            "value": "4"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "959:4:86",
                            "type": "",
                            "value": "0x41"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "949:6:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "949:15:86"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "949:15:86"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "980:1:86",
                            "type": "",
                            "value": "0"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "983:4:86",
                            "type": "",
                            "value": "0x24"
                          }
                        ],
                        "functionName": {
                          "name": "revert",
                          "nodeType": "YulIdentifier",
                          "src": "973:6:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "973:15:86"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "973:15:86"
                    }
                  ]
                },
                "name": "panic_error_0x41",
                "nodeType": "YulFunctionDefinition",
                "src": "867:127:86"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "1095:999:86",
                  "statements": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "1141:16:86",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1150:1:86",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1153:1:86",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "1143:6:86"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1143:12:86"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "1143:12:86"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "dataEnd",
                                "nodeType": "YulIdentifier",
                                "src": "1116:7:86"
                              },
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1125:9:86"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "1112:3:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1112:23:86"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1137:2:86",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "1108:3:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1108:32:86"
                      },
                      "nodeType": "YulIf",
                      "src": "1105:52:86"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1166:36:86",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1192:9:86"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "1179:12:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1179:23:86"
                      },
                      "variables": [
                        {
                          "name": "value",
                          "nodeType": "YulTypedName",
                          "src": "1170:5:86",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "1265:16:86",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1274:1:86",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1277:1:86",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "1267:6:86"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1267:12:86"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "1267:12:86"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1224:5:86"
                              },
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1235:5:86"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1250:3:86",
                                            "type": "",
                                            "value": "160"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1255:1:86",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "1246:3:86"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1246:11:86"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1259:1:86",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1242:3:86"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1242:19:86"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "1231:3:86"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1231:31:86"
                              }
                            ],
                            "functionName": {
                              "name": "eq",
                              "nodeType": "YulIdentifier",
                              "src": "1221:2:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1221:42:86"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "1214:6:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1214:50:86"
                      },
                      "nodeType": "YulIf",
                      "src": "1211:70:86"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "1290:15:86",
                      "value": {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1300:5:86"
                      },
                      "variableNames": [
                        {
                          "name": "value0",
                          "nodeType": "YulIdentifier",
                          "src": "1290:6:86"
                        }
                      ]
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1314:46:86",
                      "value": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1345:9:86"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1356:2:86",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1341:3:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1341:18:86"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "1328:12:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1328:32:86"
                      },
                      "variables": [
                        {
                          "name": "offset",
                          "nodeType": "YulTypedName",
                          "src": "1318:6:86",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1369:28:86",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1379:18:86",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      },
                      "variables": [
                        {
                          "name": "_1",
                          "nodeType": "YulTypedName",
                          "src": "1373:2:86",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "1424:16:86",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1433:1:86",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1436:1:86",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "1426:6:86"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1426:12:86"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "1426:12:86"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "1412:6:86"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1420:2:86"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "1409:2:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1409:14:86"
                      },
                      "nodeType": "YulIf",
                      "src": "1406:34:86"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1449:32:86",
                      "value": {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1463:9:86"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "1474:6:86"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1459:3:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1459:22:86"
                      },
                      "variables": [
                        {
                          "name": "_2",
                          "nodeType": "YulTypedName",
                          "src": "1453:2:86",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "1529:16:86",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1538:1:86",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1541:1:86",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "1531:6:86"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1531:12:86"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "1531:12:86"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1508:2:86"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1512:4:86",
                                    "type": "",
                                    "value": "0x1f"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1504:3:86"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1504:13:86"
                              },
                              {
                                "name": "dataEnd",
                                "nodeType": "YulIdentifier",
                                "src": "1519:7:86"
                              }
                            ],
                            "functionName": {
                              "name": "slt",
                              "nodeType": "YulIdentifier",
                              "src": "1500:3:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1500:27:86"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "1493:6:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1493:35:86"
                      },
                      "nodeType": "YulIf",
                      "src": "1490:55:86"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1554:26:86",
                      "value": {
                        "arguments": [
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "1577:2:86"
                          }
                        ],
                        "functionName": {
                          "name": "calldataload",
                          "nodeType": "YulIdentifier",
                          "src": "1564:12:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1564:16:86"
                      },
                      "variables": [
                        {
                          "name": "_3",
                          "nodeType": "YulTypedName",
                          "src": "1558:2:86",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "1603:22:86",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [],
                              "functionName": {
                                "name": "panic_error_0x41",
                                "nodeType": "YulIdentifier",
                                "src": "1605:16:86"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1605:18:86"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "1605:18:86"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "_3",
                            "nodeType": "YulIdentifier",
                            "src": "1595:2:86"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1599:2:86"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "1592:2:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1592:10:86"
                      },
                      "nodeType": "YulIf",
                      "src": "1589:36:86"
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1634:17:86",
                      "value": {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1648:2:86",
                            "type": "",
                            "value": "31"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "1644:3:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1644:7:86"
                      },
                      "variables": [
                        {
                          "name": "_4",
                          "nodeType": "YulTypedName",
                          "src": "1638:2:86",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1660:23:86",
                      "value": {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1680:2:86",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "mload",
                          "nodeType": "YulIdentifier",
                          "src": "1674:5:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1674:9:86"
                      },
                      "variables": [
                        {
                          "name": "memPtr",
                          "nodeType": "YulTypedName",
                          "src": "1664:6:86",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "nodeType": "YulVariableDeclaration",
                      "src": "1692:71:86",
                      "value": {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "1714:6:86"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "1738:2:86"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1742:4:86",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1734:3:86"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1734:13:86"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "1749:2:86"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1730:3:86"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1730:22:86"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1754:2:86",
                                    "type": "",
                                    "value": "63"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1726:3:86"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1726:31:86"
                              },
                              {
                                "name": "_4",
                                "nodeType": "YulIdentifier",
                                "src": "1759:2:86"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "1722:3:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1722:40:86"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1710:3:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1710:53:86"
                      },
                      "variables": [
                        {
                          "name": "newFreePtr",
                          "nodeType": "YulTypedName",
                          "src": "1696:10:86",
                          "type": ""
                        }
                      ]
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "1822:22:86",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [],
                              "functionName": {
                                "name": "panic_error_0x41",
                                "nodeType": "YulIdentifier",
                                "src": "1824:16:86"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1824:18:86"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "1824:18:86"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "newFreePtr",
                                "nodeType": "YulIdentifier",
                                "src": "1781:10:86"
                              },
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "1793:2:86"
                              }
                            ],
                            "functionName": {
                              "name": "gt",
                              "nodeType": "YulIdentifier",
                              "src": "1778:2:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1778:18:86"
                          },
                          {
                            "arguments": [
                              {
                                "name": "newFreePtr",
                                "nodeType": "YulIdentifier",
                                "src": "1801:10:86"
                              },
                              {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "1813:6:86"
                              }
                            ],
                            "functionName": {
                              "name": "lt",
                              "nodeType": "YulIdentifier",
                              "src": "1798:2:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1798:22:86"
                          }
                        ],
                        "functionName": {
                          "name": "or",
                          "nodeType": "YulIdentifier",
                          "src": "1775:2:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1775:46:86"
                      },
                      "nodeType": "YulIf",
                      "src": "1772:72:86"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1860:2:86",
                            "type": "",
                            "value": "64"
                          },
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "1864:10:86"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "1853:6:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1853:22:86"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "1853:22:86"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "1891:6:86"
                          },
                          {
                            "name": "_3",
                            "nodeType": "YulIdentifier",
                            "src": "1899:2:86"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "1884:6:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1884:18:86"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "1884:18:86"
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "1948:16:86",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1957:1:86",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1960:1:86",
                                  "type": "",
                                  "value": "0"
                                }
                              ],
                              "functionName": {
                                "name": "revert",
                                "nodeType": "YulIdentifier",
                                "src": "1950:6:86"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1950:12:86"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "1950:12:86"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1925:2:86"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1929:2:86"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1921:3:86"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1921:11:86"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1934:2:86",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1917:3:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1917:20:86"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1939:7:86"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "1914:2:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1914:33:86"
                      },
                      "nodeType": "YulIf",
                      "src": "1911:53:86"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "1990:6:86"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1998:2:86",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1986:3:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1986:15:86"
                          },
                          {
                            "arguments": [
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "2007:2:86"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2011:2:86",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2003:3:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2003:11:86"
                          },
                          {
                            "name": "_3",
                            "nodeType": "YulIdentifier",
                            "src": "2016:2:86"
                          }
                        ],
                        "functionName": {
                          "name": "calldatacopy",
                          "nodeType": "YulIdentifier",
                          "src": "1973:12:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1973:46:86"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "1973:46:86"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "2043:6:86"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2051:2:86"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2039:3:86"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2039:15:86"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2056:2:86",
                                "type": "",
                                "value": "32"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2035:3:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2035:24:86"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2061:1:86",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "2028:6:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2028:35:86"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "2028:35:86"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2072:16:86",
                      "value": {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "2082:6:86"
                      },
                      "variableNames": [
                        {
                          "name": "value1",
                          "nodeType": "YulIdentifier",
                          "src": "2072:6:86"
                        }
                      ]
                    }
                  ]
                },
                "name": "abi_decode_tuple_t_addresst_bytes_memory_ptr",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "headStart",
                    "nodeType": "YulTypedName",
                    "src": "1053:9:86",
                    "type": ""
                  },
                  {
                    "name": "dataEnd",
                    "nodeType": "YulTypedName",
                    "src": "1064:7:86",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "value0",
                    "nodeType": "YulTypedName",
                    "src": "1076:6:86",
                    "type": ""
                  },
                  {
                    "name": "value1",
                    "nodeType": "YulTypedName",
                    "src": "1084:6:86",
                    "type": ""
                  }
                ],
                "src": "999:1095:86"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "2131:95:86",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2148:1:86",
                            "type": "",
                            "value": "0"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2155:3:86",
                                "type": "",
                                "value": "224"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2160:10:86",
                                "type": "",
                                "value": "0x4e487b71"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "2151:3:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2151:20:86"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "2141:6:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2141:31:86"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "2141:31:86"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2188:1:86",
                            "type": "",
                            "value": "4"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2191:4:86",
                            "type": "",
                            "value": "0x11"
                          }
                        ],
                        "functionName": {
                          "name": "mstore",
                          "nodeType": "YulIdentifier",
                          "src": "2181:6:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2181:15:86"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "2181:15:86"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2212:1:86",
                            "type": "",
                            "value": "0"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2215:4:86",
                            "type": "",
                            "value": "0x24"
                          }
                        ],
                        "functionName": {
                          "name": "revert",
                          "nodeType": "YulIdentifier",
                          "src": "2205:6:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2205:15:86"
                      },
                      "nodeType": "YulExpressionStatement",
                      "src": "2205:15:86"
                    }
                  ]
                },
                "name": "panic_error_0x11",
                "nodeType": "YulFunctionDefinition",
                "src": "2099:127:86"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "2283:116:86",
                  "statements": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "2342:22:86",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [],
                              "functionName": {
                                "name": "panic_error_0x11",
                                "nodeType": "YulIdentifier",
                                "src": "2344:16:86"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2344:18:86"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "2344:18:86"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "2314:1:86"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2307:6:86"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2307:9:86"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "2300:6:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2300:17:86"
                          },
                          {
                            "arguments": [
                              {
                                "name": "y",
                                "nodeType": "YulIdentifier",
                                "src": "2322:1:86"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2333:1:86",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "2329:3:86"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2329:6:86"
                                  },
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "2337:1:86"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "2325:3:86"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2325:14:86"
                              }
                            ],
                            "functionName": {
                              "name": "gt",
                              "nodeType": "YulIdentifier",
                              "src": "2319:2:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2319:21:86"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2296:3:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2296:45:86"
                      },
                      "nodeType": "YulIf",
                      "src": "2293:71:86"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2373:20:86",
                      "value": {
                        "arguments": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2388:1:86"
                          },
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "2391:1:86"
                          }
                        ],
                        "functionName": {
                          "name": "mul",
                          "nodeType": "YulIdentifier",
                          "src": "2384:3:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2384:9:86"
                      },
                      "variableNames": [
                        {
                          "name": "product",
                          "nodeType": "YulIdentifier",
                          "src": "2373:7:86"
                        }
                      ]
                    }
                  ]
                },
                "name": "checked_mul_t_uint256",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "x",
                    "nodeType": "YulTypedName",
                    "src": "2262:1:86",
                    "type": ""
                  },
                  {
                    "name": "y",
                    "nodeType": "YulTypedName",
                    "src": "2265:1:86",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "product",
                    "nodeType": "YulTypedName",
                    "src": "2271:7:86",
                    "type": ""
                  }
                ],
                "src": "2231:168:86"
              },
              {
                "body": {
                  "nodeType": "YulBlock",
                  "src": "2451:88:86",
                  "statements": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "2482:22:86",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [],
                              "functionName": {
                                "name": "panic_error_0x11",
                                "nodeType": "YulIdentifier",
                                "src": "2484:16:86"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2484:18:86"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "2484:18:86"
                          }
                        ]
                      },
                      "condition": {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "2467:5:86"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2478:1:86",
                                "type": "",
                                "value": "0"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "2474:3:86"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2474:6:86"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "2464:2:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2464:17:86"
                      },
                      "nodeType": "YulIf",
                      "src": "2461:43:86"
                    },
                    {
                      "nodeType": "YulAssignment",
                      "src": "2513:20:86",
                      "value": {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "2524:5:86"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2531:1:86",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2520:3:86"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2520:13:86"
                      },
                      "variableNames": [
                        {
                          "name": "ret",
                          "nodeType": "YulIdentifier",
                          "src": "2513:3:86"
                        }
                      ]
                    }
                  ]
                },
                "name": "increment_t_uint256",
                "nodeType": "YulFunctionDefinition",
                "parameters": [
                  {
                    "name": "value",
                    "nodeType": "YulTypedName",
                    "src": "2433:5:86",
                    "type": ""
                  }
                ],
                "returnVariables": [
                  {
                    "name": "ret",
                    "nodeType": "YulTypedName",
                    "src": "2443:3:86",
                    "type": ""
                  }
                ],
                "src": "2404:135:86"
              }
            ]
          },
          "contents": "{\n    { }\n    function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), 0)\n        value1 := memPtr\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n}",
          "id": 86,
          "language": "Yul",
          "name": "#utility.yul"
        }
      ],
      "immutableReferences": {},
      "linkReferences": {},
      "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5624B25B EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0xB4FABA09 EQ PUSH2 0x64 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x49 CALLDATASIZE PUSH1 0x4 PUSH2 0x122 JUMP JUMPDEST PUSH2 0x79 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x144 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x77 PUSH2 0x72 CALLDATASIZE PUSH1 0x4 PUSH2 0x1AF JUMP JUMPDEST PUSH2 0xFF JUMP JUMPDEST STOP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x88 DUP4 PUSH1 0x20 PUSH2 0x295 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xA0 JUMPI PUSH2 0xA0 PUSH2 0x199 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xCA JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF7 JUMPI DUP5 DUP2 ADD SLOAD PUSH1 0x20 DUP1 DUP4 MUL DUP5 ADD ADD MSTORE DUP1 PUSH2 0xEF DUP2 PUSH2 0x2B4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xD0 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD PUSH1 0x20 DUP5 ADD DUP6 GAS DELEGATECALL DUP1 PUSH1 0x0 MSTORE POP RETURNDATASIZE PUSH1 0x20 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x40 RETURNDATACOPY PUSH1 0x40 RETURNDATASIZE ADD PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x171 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x155 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x183 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x21C JUMPI PUSH2 0x21C PUSH2 0x199 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x244 JUMPI PUSH2 0x244 PUSH2 0x199 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x25D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2AF JUMPI PUSH2 0x2AF PUSH2 0x27F JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x2C8 JUMPI PUSH2 0x2C8 PUSH2 0x27F JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE3 0x2C 0xBE CALLDATASIZE 0xC9 0xC2 STOP PUSH32 0x732A51885CEDB505C5AAEC95E0CFB2578AE1A5E7E26DDD664736F6C63430008 EXP STOP CALLER ",
      "sourceMap": "315:1913:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;643:464;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1740:486;;;;;;:::i;:::-;;:::i;:::-;;643:464;718:12;742:19;774:11;:6;783:2;774:11;:::i;:::-;764:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;764:22:12;;742:44;;801:13;796:282;828:6;820:5;:14;796:282;;;964:18;;;958:25;1041:4;1030:16;;;1007:40;;;1000:54;976:5;836:7;976:5;836:7;:::i;:::-;;;;796:282;;;-1:-1:-1;1094:6:12;643:464;-1:-1:-1;;;643:464:12:o;1740:486::-;2025:1;2022;2004:15;1998:22;1991:4;1974:15;1970:26;1954:14;1947:5;1934:93;2054:7;2048:4;2041:21;;2088:16;2082:4;2075:30;2142:16;2139:1;2133:4;2118:41;2204:4;2186:16;2182:27;2179:1;2172:38;14:248:86;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:86;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:86:o;267:595::-;377:4;406:2;435;424:9;417:21;467:6;461:13;510:6;505:2;494:9;490:18;483:34;535:1;545:140;559:6;556:1;553:13;545:140;;;654:14;;;650:23;;644:30;620:17;;;639:2;616:26;609:66;574:10;;545:140;;;703:6;700:1;697:13;694:91;;;773:1;768:2;759:6;748:9;744:22;740:31;733:42;694:91;-1:-1:-1;846:2:86;825:15;-1:-1:-1;;821:29:86;806:45;;;;853:2;802:54;;267:595;-1:-1:-1;;;267:595:86:o;867:127::-;928:10;923:3;919:20;916:1;909:31;959:4;956:1;949:15;983:4;980:1;973:15;999:1095;1076:6;1084;1137:2;1125:9;1116:7;1112:23;1108:32;1105:52;;;1153:1;1150;1143:12;1105:52;1179:23;;-1:-1:-1;;;;;1231:31:86;;1221:42;;1211:70;;1277:1;1274;1267:12;1211:70;1300:5;-1:-1:-1;1356:2:86;1341:18;;1328:32;1379:18;1409:14;;;1406:34;;;1436:1;1433;1426:12;1406:34;1474:6;1463:9;1459:22;1449:32;;1519:7;1512:4;1508:2;1504:13;1500:27;1490:55;;1541:1;1538;1531:12;1490:55;1577:2;1564:16;1599:2;1595;1592:10;1589:36;;;1605:18;;:::i;:::-;1680:2;1674:9;1648:2;1734:13;;-1:-1:-1;;1730:22:86;;;1754:2;1726:31;1722:40;1710:53;;;1778:18;;;1798:22;;;1775:46;1772:72;;;1824:18;;:::i;:::-;1864:10;1860:2;1853:22;1899:2;1891:6;1884:18;1939:7;1934:2;1929;1925;1921:11;1917:20;1914:33;1911:53;;;1960:1;1957;1950:12;1911:53;2016:2;2011;2007;2003:11;1998:2;1990:6;1986:15;1973:46;2061:1;2056:2;2051;2043:6;2039:15;2035:24;2028:35;2082:6;2072:16;;;;;;;999:1095;;;;;:::o;2099:127::-;2160:10;2155:3;2151:20;2148:1;2141:31;2191:4;2188:1;2181:15;2215:4;2212:1;2205:15;2231:168;2271:7;2337:1;2333;2329:6;2325:14;2322:1;2319:21;2314:1;2307:9;2300:17;2296:45;2293:71;;;2344:18;;:::i;:::-;-1:-1:-1;2384:9:86;;2231:168::o;2404:135::-;2443:3;-1:-1:-1;;2464:17:86;;2461:43;;;2484:18;;:::i;:::-;-1:-1:-1;2531:1:86;2520:13;;2404:135::o"
    },
    "gasEstimates": {
      "creation": {
        "codeDepositCost": "154600",
        "executionCost": "202",
        "totalCost": "154802"
      },
      "external": {
        "getStorageAt(uint256,uint256)": "infinite",
        "simulateAndRevert(address,bytes)": "infinite"
      }
    },
    "methodIdentifiers": {
      "getStorageAt(uint256,uint256)": "5624b25b",
      "simulateAndRevert(address,bytes)": "b4faba09"
    }
  },
  "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"getStorageAt\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"calldataPayload\",\"type\":\"bytes\"}],\"name\":\"simulateAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getStorageAt(uint256,uint256)\":{\"details\":\"Reads `length` bytes of storage in the currents contract\",\"params\":{\"length\":\"- the number of words (32 bytes) of data to read\",\"offset\":\"- the offset in the current contract's storage in words to start reading from\"},\"returns\":{\"_0\":\"the bytes that were read.\"}},\"simulateAndRevert(address,bytes)\":{\"details\":\"Performs a delegetecall on a targetContract in the context of self. Internally reverts execution to avoid side effects (making it static). This method reverts with data equal to `abi.encode(bool(success), bytes(response))`. Specifically, the `returndata` after a call to this method will be: `success:bool || response.length:uint256 || response:bytes`.\",\"params\":{\"calldataPayload\":\"Calldata that should be sent to the target contract (encoded method name and arguments).\",\"targetContract\":\"Address of the contract containing the code to execute.\"}}},\"title\":\"StorageAccessible - generic base contract that allows callers to access all internal storage.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@gnosis.pm/safe-contracts/contracts/common/StorageAccessible.sol\":\"StorageAccessible\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@gnosis.pm/safe-contracts/contracts/common/StorageAccessible.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity >=0.7.0 <0.9.0;\\n\\n/// @title StorageAccessible - generic base contract that allows callers to access all internal storage.\\n/// @notice See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol\\ncontract StorageAccessible {\\n    /**\\n     * @dev Reads `length` bytes of storage in the currents contract\\n     * @param offset - the offset in the current contract's storage in words to start reading from\\n     * @param length - the number of words (32 bytes) of data to read\\n     * @return the bytes that were read.\\n     */\\n    function getStorageAt(uint256 offset, uint256 length) public view returns (bytes memory) {\\n        bytes memory result = new bytes(length * 32);\\n        for (uint256 index = 0; index < length; index++) {\\n            // solhint-disable-next-line no-inline-assembly\\n            assembly {\\n                let word := sload(add(offset, index))\\n                mstore(add(add(result, 0x20), mul(index, 0x20)), word)\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Performs a delegetecall on a targetContract in the context of self.\\n     * Internally reverts execution to avoid side effects (making it static).\\n     *\\n     * This method reverts with data equal to `abi.encode(bool(success), bytes(response))`.\\n     * Specifically, the `returndata` after a call to this method will be:\\n     * `success:bool || response.length:uint256 || response:bytes`.\\n     *\\n     * @param targetContract Address of the contract containing the code to execute.\\n     * @param calldataPayload Calldata that should be sent to the target contract (encoded method name and arguments).\\n     */\\n    function simulateAndRevert(address targetContract, bytes memory calldataPayload) external {\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            let success := delegatecall(gas(), targetContract, add(calldataPayload, 0x20), mload(calldataPayload), 0, 0)\\n\\n            mstore(0x00, success)\\n            mstore(0x20, returndatasize())\\n            returndatacopy(0x40, 0, returndatasize())\\n            revert(0, add(returndatasize(), 0x40))\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x36853adb266c2ab7d3c612aca799441a86bd15d9e1d24fc6c70d63f5c2df3aaf\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}",
  "storageLayout": {
    "storage": [],
    "types": null
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "notice": "See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol",
    "version": 1
  }
}