{
  "contractName": "Some_Logic_Contract",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "data",
          "type": "bytes32"
        }
      ],
      "name": "Impure_Transition",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "initialize_state",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "payable",
      "type": "function",
      "payable": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "call_data",
          "type": "bytes"
        }
      ],
      "name": "optimistic_call",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "new_state",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "call_data",
          "type": "bytes"
        }
      ],
      "name": "pessimistic_call",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "new_state",
          "type": "bytes32"
        }
      ],
      "stateMutability": "payable",
      "type": "function",
      "payable": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "current_state",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "some_arg",
          "type": "bytes32"
        }
      ],
      "name": "some_pure_transition",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "current_state",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "some_arg",
          "type": "bytes32"
        }
      ],
      "name": "some_impure_transition",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "new_state",
          "type": "bytes32"
        }
      ],
      "stateMutability": "payable",
      "type": "function",
      "payable": true
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.3+commit.9bfce1f6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"data\",\"type\":\"bytes32\"}],\"name\":\"Impure_Transition\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"initialize_state\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"call_data\",\"type\":\"bytes\"}],\"name\":\"optimistic_call\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"new_state\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"call_data\",\"type\":\"bytes\"}],\"name\":\"pessimistic_call\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"new_state\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"current_state\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"some_arg\",\"type\":\"bytes32\"}],\"name\":\"some_impure_transition\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"new_state\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"current_state\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"some_arg\",\"type\":\"bytes32\"}],\"name\":\"some_pure_transition\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/michaeldeluca/Projects/optimistic-roll-in/eth/contracts/some-logic-contract.sol\":\"Some_Logic_Contract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"/Users/michaeldeluca/Projects/optimistic-roll-in/eth/contracts/optimistic-roll-in-compatible.sol\":{\"keccak256\":\"0xa52cbbdb46293c2e4ec580da44dbf4f44a95deffd7eeda5b98a4804a986c1f52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://064c9204543aa06dd8091476ee29119932ec0edd0bd1c69aaaffd81709311874\",\"dweb:/ipfs/QmYmbqGTbsps7ZpsA7MrZDyXrNmZeETi5h6jzi2VfoLdHk\"]},\"/Users/michaeldeluca/Projects/optimistic-roll-in/eth/contracts/some-logic-contract.sol\":{\"keccak256\":\"0xd09197b871f4e96ea99f895d6f3567bb2b709667c83f0177136b45e5118bd15e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e971a2990187a0ff62048f7cf15aafddc81183b4c35c20e259ff7cd5776bf872\",\"dweb:/ipfs/QmSR9YJ3HxyJPasSonhiome2sD2RAy5sg7rUXpn8Jrr6AK\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b506106a4806100206000396000f3fe60806040526004361061005a5760003560e01c80638517c187116100435780638517c1871461009b5780638821e2b1146100ae578063ef6f6a42146100ce5761005a565b80637ed306891461005f578063816ef0b614610088575b600080fd5b61007261006d366004610427565b6100ee565b60405161007f91906105c0565b60405180910390f35b610072610096366004610448565b61016a565b6100726100a9366004610492565b6101fd565b3480156100ba57600080fd5b506100726100c9366004610492565b6102c5565b3480156100da57600080fd5b506100726100e9366004610448565b61036d565b60006706f05b59d3b2000034101561013b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161013290610600565b60405180910390fd5b8160405160200161014c91906104ff565b6040516020818303038152906040528051906020012090505b919050565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff430140907f1fdf57a7aa589b03313e245649cc4692a47de92b1968dfa2bc236d1f3d808383906101bf9083906105c0565b60405180910390a1828483836040516020016101de9493929190610562565b6040516020818303038152906040528051906020012090509392505050565b60008060603073ffffffffffffffffffffffffffffffffffffffff1634868660405161022a9291906105b0565b60006040518083038185875af1925050503d8060008114610267576040519150601f19603f3d011682016040523d82523d6000602084013e61026c565b606091505b5091509150816102a8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610132906105c9565b808060200190518101906102bc919061047a565b95945050505050565b60008060603073ffffffffffffffffffffffffffffffffffffffff1685856040516102f19291906105b0565b600060405180830381855afa9150503d806000811461032c576040519150601f19603f3d011682016040523d82523d6000602084013e610331565b606091505b5091509150816102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161013290610637565b6000828460405160200161038292919061052f565b60405160208183030381529060405280519060200120925060005b6103e88110156103fa5783836040516020016103ba9291906105a2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120935060010161039d565b50919392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016557600080fd5b600060208284031215610438578081fd5b61044182610403565b9392505050565b60008060006060848603121561045c578182fd5b61046584610403565b95602085013595506040909401359392505050565b60006020828403121561048b578081fd5b5051919050565b600080602083850312156104a4578182fd5b823567ffffffffffffffff808211156104bb578384fd5b818501915085601f8301126104ce578384fd5b8135818111156104dc578485fd5b8660208285010111156104ed578485fd5b60209290920196919550909350505050565b60609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b91825260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602082015260340190565b93845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208401526034830152605482015260740190565b918252602082015260400190565b6000828483379101908152919050565b90815260200190565b60208082526017908201527f50455353494d49535449435f43414c4c5f4641494c4544000000000000000000604082015260600190565b60208082526014908201527f494e53554646494349454e545f4445504f534954000000000000000000000000604082015260600190565b60208082526016908201527f4f5054494d49535449435f43414c4c5f4641494c45440000000000000000000060408201526060019056fea2646970667358221220e2627ae69d9e34e3c8779200405d9bb728234a73f8fe87a8788b6f6bf917d95f64736f6c63430007030033",
  "deployedBytecode": "0x60806040526004361061005a5760003560e01c80638517c187116100435780638517c1871461009b5780638821e2b1146100ae578063ef6f6a42146100ce5761005a565b80637ed306891461005f578063816ef0b614610088575b600080fd5b61007261006d366004610427565b6100ee565b60405161007f91906105c0565b60405180910390f35b610072610096366004610448565b61016a565b6100726100a9366004610492565b6101fd565b3480156100ba57600080fd5b506100726100c9366004610492565b6102c5565b3480156100da57600080fd5b506100726100e9366004610448565b61036d565b60006706f05b59d3b2000034101561013b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161013290610600565b60405180910390fd5b8160405160200161014c91906104ff565b6040516020818303038152906040528051906020012090505b919050565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff430140907f1fdf57a7aa589b03313e245649cc4692a47de92b1968dfa2bc236d1f3d808383906101bf9083906105c0565b60405180910390a1828483836040516020016101de9493929190610562565b6040516020818303038152906040528051906020012090509392505050565b60008060603073ffffffffffffffffffffffffffffffffffffffff1634868660405161022a9291906105b0565b60006040518083038185875af1925050503d8060008114610267576040519150601f19603f3d011682016040523d82523d6000602084013e61026c565b606091505b5091509150816102a8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610132906105c9565b808060200190518101906102bc919061047a565b95945050505050565b60008060603073ffffffffffffffffffffffffffffffffffffffff1685856040516102f19291906105b0565b600060405180830381855afa9150503d806000811461032c576040519150601f19603f3d011682016040523d82523d6000602084013e610331565b606091505b5091509150816102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161013290610637565b6000828460405160200161038292919061052f565b60405160208183030381529060405280519060200120925060005b6103e88110156103fa5783836040516020016103ba9291906105a2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120935060010161039d565b50919392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461016557600080fd5b600060208284031215610438578081fd5b61044182610403565b9392505050565b60008060006060848603121561045c578182fd5b61046584610403565b95602085013595506040909401359392505050565b60006020828403121561048b578081fd5b5051919050565b600080602083850312156104a4578182fd5b823567ffffffffffffffff808211156104bb578384fd5b818501915085601f8301126104ce578384fd5b8135818111156104dc578485fd5b8660208285010111156104ed578485fd5b60209290920196919550909350505050565b60609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b91825260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602082015260340190565b93845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208401526034830152605482015260740190565b918252602082015260400190565b6000828483379101908152919050565b90815260200190565b60208082526017908201527f50455353494d49535449435f43414c4c5f4641494c4544000000000000000000604082015260600190565b60208082526014908201527f494e53554646494349454e545f4445504f534954000000000000000000000000604082015260600190565b60208082526016908201527f4f5054494d49535449435f43414c4c5f4641494c45440000000000000000000060408201526060019056fea2646970667358221220e2627ae69d9e34e3c8779200405d9bb728234a73f8fe87a8788b6f6bf917d95f64736f6c63430007030033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:4433:5",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:5",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "65:147:5",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "75:29:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "97:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "84:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "84:20:5"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "75:5:5"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "190:16:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "199:1:5",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "202:1:5",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "192:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "192:12:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "192:12:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "126:5:5"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "137:5:5"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "144:42:5",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "133:3:5"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "133:54:5"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "123:2:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "123:65:5"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "116:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "116:73:5"
                  },
                  "nodeType": "YulIf",
                  "src": "113:2:5"
                }
              ]
            },
            "name": "abi_decode_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "44:6:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "55:5:5",
                "type": ""
              }
            ],
            "src": "14:198:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "287:128:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "333:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "342:6:5"
                            },
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "350:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "335:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "335:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "335:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "308:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "317:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "304:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "304:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "329:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "300:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "300:32:5"
                  },
                  "nodeType": "YulIf",
                  "src": "297:2:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "368:41:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "399:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "378:20:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "378:31:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "368:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "253:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "264:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "276:6:5",
                "type": ""
              }
            ],
            "src": "217:198:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "524:230:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "570:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value1",
                              "nodeType": "YulIdentifier",
                              "src": "579:6:5"
                            },
                            {
                              "name": "value1",
                              "nodeType": "YulIdentifier",
                              "src": "587:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "572:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "572:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "572:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "545:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "554:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "541:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "541:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "566:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "537:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "537:32:5"
                  },
                  "nodeType": "YulIf",
                  "src": "534:2:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "605:41:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "636:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_t_address",
                      "nodeType": "YulIdentifier",
                      "src": "615:20:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "615:31:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "605:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "655:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "682:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "693:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "678:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "678:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "665:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "665:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "655:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "706:42:5",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "733:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "744:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "729:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "729:18:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "716:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "716:32:5"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "706:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_bytes32t_bytes32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "474:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "485:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "497:6:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "505:6:5",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "513:6:5",
                "type": ""
              }
            ],
            "src": "420:334:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "840:113:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "886:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "895:6:5"
                            },
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "903:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "888:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "888:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "888:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "861:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "870:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "857:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "857:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "882:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "853:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "853:32:5"
                  },
                  "nodeType": "YulIf",
                  "src": "850:2:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "921:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "937:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "931:5:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "931:16:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "921:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "806:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "817:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "829:6:5",
                "type": ""
              }
            ],
            "src": "759:194:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1047:552:5",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1093:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "1102:6:5"
                            },
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "1110:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1095:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1095:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1095:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1068:7:5"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1077:9:5"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1064:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1064:23:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1089:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1060:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1060:32:5"
                  },
                  "nodeType": "YulIf",
                  "src": "1057:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1128:37:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1155:9:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1142:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1142:23:5"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "1132:6:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1174:28:5",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "1184:18:5",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "1178:2:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1229:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "1238:6:5"
                            },
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "1246:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1231:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1231:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1231:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1217:6:5"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "1225:2:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1214:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1214:14:5"
                  },
                  "nodeType": "YulIf",
                  "src": "1211:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1264:32:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1278:9:5"
                      },
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1289:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1274:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1274:22:5"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "1268:2:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1344:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "1353:6:5"
                            },
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "1361:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1346:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1346:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1346:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "1323:2:5"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1327:4:5",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1319:3:5"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1319:13:5"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1334:7:5"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "1315:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1315:27:5"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "1308:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1308:35:5"
                  },
                  "nodeType": "YulIf",
                  "src": "1305:2:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1379:30:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "1406:2:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1393:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1393:16:5"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "1383:6:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1436:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "1445:6:5"
                            },
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "1453:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1438:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1438:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1438:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1424:6:5"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "1432:2:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1421:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1421:14:5"
                  },
                  "nodeType": "YulIf",
                  "src": "1418:2:5"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1512:26:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "1521:6:5"
                            },
                            {
                              "name": "value0",
                              "nodeType": "YulIdentifier",
                              "src": "1529:6:5"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1514:6:5"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1514:22:5"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1514:22:5"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "1485:2:5"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "1489:6:5"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1481:3:5"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1481:15:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1498:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1477:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1477:24:5"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "1503:7:5"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1474:2:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1474:37:5"
                  },
                  "nodeType": "YulIf",
                  "src": "1471:2:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1547:21:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "1561:2:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1565:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1557:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1557:11:5"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1547:6:5"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1577:16:5",
                  "value": {
                    "name": "length",
                    "nodeType": "YulIdentifier",
                    "src": "1587:6:5"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "1577:6:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1005:9:5",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1016:7:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1028:6:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1036:6:5",
                "type": ""
              }
            ],
            "src": "958:641:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1723:145:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "1740:3:5"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1753:2:5",
                                "type": "",
                                "value": "96"
                              },
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "1757:6:5"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "1749:3:5"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1749:15:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1766:66:5",
                            "type": "",
                            "value": "0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1745:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1745:88:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1733:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1733:101:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1733:101:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1843:19:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "1854:3:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1859:2:5",
                        "type": "",
                        "value": "20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1850:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1850:12:5"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "1843:3:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_address__to_t_address__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "1699:3:5",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1704:6:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1715:3:5",
                "type": ""
              }
            ],
            "src": "1604:264:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2020:182:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "2037:3:5"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "2042:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2030:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2030:19:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2030:19:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "2069:3:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2074:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2065:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2065:12:5"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2087:2:5",
                                "type": "",
                                "value": "96"
                              },
                              {
                                "name": "value1",
                                "nodeType": "YulIdentifier",
                                "src": "2091:6:5"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "2083:3:5"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2083:15:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2100:66:5",
                            "type": "",
                            "value": "0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2079:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2079:88:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2058:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2058:110:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2058:110:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2177:19:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "2188:3:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2193:2:5",
                        "type": "",
                        "value": "52"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2184:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2184:12:5"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "2177:3:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes32_t_address__to_t_bytes32_t_address__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "1988:3:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1993:6:5",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2001:6:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "2012:3:5",
                "type": ""
              }
            ],
            "src": "1873:329:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2410:257:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "2427:3:5"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "2432:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2420:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2420:19:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2420:19:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "2459:3:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2464:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2455:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2455:12:5"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2477:2:5",
                                "type": "",
                                "value": "96"
                              },
                              {
                                "name": "value1",
                                "nodeType": "YulIdentifier",
                                "src": "2481:6:5"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "2473:3:5"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2473:15:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2490:66:5",
                            "type": "",
                            "value": "0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2469:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2469:88:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2448:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2448:110:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2448:110:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "2578:3:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2583:2:5",
                            "type": "",
                            "value": "52"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2574:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2574:12:5"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "2588:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2567:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2567:28:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2567:28:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "2615:3:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2620:2:5",
                            "type": "",
                            "value": "84"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2611:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2611:12:5"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "2625:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2604:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2604:28:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2604:28:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2641:20:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "2652:3:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2657:3:5",
                        "type": "",
                        "value": "116"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2648:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2648:13:5"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "2641:3:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes32_t_address_t_bytes32_t_bytes32__to_t_bytes32_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "2362:3:5",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "2367:6:5",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "2375:6:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2383:6:5",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2391:6:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "2402:3:5",
                "type": ""
              }
            ],
            "src": "2207:460:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2819:100:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "2836:3:5"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "2841:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2829:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2829:19:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2829:19:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "2868:3:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2873:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2864:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2864:12:5"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "2878:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2857:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2857:28:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2857:28:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2894:19:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "2905:3:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2910:2:5",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2901:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2901:12:5"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "2894:3:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "2787:3:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2792:6:5",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2800:6:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "2811:3:5",
                "type": ""
              }
            ],
            "src": "2672:247:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3071:126:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "3094:3:5"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "3099:6:5"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "3107:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "3081:12:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3081:33:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3081:33:5"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3123:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "3137:3:5"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "3142:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3133:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3133:16:5"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "3127:2:5",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "3165:2:5"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "3169:3:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3158:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3158:15:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3158:15:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3182:9:5",
                  "value": {
                    "name": "_1",
                    "nodeType": "YulIdentifier",
                    "src": "3189:2:5"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "3182:3:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "3039:3:5",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3044:6:5",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3052:6:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "3063:3:5",
                "type": ""
              }
            ],
            "src": "2924:273:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3303:76:5",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3313:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3325:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3336:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3321:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3321:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3313:4:5"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3355:9:5"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "3366:6:5"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3348:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3348:25:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3348:25:5"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3272:9:5",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3283:6:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3294:4:5",
                "type": ""
              }
            ],
            "src": "3202:177:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3558:173:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3575:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3586:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3568:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3568:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3568:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3609:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3620:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3605:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3605:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3625:2:5",
                        "type": "",
                        "value": "23"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3598:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3598:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3598:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3648:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3659:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3644:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3644:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3664:25:5",
                        "type": "",
                        "value": "PESSIMISTIC_CALL_FAILED"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3637:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3637:53:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3637:53:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3699:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3711:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3722:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3707:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3707:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3699:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0da4aa06769726f22ca528c66ec948feca6d1a3d98ffe22b2898fca4fbf6ce2b__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3535:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3549:4:5",
                "type": ""
              }
            ],
            "src": "3384:347:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3910:170:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3927:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3938:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3920:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3920:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3920:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3961:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3972:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3957:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3957:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3977:2:5",
                        "type": "",
                        "value": "20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3950:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3950:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3950:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4000:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4011:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3996:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3996:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "4016:22:5",
                        "type": "",
                        "value": "INSUFFICIENT_DEPOSIT"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3989:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3989:50:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3989:50:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4048:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4060:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4071:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4056:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4056:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4048:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_1bafdd5d54a45209622d7b4fbaa1b4f9a95d4eac24a9200a3c11e152a8c082fa__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3887:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3901:4:5",
                "type": ""
              }
            ],
            "src": "3736:344:5"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4259:172:5",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4276:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4287:2:5",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4269:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4269:21:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4269:21:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4310:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4321:2:5",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4306:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4306:18:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4326:2:5",
                        "type": "",
                        "value": "22"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4299:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4299:30:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4299:30:5"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4349:9:5"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4360:2:5",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4345:3:5"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4345:18:5"
                      },
                      {
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "4365:24:5",
                        "type": "",
                        "value": "OPTIMISTIC_CALL_FAILED"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4338:6:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4338:52:5"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4338:52:5"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4399:26:5",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4411:9:5"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4422:2:5",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4407:3:5"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4407:18:5"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4399:4:5"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_98f44e08bba93a78e1de68b2dd4ee212e58fff476b14d9f2eb4acebeb92c40a5__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4236:9:5",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4250:4:5",
                "type": ""
              }
            ],
            "src": "4085:346:5"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_t_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := abi_decode_t_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value1, value1) }\n        value0 := abi_decode_t_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value0, value0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value0, value0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(value0, value0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(value0, value0) }\n        value0 := add(_2, 32)\n        value1 := length\n    }\n    function abi_encode_tuple_packed_t_address__to_t_address__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, and(shl(96, value0), 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000))\n        end := add(pos, 20)\n    }\n    function abi_encode_tuple_packed_t_bytes32_t_address__to_t_bytes32_t_address__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, value0)\n        mstore(add(pos, 32), and(shl(96, value1), 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000))\n        end := add(pos, 52)\n    }\n    function abi_encode_tuple_packed_t_bytes32_t_address_t_bytes32_t_bytes32__to_t_bytes32_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value3, value2, value1, value0) -> end\n    {\n        mstore(pos, value0)\n        mstore(add(pos, 32), and(shl(96, value1), 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000))\n        mstore(add(pos, 52), value2)\n        mstore(add(pos, 84), value3)\n        end := add(pos, 116)\n    }\n    function abi_encode_tuple_packed_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, value0)\n        mstore(add(pos, 32), value1)\n        end := add(pos, 64)\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, end)\n        end := _1\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_stringliteral_0da4aa06769726f22ca528c66ec948feca6d1a3d98ffe22b2898fca4fbf6ce2b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"PESSIMISTIC_CALL_FAILED\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1bafdd5d54a45209622d7b4fbaa1b4f9a95d4eac24a9200a3c11e152a8c082fa__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"INSUFFICIENT_DEPOSIT\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_98f44e08bba93a78e1de68b2dd4ee212e58fff476b14d9f2eb4acebeb92c40a5__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"OPTIMISTIC_CALL_FAILED\")\n        tail := add(headStart, 96)\n    }\n}",
      "id": 5,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "258:1896:3:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "258:1896:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;366:205;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1763:389;;;;;;:::i;:::-;;:::i;944:384::-;;;;;;:::i;:::-;;:::i;575:365::-;;;;;;;;;;-1:-1:-1;575:365:3;;;;;:::i;:::-;;:::i;1332:427::-;;;;;;;;;;-1:-1:-1;1332:427:3;;;;;:::i;:::-;;:::i;366:205::-;441:7;477:18;464:9;:31;;456:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;560:4;543:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;533:33;;;;;;526:40;;366:205;;;;:::o;1763:389::-;2036:28;;2008:16;:12;:16;1998:27;;2036:28;;;;1998:27;;2036:28;:::i;:::-;;;;;;;;2105:13;2120:4;2126:8;2136:9;2088:58;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2078:69;;;;;;2071:76;;1763:389;;;;;:::o;944:384::-;1031:17;1097:12;1111:24;1147:4;1139:18;;1166:9;1178;;1139:49;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1096:92;;;;1202:7;1194:43;;;;;;;;;;;;:::i;:::-;1300:11;1289:34;;;;;;;;;;;;:::i;:::-;1277:46;944:384;-1:-1:-1;;;;;944:384:3:o;575:365::-;658:17;724:12;738:24;774:4;766:24;;791:9;;766:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;723:78;;;;815:7;807:42;;;;;;;;;;;;:::i;1332:427::-;1456:7;1586:13;1601:4;1569:37;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1559:48;;;;;;1543:64;;1619:9;1614:114;1634:4;1630:1;:8;1614:114;;;1696:13;1711:8;1679:41;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;1669:52;;1679:41;1669:52;;;;;-1:-1:-1;1640:3:3;;1614:114;;;-1:-1:-1;1741:13:3;;1332:427;-1:-1:-1;;;1332:427:3:o;14:198:5:-;84:20;;144:42;133:54;;123:65;;113:2;;202:1;199;192:12;217:198;;329:2;317:9;308:7;304:23;300:32;297:2;;;350:6;342;335:22;297:2;378:31;399:9;378:31;:::i;:::-;368:41;287:128;-1:-1:-1;;;287:128:5:o;420:334::-;;;;566:2;554:9;545:7;541:23;537:32;534:2;;;587:6;579;572:22;534:2;615:31;636:9;615:31;:::i;:::-;605:41;693:2;678:18;;665:32;;-1:-1:-1;744:2:5;729:18;;;716:32;;524:230;-1:-1:-1;;;524:230:5:o;759:194::-;;882:2;870:9;861:7;857:23;853:32;850:2;;;903:6;895;888:22;850:2;-1:-1:-1;931:16:5;;840:113;-1:-1:-1;840:113:5:o;958:641::-;;;1089:2;1077:9;1068:7;1064:23;1060:32;1057:2;;;1110:6;1102;1095:22;1057:2;1155:9;1142:23;1184:18;1225:2;1217:6;1214:14;1211:2;;;1246:6;1238;1231:22;1211:2;1289:6;1278:9;1274:22;1264:32;;1334:7;1327:4;1323:2;1319:13;1315:27;1305:2;;1361:6;1353;1346:22;1305:2;1406;1393:16;1432:2;1424:6;1421:14;1418:2;;;1453:6;1445;1438:22;1418:2;1503:7;1498:2;1489:6;1485:2;1481:15;1477:24;1474:37;1471:2;;;1529:6;1521;1514:22;1471:2;1565;1557:11;;;;;1587:6;;-1:-1:-1;1047:552:5;;-1:-1:-1;;;;1047:552:5:o;1604:264::-;1753:2;1749:15;;;;1766:66;1745:88;1733:101;;1859:2;1850:12;;1723:145::o;1873:329::-;2030:19;;;2087:2;2083:15;2100:66;2079:88;2074:2;2065:12;;2058:110;2193:2;2184:12;;2020:182::o;2207:460::-;2420:19;;;2477:2;2473:15;;;;2490:66;2469:88;2464:2;2455:12;;2448:110;2583:2;2574:12;;2567:28;2620:2;2611:12;;2604:28;2657:3;2648:13;;2410:257::o;2672:247::-;2829:19;;;2873:2;2864:12;;2857:28;2910:2;2901:12;;2819:100::o;2924:273::-;;3107:6;3099;3094:3;3081:33;3133:16;;3158:15;;;3133:16;3071:126;-1:-1:-1;3071:126:5:o;3202:177::-;3348:25;;;3336:2;3321:18;;3303:76::o;3384:347::-;3586:2;3568:21;;;3625:2;3605:18;;;3598:30;3664:25;3659:2;3644:18;;3637:53;3722:2;3707:18;;3558:173::o;3736:344::-;3938:2;3920:21;;;3977:2;3957:18;;;3950:30;4016:22;4011:2;3996:18;;3989:50;4071:2;4056:18;;3910:170::o;4085:346::-;4287:2;4269:21;;;4326:2;4306:18;;;4299:30;4365:24;4360:2;4345:18;;4338:52;4422:2;4407:18;;4259:172::o",
  "source": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <=0.7.3;\npragma experimental ABIEncoderV2;\n\nimport \"./optimistic-roll-in-compatible.sol\";\n\n// TODO: Build a Logic Proxy that checks and embeds the version of the state, and directs to other contracts\n\ncontract Some_Logic_Contract is Optimistic_Roll_In_Compatible {\n  event Impure_Transition(bytes32 data);\n\n  function initialize_state(address user) external payable override returns (bytes32) {\n    require(msg.value >= 500000000000000000, \"INSUFFICIENT_DEPOSIT\");\n    return keccak256(abi.encodePacked(user));\n  }\n\n  function optimistic_call(bytes calldata call_data) external view override returns (bytes32 new_state) {\n    // Call (staticcall) local function\n    (bool success, bytes memory state_bytes) = address(this).staticcall(call_data);\n    require(success, \"OPTIMISTIC_CALL_FAILED\");\n\n    // Decode returned new_state\n    new_state = abi.decode(state_bytes, (bytes32));\n  }\n\n  function pessimistic_call(bytes calldata call_data) external payable override returns (bytes32 new_state) {\n    // Call (staticcall) local function\n    (bool success, bytes memory state_bytes) = address(this).call{ value: msg.value }(call_data);\n    require(success, \"PESSIMISTIC_CALL_FAILED\");\n\n    // Decode returned new_state\n    new_state = abi.decode(state_bytes, (bytes32));\n  }\n\n  function some_pure_transition(\n    address user,\n    bytes32 current_state,\n    bytes32 some_arg\n  ) external pure returns (bytes32) {\n    // Just do some expensive work for the sake of the proof of concept\n    current_state = keccak256(abi.encodePacked(current_state, user));\n\n    for (uint256 i; i < 1000; ++i) {\n      current_state = keccak256(abi.encodePacked(current_state, some_arg));\n    }\n\n    return current_state;\n  }\n\n  function some_impure_transition(\n    address user,\n    bytes32 current_state,\n    bytes32 some_arg\n  ) external payable returns (bytes32 new_state) {\n    // Just do some impure work for the sake of the proof of concept\n    new_state = blockhash(block.number - 1);\n    emit Impure_Transition(new_state);\n\n    return keccak256(abi.encodePacked(current_state, user, some_arg, new_state));\n  }\n}\n",
  "sourcePath": "/Users/michaeldeluca/Projects/optimistic-roll-in/eth/contracts/some-logic-contract.sol",
  "ast": {
    "absolutePath": "/Users/michaeldeluca/Projects/optimistic-roll-in/eth/contracts/some-logic-contract.sol",
    "exportedSymbols": {
      "Optimistic_Roll_In_Compatible": [
        61
      ],
      "Some_Logic_Contract": [
        1636
      ]
    },
    "id": 1637,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1448,
        "literals": [
          "solidity",
          ">=",
          "0.6",
          ".0",
          "<=",
          "0.7",
          ".3"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:32:3"
      },
      {
        "id": 1449,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:3"
      },
      {
        "absolutePath": "/Users/michaeldeluca/Projects/optimistic-roll-in/eth/contracts/optimistic-roll-in-compatible.sol",
        "file": "./optimistic-roll-in-compatible.sol",
        "id": 1450,
        "nodeType": "ImportDirective",
        "scope": 1637,
        "sourceUnit": 62,
        "src": "101:45:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 1451,
              "name": "Optimistic_Roll_In_Compatible",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 61,
              "src": "290:29:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
                "typeString": "contract Optimistic_Roll_In_Compatible"
              }
            },
            "id": 1452,
            "nodeType": "InheritanceSpecifier",
            "src": "290:29:3"
          }
        ],
        "contractDependencies": [
          61
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 1636,
        "linearizedBaseContracts": [
          1636,
          61
        ],
        "name": "Some_Logic_Contract",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "id": 1456,
            "name": "Impure_Transition",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1455,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1454,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1456,
                  "src": "348:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1453,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "348:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "347:14:3"
            },
            "src": "324:38:3"
          },
          {
            "baseFunctions": [
              46
            ],
            "body": {
              "id": 1479,
              "nodeType": "Block",
              "src": "450:121:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1468,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 1465,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "464:3:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1466,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "464:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "hexValue": "353030303030303030303030303030303030",
                          "id": 1467,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "477:18:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_500000000000000000_by_1",
                            "typeString": "int_const 500000000000000000"
                          },
                          "value": "500000000000000000"
                        },
                        "src": "464:31:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e53554646494349454e545f4445504f534954",
                        "id": 1469,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "497:22:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1bafdd5d54a45209622d7b4fbaa1b4f9a95d4eac24a9200a3c11e152a8c082fa",
                          "typeString": "literal_string \"INSUFFICIENT_DEPOSIT\""
                        },
                        "value": "INSUFFICIENT_DEPOSIT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1bafdd5d54a45209622d7b4fbaa1b4f9a95d4eac24a9200a3c11e152a8c082fa",
                          "typeString": "literal_string \"INSUFFICIENT_DEPOSIT\""
                        }
                      ],
                      "id": 1464,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "456:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "456:64:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1471,
                  "nodeType": "ExpressionStatement",
                  "src": "456:64:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 1475,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1458,
                            "src": "560:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 1473,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "543:3:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1474,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "543:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 1476,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "543:22:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1472,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "533:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "533:33:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1463,
                  "id": 1478,
                  "nodeType": "Return",
                  "src": "526:40:3"
                }
              ]
            },
            "functionSelector": "7ed30689",
            "id": 1480,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize_state",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1460,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "423:8:3"
            },
            "parameters": {
              "id": 1459,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1458,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 1480,
                  "src": "392:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1457,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "392:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "391:14:3"
            },
            "returnParameters": {
              "id": 1463,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1462,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1480,
                  "src": "441:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1461,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "441:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "440:9:3"
            },
            "scope": 1636,
            "src": "366:205:3",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              53
            ],
            "body": {
              "id": 1515,
              "nodeType": "Block",
              "src": "677:263:3",
              "statements": [
                {
                  "assignments": [
                    1489,
                    1491
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1489,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 1515,
                      "src": "724:12:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1488,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "724:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1491,
                      "mutability": "mutable",
                      "name": "state_bytes",
                      "nodeType": "VariableDeclaration",
                      "scope": 1515,
                      "src": "738:24:3",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1490,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "738:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1499,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1497,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1482,
                        "src": "791:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 1494,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "774:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Some_Logic_Contract_$1636",
                              "typeString": "contract Some_Logic_Contract"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Some_Logic_Contract_$1636",
                              "typeString": "contract Some_Logic_Contract"
                            }
                          ],
                          "id": 1493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "766:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1492,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "766:7:3",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "766:13:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1496,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "766:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 1498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "766:35:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "723:78:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1501,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1489,
                        "src": "815:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f5054494d49535449435f43414c4c5f4641494c4544",
                        "id": 1502,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "824:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_98f44e08bba93a78e1de68b2dd4ee212e58fff476b14d9f2eb4acebeb92c40a5",
                          "typeString": "literal_string \"OPTIMISTIC_CALL_FAILED\""
                        },
                        "value": "OPTIMISTIC_CALL_FAILED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_98f44e08bba93a78e1de68b2dd4ee212e58fff476b14d9f2eb4acebeb92c40a5",
                          "typeString": "literal_string \"OPTIMISTIC_CALL_FAILED\""
                        }
                      ],
                      "id": 1500,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "807:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "807:42:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1504,
                  "nodeType": "ExpressionStatement",
                  "src": "807:42:3"
                },
                {
                  "expression": {
                    "id": 1513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1505,
                      "name": "new_state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1486,
                      "src": "889:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 1508,
                          "name": "state_bytes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1491,
                          "src": "912:11:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 1510,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "926:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 1509,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "926:7:3",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 1511,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "925:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          }
                        ],
                        "expression": {
                          "id": 1506,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -1,
                          "src": "901:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 1507,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "901:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 1512,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "901:34:3",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "889:46:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1514,
                  "nodeType": "ExpressionStatement",
                  "src": "889:46:3"
                }
              ]
            },
            "functionSelector": "8821e2b1",
            "id": 1516,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "optimistic_call",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1484,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "640:8:3"
            },
            "parameters": {
              "id": 1483,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1482,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1516,
                  "src": "600:24:3",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1481,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "600:5:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "599:26:3"
            },
            "returnParameters": {
              "id": 1487,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1486,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1516,
                  "src": "658:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1485,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "658:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "657:19:3"
            },
            "scope": 1636,
            "src": "575:365:3",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              60
            ],
            "body": {
              "id": 1554,
              "nodeType": "Block",
              "src": "1050:278:3",
              "statements": [
                {
                  "assignments": [
                    1525,
                    1527
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1525,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 1554,
                      "src": "1097:12:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1524,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1097:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1527,
                      "mutability": "mutable",
                      "name": "state_bytes",
                      "nodeType": "VariableDeclaration",
                      "scope": 1554,
                      "src": "1111:24:3",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1526,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1111:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1538,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1536,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1518,
                        "src": "1178:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "id": 1530,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "1147:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Some_Logic_Contract_$1636",
                                "typeString": "contract Some_Logic_Contract"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Some_Logic_Contract_$1636",
                                "typeString": "contract Some_Logic_Contract"
                              }
                            ],
                            "id": 1529,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1139:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 1528,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1139:7:3",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1531,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1139:13:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "call",
                        "nodeType": "MemberAccess",
                        "src": "1139:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                        }
                      },
                      "id": 1535,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "expression": {
                            "id": 1533,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "1166:3:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "1166:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "1139:38:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 1537,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1139:49:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1096:92:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1540,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1525,
                        "src": "1202:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "50455353494d49535449435f43414c4c5f4641494c4544",
                        "id": 1541,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1211:25:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0da4aa06769726f22ca528c66ec948feca6d1a3d98ffe22b2898fca4fbf6ce2b",
                          "typeString": "literal_string \"PESSIMISTIC_CALL_FAILED\""
                        },
                        "value": "PESSIMISTIC_CALL_FAILED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0da4aa06769726f22ca528c66ec948feca6d1a3d98ffe22b2898fca4fbf6ce2b",
                          "typeString": "literal_string \"PESSIMISTIC_CALL_FAILED\""
                        }
                      ],
                      "id": 1539,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1194:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1542,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1194:43:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1543,
                  "nodeType": "ExpressionStatement",
                  "src": "1194:43:3"
                },
                {
                  "expression": {
                    "id": 1552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1544,
                      "name": "new_state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1522,
                      "src": "1277:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 1547,
                          "name": "state_bytes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1527,
                          "src": "1300:11:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 1549,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1314:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 1548,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "1314:7:3",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 1550,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1313:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          }
                        ],
                        "expression": {
                          "id": 1545,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -1,
                          "src": "1289:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 1546,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "1289:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 1551,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1289:34:3",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1277:46:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1553,
                  "nodeType": "ExpressionStatement",
                  "src": "1277:46:3"
                }
              ]
            },
            "functionSelector": "8517c187",
            "id": 1555,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "pessimistic_call",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1520,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1013:8:3"
            },
            "parameters": {
              "id": 1519,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1518,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1555,
                  "src": "970:24:3",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1517,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "970:5:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "969:26:3"
            },
            "returnParameters": {
              "id": 1523,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1522,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1555,
                  "src": "1031:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1521,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1031:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1030:19:3"
            },
            "scope": 1636,
            "src": "944:384:3",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1599,
              "nodeType": "Block",
              "src": "1465:294:3",
              "statements": [
                {
                  "expression": {
                    "id": 1574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1566,
                      "name": "current_state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1559,
                      "src": "1543:13:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 1570,
                              "name": "current_state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1559,
                              "src": "1586:13:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 1571,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1557,
                              "src": "1601:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 1568,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "1569:3:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 1569,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "1569:16:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 1572,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1569:37:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 1567,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "1559:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 1573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1559:48:3",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1543:64:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1575,
                  "nodeType": "ExpressionStatement",
                  "src": "1543:64:3"
                },
                {
                  "body": {
                    "id": 1595,
                    "nodeType": "Block",
                    "src": "1645:83:3",
                    "statements": [
                      {
                        "expression": {
                          "id": 1593,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1585,
                            "name": "current_state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1559,
                            "src": "1653:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 1589,
                                    "name": "current_state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1559,
                                    "src": "1696:13:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "id": 1590,
                                    "name": "some_arg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1561,
                                    "src": "1711:8:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "id": 1587,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -1,
                                    "src": "1679:3:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 1588,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "src": "1679:16:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 1591,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1679:41:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 1586,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "1669:9:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 1592,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1669:52:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "1653:68:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1594,
                        "nodeType": "ExpressionStatement",
                        "src": "1653:68:3"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1579,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1577,
                      "src": "1630:1:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "hexValue": "31303030",
                      "id": 1580,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1634:4:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1000_by_1",
                        "typeString": "int_const 1000"
                      },
                      "value": "1000"
                    },
                    "src": "1630:8:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1596,
                  "initializationExpression": {
                    "assignments": [
                      1577
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1577,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1596,
                        "src": "1619:9:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1576,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1619:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 1578,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1619:9:3"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 1583,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "1640:3:3",
                      "subExpression": {
                        "id": 1582,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1577,
                        "src": "1642:1:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1584,
                    "nodeType": "ExpressionStatement",
                    "src": "1640:3:3"
                  },
                  "nodeType": "ForStatement",
                  "src": "1614:114:3"
                },
                {
                  "expression": {
                    "id": 1597,
                    "name": "current_state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1559,
                    "src": "1741:13:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1565,
                  "id": 1598,
                  "nodeType": "Return",
                  "src": "1734:20:3"
                }
              ]
            },
            "functionSelector": "ef6f6a42",
            "id": 1600,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "some_pure_transition",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1562,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1557,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 1600,
                  "src": "1367:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1556,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1367:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1559,
                  "mutability": "mutable",
                  "name": "current_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1600,
                  "src": "1385:21:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1558,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1385:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1561,
                  "mutability": "mutable",
                  "name": "some_arg",
                  "nodeType": "VariableDeclaration",
                  "scope": 1600,
                  "src": "1412:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1560,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1412:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1361:71:3"
            },
            "returnParameters": {
              "id": 1565,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1564,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1600,
                  "src": "1456:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1563,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1456:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1455:9:3"
            },
            "scope": 1636,
            "src": "1332:427:3",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1634,
              "nodeType": "Block",
              "src": "1911:241:3",
              "statements": [
                {
                  "expression": {
                    "id": 1618,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1611,
                      "name": "new_state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1609,
                      "src": "1986:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1616,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 1613,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "2008:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 1614,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "number",
                            "nodeType": "MemberAccess",
                            "src": "2008:12:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 1615,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2023:1:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "2008:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1612,
                        "name": "blockhash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -5,
                        "src": "1998:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (uint256) view returns (bytes32)"
                        }
                      },
                      "id": 1617,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1998:27:3",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1986:39:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1619,
                  "nodeType": "ExpressionStatement",
                  "src": "1986:39:3"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1621,
                        "name": "new_state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1609,
                        "src": "2054:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 1620,
                      "name": "Impure_Transition",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1456,
                      "src": "2036:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 1622,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2036:28:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1623,
                  "nodeType": "EmitStatement",
                  "src": "2031:33:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 1627,
                            "name": "current_state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1604,
                            "src": "2105:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 1628,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1602,
                            "src": "2120:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 1629,
                            "name": "some_arg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1606,
                            "src": "2126:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 1630,
                            "name": "new_state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1609,
                            "src": "2136:9:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 1625,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "2088:3:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1626,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "2088:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 1631,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2088:58:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1624,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "2078:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1632,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2078:69:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1610,
                  "id": 1633,
                  "nodeType": "Return",
                  "src": "2071:76:3"
                }
              ]
            },
            "functionSelector": "816ef0b6",
            "id": 1635,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "some_impure_transition",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1607,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1602,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 1635,
                  "src": "1800:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1601,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1800:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1604,
                  "mutability": "mutable",
                  "name": "current_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1635,
                  "src": "1818:21:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1603,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1818:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1606,
                  "mutability": "mutable",
                  "name": "some_arg",
                  "nodeType": "VariableDeclaration",
                  "scope": 1635,
                  "src": "1845:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1605,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1845:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1794:71:3"
            },
            "returnParameters": {
              "id": 1610,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1609,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1635,
                  "src": "1892:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1608,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1892:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1891:19:3"
            },
            "scope": 1636,
            "src": "1763:389:3",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 1637,
        "src": "258:1896:3"
      }
    ],
    "src": "33:2122:3"
  },
  "legacyAST": {
    "absolutePath": "/Users/michaeldeluca/Projects/optimistic-roll-in/eth/contracts/some-logic-contract.sol",
    "exportedSymbols": {
      "Optimistic_Roll_In_Compatible": [
        61
      ],
      "Some_Logic_Contract": [
        1636
      ]
    },
    "id": 1637,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1448,
        "literals": [
          "solidity",
          ">=",
          "0.6",
          ".0",
          "<=",
          "0.7",
          ".3"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:32:3"
      },
      {
        "id": 1449,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:3"
      },
      {
        "absolutePath": "/Users/michaeldeluca/Projects/optimistic-roll-in/eth/contracts/optimistic-roll-in-compatible.sol",
        "file": "./optimistic-roll-in-compatible.sol",
        "id": 1450,
        "nodeType": "ImportDirective",
        "scope": 1637,
        "sourceUnit": 62,
        "src": "101:45:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 1451,
              "name": "Optimistic_Roll_In_Compatible",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 61,
              "src": "290:29:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Optimistic_Roll_In_Compatible_$61",
                "typeString": "contract Optimistic_Roll_In_Compatible"
              }
            },
            "id": 1452,
            "nodeType": "InheritanceSpecifier",
            "src": "290:29:3"
          }
        ],
        "contractDependencies": [
          61
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 1636,
        "linearizedBaseContracts": [
          1636,
          61
        ],
        "name": "Some_Logic_Contract",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "id": 1456,
            "name": "Impure_Transition",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1455,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1454,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1456,
                  "src": "348:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1453,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "348:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "347:14:3"
            },
            "src": "324:38:3"
          },
          {
            "baseFunctions": [
              46
            ],
            "body": {
              "id": 1479,
              "nodeType": "Block",
              "src": "450:121:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1468,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 1465,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "464:3:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1466,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "464:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "hexValue": "353030303030303030303030303030303030",
                          "id": 1467,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "477:18:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_500000000000000000_by_1",
                            "typeString": "int_const 500000000000000000"
                          },
                          "value": "500000000000000000"
                        },
                        "src": "464:31:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e53554646494349454e545f4445504f534954",
                        "id": 1469,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "497:22:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1bafdd5d54a45209622d7b4fbaa1b4f9a95d4eac24a9200a3c11e152a8c082fa",
                          "typeString": "literal_string \"INSUFFICIENT_DEPOSIT\""
                        },
                        "value": "INSUFFICIENT_DEPOSIT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1bafdd5d54a45209622d7b4fbaa1b4f9a95d4eac24a9200a3c11e152a8c082fa",
                          "typeString": "literal_string \"INSUFFICIENT_DEPOSIT\""
                        }
                      ],
                      "id": 1464,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "456:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "456:64:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1471,
                  "nodeType": "ExpressionStatement",
                  "src": "456:64:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 1475,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1458,
                            "src": "560:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 1473,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "543:3:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1474,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "543:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 1476,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "543:22:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1472,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "533:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "533:33:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1463,
                  "id": 1478,
                  "nodeType": "Return",
                  "src": "526:40:3"
                }
              ]
            },
            "functionSelector": "7ed30689",
            "id": 1480,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize_state",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1460,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "423:8:3"
            },
            "parameters": {
              "id": 1459,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1458,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 1480,
                  "src": "392:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1457,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "392:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "391:14:3"
            },
            "returnParameters": {
              "id": 1463,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1462,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1480,
                  "src": "441:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1461,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "441:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "440:9:3"
            },
            "scope": 1636,
            "src": "366:205:3",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              53
            ],
            "body": {
              "id": 1515,
              "nodeType": "Block",
              "src": "677:263:3",
              "statements": [
                {
                  "assignments": [
                    1489,
                    1491
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1489,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 1515,
                      "src": "724:12:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1488,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "724:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1491,
                      "mutability": "mutable",
                      "name": "state_bytes",
                      "nodeType": "VariableDeclaration",
                      "scope": 1515,
                      "src": "738:24:3",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1490,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "738:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1499,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1497,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1482,
                        "src": "791:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 1494,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "774:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Some_Logic_Contract_$1636",
                              "typeString": "contract Some_Logic_Contract"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Some_Logic_Contract_$1636",
                              "typeString": "contract Some_Logic_Contract"
                            }
                          ],
                          "id": 1493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "766:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1492,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "766:7:3",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "766:13:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1496,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "766:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 1498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "766:35:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "723:78:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1501,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1489,
                        "src": "815:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f5054494d49535449435f43414c4c5f4641494c4544",
                        "id": 1502,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "824:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_98f44e08bba93a78e1de68b2dd4ee212e58fff476b14d9f2eb4acebeb92c40a5",
                          "typeString": "literal_string \"OPTIMISTIC_CALL_FAILED\""
                        },
                        "value": "OPTIMISTIC_CALL_FAILED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_98f44e08bba93a78e1de68b2dd4ee212e58fff476b14d9f2eb4acebeb92c40a5",
                          "typeString": "literal_string \"OPTIMISTIC_CALL_FAILED\""
                        }
                      ],
                      "id": 1500,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "807:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "807:42:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1504,
                  "nodeType": "ExpressionStatement",
                  "src": "807:42:3"
                },
                {
                  "expression": {
                    "id": 1513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1505,
                      "name": "new_state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1486,
                      "src": "889:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 1508,
                          "name": "state_bytes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1491,
                          "src": "912:11:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 1510,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "926:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 1509,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "926:7:3",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 1511,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "925:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          }
                        ],
                        "expression": {
                          "id": 1506,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -1,
                          "src": "901:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 1507,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "901:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 1512,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "901:34:3",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "889:46:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1514,
                  "nodeType": "ExpressionStatement",
                  "src": "889:46:3"
                }
              ]
            },
            "functionSelector": "8821e2b1",
            "id": 1516,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "optimistic_call",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1484,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "640:8:3"
            },
            "parameters": {
              "id": 1483,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1482,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1516,
                  "src": "600:24:3",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1481,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "600:5:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "599:26:3"
            },
            "returnParameters": {
              "id": 1487,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1486,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1516,
                  "src": "658:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1485,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "658:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "657:19:3"
            },
            "scope": 1636,
            "src": "575:365:3",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              60
            ],
            "body": {
              "id": 1554,
              "nodeType": "Block",
              "src": "1050:278:3",
              "statements": [
                {
                  "assignments": [
                    1525,
                    1527
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1525,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 1554,
                      "src": "1097:12:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1524,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1097:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1527,
                      "mutability": "mutable",
                      "name": "state_bytes",
                      "nodeType": "VariableDeclaration",
                      "scope": 1554,
                      "src": "1111:24:3",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1526,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1111:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1538,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1536,
                        "name": "call_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1518,
                        "src": "1178:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "id": 1530,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "1147:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Some_Logic_Contract_$1636",
                                "typeString": "contract Some_Logic_Contract"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Some_Logic_Contract_$1636",
                                "typeString": "contract Some_Logic_Contract"
                              }
                            ],
                            "id": 1529,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1139:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 1528,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1139:7:3",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1531,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1139:13:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 1532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "call",
                        "nodeType": "MemberAccess",
                        "src": "1139:18:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                        }
                      },
                      "id": 1535,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "expression": {
                            "id": 1533,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "1166:3:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "1166:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "1139:38:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 1537,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1139:49:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1096:92:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1540,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1525,
                        "src": "1202:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "50455353494d49535449435f43414c4c5f4641494c4544",
                        "id": 1541,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1211:25:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0da4aa06769726f22ca528c66ec948feca6d1a3d98ffe22b2898fca4fbf6ce2b",
                          "typeString": "literal_string \"PESSIMISTIC_CALL_FAILED\""
                        },
                        "value": "PESSIMISTIC_CALL_FAILED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0da4aa06769726f22ca528c66ec948feca6d1a3d98ffe22b2898fca4fbf6ce2b",
                          "typeString": "literal_string \"PESSIMISTIC_CALL_FAILED\""
                        }
                      ],
                      "id": 1539,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1194:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1542,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1194:43:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1543,
                  "nodeType": "ExpressionStatement",
                  "src": "1194:43:3"
                },
                {
                  "expression": {
                    "id": 1552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1544,
                      "name": "new_state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1522,
                      "src": "1277:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 1547,
                          "name": "state_bytes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1527,
                          "src": "1300:11:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 1549,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1314:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 1548,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "1314:7:3",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 1550,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1313:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          }
                        ],
                        "expression": {
                          "id": 1545,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -1,
                          "src": "1289:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 1546,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "1289:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 1551,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1289:34:3",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1277:46:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1553,
                  "nodeType": "ExpressionStatement",
                  "src": "1277:46:3"
                }
              ]
            },
            "functionSelector": "8517c187",
            "id": 1555,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "pessimistic_call",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1520,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1013:8:3"
            },
            "parameters": {
              "id": 1519,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1518,
                  "mutability": "mutable",
                  "name": "call_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1555,
                  "src": "970:24:3",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1517,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "970:5:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "969:26:3"
            },
            "returnParameters": {
              "id": 1523,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1522,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1555,
                  "src": "1031:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1521,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1031:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1030:19:3"
            },
            "scope": 1636,
            "src": "944:384:3",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1599,
              "nodeType": "Block",
              "src": "1465:294:3",
              "statements": [
                {
                  "expression": {
                    "id": 1574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1566,
                      "name": "current_state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1559,
                      "src": "1543:13:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 1570,
                              "name": "current_state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1559,
                              "src": "1586:13:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 1571,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1557,
                              "src": "1601:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 1568,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "1569:3:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 1569,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "1569:16:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 1572,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1569:37:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 1567,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "1559:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 1573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1559:48:3",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1543:64:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1575,
                  "nodeType": "ExpressionStatement",
                  "src": "1543:64:3"
                },
                {
                  "body": {
                    "id": 1595,
                    "nodeType": "Block",
                    "src": "1645:83:3",
                    "statements": [
                      {
                        "expression": {
                          "id": 1593,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1585,
                            "name": "current_state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1559,
                            "src": "1653:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 1589,
                                    "name": "current_state",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1559,
                                    "src": "1696:13:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "id": 1590,
                                    "name": "some_arg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1561,
                                    "src": "1711:8:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "id": 1587,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -1,
                                    "src": "1679:3:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 1588,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "src": "1679:16:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 1591,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1679:41:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 1586,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "1669:9:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 1592,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1669:52:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "1653:68:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1594,
                        "nodeType": "ExpressionStatement",
                        "src": "1653:68:3"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1579,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1577,
                      "src": "1630:1:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "hexValue": "31303030",
                      "id": 1580,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1634:4:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1000_by_1",
                        "typeString": "int_const 1000"
                      },
                      "value": "1000"
                    },
                    "src": "1630:8:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1596,
                  "initializationExpression": {
                    "assignments": [
                      1577
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1577,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1596,
                        "src": "1619:9:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1576,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1619:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 1578,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1619:9:3"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 1583,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "1640:3:3",
                      "subExpression": {
                        "id": 1582,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1577,
                        "src": "1642:1:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1584,
                    "nodeType": "ExpressionStatement",
                    "src": "1640:3:3"
                  },
                  "nodeType": "ForStatement",
                  "src": "1614:114:3"
                },
                {
                  "expression": {
                    "id": 1597,
                    "name": "current_state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1559,
                    "src": "1741:13:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1565,
                  "id": 1598,
                  "nodeType": "Return",
                  "src": "1734:20:3"
                }
              ]
            },
            "functionSelector": "ef6f6a42",
            "id": 1600,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "some_pure_transition",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1562,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1557,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 1600,
                  "src": "1367:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1556,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1367:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1559,
                  "mutability": "mutable",
                  "name": "current_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1600,
                  "src": "1385:21:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1558,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1385:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1561,
                  "mutability": "mutable",
                  "name": "some_arg",
                  "nodeType": "VariableDeclaration",
                  "scope": 1600,
                  "src": "1412:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1560,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1412:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1361:71:3"
            },
            "returnParameters": {
              "id": 1565,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1564,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1600,
                  "src": "1456:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1563,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1456:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1455:9:3"
            },
            "scope": 1636,
            "src": "1332:427:3",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1634,
              "nodeType": "Block",
              "src": "1911:241:3",
              "statements": [
                {
                  "expression": {
                    "id": 1618,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1611,
                      "name": "new_state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1609,
                      "src": "1986:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1616,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 1613,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "2008:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 1614,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "number",
                            "nodeType": "MemberAccess",
                            "src": "2008:12:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 1615,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2023:1:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "2008:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1612,
                        "name": "blockhash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -5,
                        "src": "1998:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (uint256) view returns (bytes32)"
                        }
                      },
                      "id": 1617,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1998:27:3",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1986:39:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1619,
                  "nodeType": "ExpressionStatement",
                  "src": "1986:39:3"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1621,
                        "name": "new_state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1609,
                        "src": "2054:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 1620,
                      "name": "Impure_Transition",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1456,
                      "src": "2036:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 1622,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2036:28:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1623,
                  "nodeType": "EmitStatement",
                  "src": "2031:33:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 1627,
                            "name": "current_state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1604,
                            "src": "2105:13:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 1628,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1602,
                            "src": "2120:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 1629,
                            "name": "some_arg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1606,
                            "src": "2126:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 1630,
                            "name": "new_state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1609,
                            "src": "2136:9:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 1625,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "2088:3:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1626,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "2088:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 1631,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2088:58:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1624,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "2078:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1632,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2078:69:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1610,
                  "id": 1633,
                  "nodeType": "Return",
                  "src": "2071:76:3"
                }
              ]
            },
            "functionSelector": "816ef0b6",
            "id": 1635,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "some_impure_transition",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1607,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1602,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 1635,
                  "src": "1800:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1601,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1800:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1604,
                  "mutability": "mutable",
                  "name": "current_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1635,
                  "src": "1818:21:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1603,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1818:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1606,
                  "mutability": "mutable",
                  "name": "some_arg",
                  "nodeType": "VariableDeclaration",
                  "scope": 1635,
                  "src": "1845:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1605,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1845:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1794:71:3"
            },
            "returnParameters": {
              "id": 1610,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1609,
                  "mutability": "mutable",
                  "name": "new_state",
                  "nodeType": "VariableDeclaration",
                  "scope": 1635,
                  "src": "1892:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1608,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1892:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1891:19:3"
            },
            "scope": 1636,
            "src": "1763:389:3",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 1637,
        "src": "258:1896:3"
      }
    ],
    "src": "33:2122:3"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.3+commit.9bfce1f6.Emscripten.clang"
  },
  "networks": {
    "5777": {
      "events": {
        "0x1fdf57a7aa589b03313e245649cc4692a47de92b1968dfa2bc236d1f3d808383": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "bytes32",
              "name": "data",
              "type": "bytes32"
            }
          ],
          "name": "Impure_Transition",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xe66b80E3270565423434501Fb3D01354f5427C94",
      "transactionHash": "0x6ae5b4907f919c5c32cd66e5330bf3c992ecd9ae3bc461724aeae5177e1d53c0"
    }
  },
  "schemaVersion": "3.3.2",
  "updatedAt": "2020-12-11T10:00:43.267Z",
  "networkType": "ethereum",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}