{
  "contractName": "WitnetProxy",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    },
    {
      "inputs": [],
      "name": "implementation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_initData",
          "type": "bytes"
        }
      ],
      "name": "upgradeTo",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initData\",\"type\":\"bytes\"}],\"name\":\"upgradeTo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Guillermo D\\u00edaz <guillermo@otherplane.com>\",\"kind\":\"dev\",\"methods\":{\"upgradeTo(address,bytes)\":{\"params\":{\"_initData\":\"Raw data with which new implementation will be initialized.\",\"_newImplementation\":\"New implementation address.\"},\"returns\":{\"_0\":\"Returns whether new implementation would be further upgradable, or not.\"}}},\"title\":\"WitnetProxy: upgradable delegate-proxy contract. \",\"version\":1},\"userdoc\":{\"events\":{\"Upgraded(address)\":{\"notice\":\"Event emitted every time the implementation gets updated.\"}},\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Constructor with no params as to ease eventual support of Singleton pattern (i.e. ERC-2470).\"},\"implementation()\":{\"notice\":\"Returns proxy's current implementation address.\"},\"upgradeTo(address,bytes)\":{\"notice\":\"Upgrades the `implementation` address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/core/WitnetProxy.sol\":\"WitnetProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"project:/contracts/core/WitnetProxy.sol\":{\"keccak256\":\"0x2b2f56fc69bf0e01f6f1062202d1682cd394fa3b3d9ff2f8f833ab51c9e866cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8017f76a71e4a52a5a5e249081c92510bac5b91f03f727e66ff4406238521337\",\"dweb:/ipfs/QmdWcPAL3MGtxGdpX5CMfgzz4YzxYEeCiFRoGHVCr8rLEL\"]},\"project:/contracts/patterns/Initializable.sol\":{\"keccak256\":\"0xaac470e87f361cf15d68d1618d6eb7d4913885d33ccc39c797841a9591d44296\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef3760b2039feda8715d4bd9f8de8e3885f25573d12ba92f52d626ba880a08bf\",\"dweb:/ipfs/QmP2mfHPBKkjTAKft95sPDb4PBsjfmAwc47Kdcv3xYSf3g\"]},\"project:/contracts/patterns/Proxiable.sol\":{\"keccak256\":\"0x86032205378fed9ed2bf155eed8ce4bdbb13b7f5960850c6d50954a38b61a3d8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f89978eda4244a13f42a6092a94ac829bb3e38c92d77d4978b9f32894b187a63\",\"dweb:/ipfs/Qmbc1XaFCvLm3Sxvh7tP29Ug32jBGy3avsCqBGAptxs765\"]},\"project:/contracts/patterns/Upgradeable.sol\":{\"keccak256\":\"0xbeb025c71f037acb1a668174eb6930631bf397129beb825f2660e5d8cf19614f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fe6ce4dcd500093ae069d35b91829ccb471e1ca33ed0851fb053fbfe76c78aba\",\"dweb:/ipfs/QmT7huvCFS6bHDxt7HhEogJmyvYNbeb6dFTJudsVSX6nEs\"]}},\"version\":1}",
  "bytecode": "0x6080604052348015600f57600080fd5b506109e58061001f6000396000f3fe60806040526004361061002d5760003560e01c80635c60da1b146100655780636fbc15e91461009757610034565b3661003457005b600061003e6100c7565b905060405136600082376000803683855af43d806000843e818015610061578184f35b8184fd5b34801561007157600080fd5b5061007a6100c7565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b506100b76100b2366004610791565b6100f5565b604051901515815260200161008e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b60006001600160a01b0383166101525760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b600061015c6100c7565b90506001600160a01b0381161561050857806001600160a01b0316846001600160a01b0316036101ce5760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610149565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610228575060408051601f3d908101601f1916820190925261022591810190610830565b60015b6102875760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610149565b806102d45760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610149565b5060405133602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b17905251610326919061087d565b600060405180830381855af49150503d8060008114610361576040519150601f19603f3d011682016040523d82523d6000602084013e610366565b606091505b5091509150816103885760405162461bcd60e51b815260040161014990610899565b8080602001905181019061039c9190610830565b6103e85760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610149565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a91906108e0565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ac91906108e0565b146105055760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610149565b50505b600080856001600160a01b0316856040516024016105269190610925565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161055b919061087d565b600060405180830381855af49150503d8060008114610596576040519150601f19603f3d011682016040523d82523d6000602084013e61059b565b606091505b509150915081610635576044815110156106025760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610149565b6004810190508080602001905181019061061c9190610938565b60405162461bcd60e51b81526004016101499190610925565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106f5575060408051601f3d908101601f191682019092526106f291810190610830565b60015b6107115760405162461bcd60e51b815260040161014990610899565b935061071c92505050565b92915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561076157610761610722565b604052919050565b600067ffffffffffffffff82111561078357610783610722565b50601f01601f191660200190565b600080604083850312156107a457600080fd5b82356001600160a01b03811681146107bb57600080fd5b9150602083013567ffffffffffffffff8111156107d757600080fd5b8301601f810185136107e857600080fd5b80356107fb6107f682610769565b610738565b81815286602083850101111561081057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561084257600080fd5b8151801515811461085257600080fd5b9392505050565b60005b8381101561087457818101518382015260200161085c565b50506000910152565b6000825161088f818460208701610859565b9190910192915050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b6000602082840312156108f257600080fd5b5051919050565b60008151808452610911816020860160208601610859565b601f01601f19169290920160200192915050565b60208152600061085260208301846108f9565b60006020828403121561094a57600080fd5b815167ffffffffffffffff81111561096157600080fd5b8201601f8101841361097257600080fd5b80516109806107f682610769565b81815285602083850101111561099557600080fd5b6109a6826020830160208601610859565b9594505050505056fea2646970667358221220ba4d61ba6dc6b10826f1b2f21a7fb1965aee5031bae62952c0d5d7b7c16674ab64736f6c63430008190033",
  "deployedBytecode": "0x60806040526004361061002d5760003560e01c80635c60da1b146100655780636fbc15e91461009757610034565b3661003457005b600061003e6100c7565b905060405136600082376000803683855af43d806000843e818015610061578184f35b8184fd5b34801561007157600080fd5b5061007a6100c7565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b506100b76100b2366004610791565b6100f5565b604051901515815260200161008e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b60006001600160a01b0383166101525760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b600061015c6100c7565b90506001600160a01b0381161561050857806001600160a01b0316846001600160a01b0316036101ce5760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610149565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610228575060408051601f3d908101601f1916820190925261022591810190610830565b60015b6102875760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610149565b806102d45760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610149565b5060405133602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b17905251610326919061087d565b600060405180830381855af49150503d8060008114610361576040519150601f19603f3d011682016040523d82523d6000602084013e610366565b606091505b5091509150816103885760405162461bcd60e51b815260040161014990610899565b8080602001905181019061039c9190610830565b6103e85760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610149565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a91906108e0565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ac91906108e0565b146105055760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610149565b50505b600080856001600160a01b0316856040516024016105269190610925565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161055b919061087d565b600060405180830381855af49150503d8060008114610596576040519150601f19603f3d011682016040523d82523d6000602084013e61059b565b606091505b509150915081610635576044815110156106025760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610149565b6004810190508080602001905181019061061c9190610938565b60405162461bcd60e51b81526004016101499190610925565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106f5575060408051601f3d908101601f191682019092526106f291810190610830565b60015b6107115760405162461bcd60e51b815260040161014990610899565b935061071c92505050565b92915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561076157610761610722565b604052919050565b600067ffffffffffffffff82111561078357610783610722565b50601f01601f191660200190565b600080604083850312156107a457600080fd5b82356001600160a01b03811681146107bb57600080fd5b9150602083013567ffffffffffffffff8111156107d757600080fd5b8301601f810185136107e857600080fd5b80356107fb6107f682610769565b610738565b81815286602083850101111561081057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561084257600080fd5b8151801515811461085257600080fd5b9392505050565b60005b8381101561087457818101518382015260200161085c565b50506000910152565b6000825161088f818460208701610859565b9190910192915050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b6000602082840312156108f257600080fd5b5051919050565b60008151808452610911816020860160208601610859565b601f01601f19169290920160200192915050565b60208152600061085260208301846108f9565b60006020828403121561094a57600080fd5b815167ffffffffffffffff81111561096157600080fd5b8201601f8101841361097257600080fd5b80516109806107f682610769565b81815285602083850101111561099557600080fd5b6109a6826020830160208601610859565b9594505050505056fea2646970667358221220ba4d61ba6dc6b10826f1b2f21a7fb1965aee5031bae62952c0d5d7b7c16674ab64736f6c63430008190033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nativeSrc": "0:7316:84",
        "nodeType": "YulBlock",
        "src": "0:7316:84",
        "statements": [
          {
            "nativeSrc": "6:3:84",
            "nodeType": "YulBlock",
            "src": "6:3:84",
            "statements": []
          },
          {
            "body": {
              "nativeSrc": "115:102:84",
              "nodeType": "YulBlock",
              "src": "115:102:84",
              "statements": [
                {
                  "nativeSrc": "125:26:84",
                  "nodeType": "YulAssignment",
                  "src": "125:26:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "137:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "137:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "148:2:84",
                        "nodeType": "YulLiteral",
                        "src": "148:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "133:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "133:3:84"
                    },
                    "nativeSrc": "133:18:84",
                    "nodeType": "YulFunctionCall",
                    "src": "133:18:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "125:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "125:4:84"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "167:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "167:9:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "182:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "182:6:84"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "198:3:84",
                                    "nodeType": "YulLiteral",
                                    "src": "198:3:84",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "203:1:84",
                                    "nodeType": "YulLiteral",
                                    "src": "203:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nativeSrc": "194:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "194:3:84"
                                },
                                "nativeSrc": "194:11:84",
                                "nodeType": "YulFunctionCall",
                                "src": "194:11:84"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "207:1:84",
                                "nodeType": "YulLiteral",
                                "src": "207:1:84",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nativeSrc": "190:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "190:3:84"
                            },
                            "nativeSrc": "190:19:84",
                            "nodeType": "YulFunctionCall",
                            "src": "190:19:84"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "178:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "178:3:84"
                        },
                        "nativeSrc": "178:32:84",
                        "nodeType": "YulFunctionCall",
                        "src": "178:32:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "160:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "160:6:84"
                    },
                    "nativeSrc": "160:51:84",
                    "nodeType": "YulFunctionCall",
                    "src": "160:51:84"
                  },
                  "nativeSrc": "160:51:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "160:51:84"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nativeSrc": "14:203:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "84:9:84",
                "nodeType": "YulTypedName",
                "src": "84:9:84",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "95:6:84",
                "nodeType": "YulTypedName",
                "src": "95:6:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "106:4:84",
                "nodeType": "YulTypedName",
                "src": "106:4:84",
                "type": ""
              }
            ],
            "src": "14:203:84"
          },
          {
            "body": {
              "nativeSrc": "254:95:84",
              "nodeType": "YulBlock",
              "src": "254:95:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "271:1:84",
                        "nodeType": "YulLiteral",
                        "src": "271:1:84",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nativeSrc": "278:3:84",
                            "nodeType": "YulLiteral",
                            "src": "278:3:84",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "283:10:84",
                            "nodeType": "YulLiteral",
                            "src": "283:10:84",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nativeSrc": "274:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "274:3:84"
                        },
                        "nativeSrc": "274:20:84",
                        "nodeType": "YulFunctionCall",
                        "src": "274:20:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "264:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "264:6:84"
                    },
                    "nativeSrc": "264:31:84",
                    "nodeType": "YulFunctionCall",
                    "src": "264:31:84"
                  },
                  "nativeSrc": "264:31:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "264:31:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "311:1:84",
                        "nodeType": "YulLiteral",
                        "src": "311:1:84",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "314:4:84",
                        "nodeType": "YulLiteral",
                        "src": "314:4:84",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "304:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "304:6:84"
                    },
                    "nativeSrc": "304:15:84",
                    "nodeType": "YulFunctionCall",
                    "src": "304:15:84"
                  },
                  "nativeSrc": "304:15:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "304:15:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "335:1:84",
                        "nodeType": "YulLiteral",
                        "src": "335:1:84",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "338:4:84",
                        "nodeType": "YulLiteral",
                        "src": "338:4:84",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nativeSrc": "328:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "328:6:84"
                    },
                    "nativeSrc": "328:15:84",
                    "nodeType": "YulFunctionCall",
                    "src": "328:15:84"
                  },
                  "nativeSrc": "328:15:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "328:15:84"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nativeSrc": "222:127:84",
            "nodeType": "YulFunctionDefinition",
            "src": "222:127:84"
          },
          {
            "body": {
              "nativeSrc": "399:230:84",
              "nodeType": "YulBlock",
              "src": "399:230:84",
              "statements": [
                {
                  "nativeSrc": "409:19:84",
                  "nodeType": "YulAssignment",
                  "src": "409:19:84",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "425:2:84",
                        "nodeType": "YulLiteral",
                        "src": "425:2:84",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "419:5:84",
                      "nodeType": "YulIdentifier",
                      "src": "419:5:84"
                    },
                    "nativeSrc": "419:9:84",
                    "nodeType": "YulFunctionCall",
                    "src": "419:9:84"
                  },
                  "variableNames": [
                    {
                      "name": "memPtr",
                      "nativeSrc": "409:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "409:6:84"
                    }
                  ]
                },
                {
                  "nativeSrc": "437:58:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "437:58:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nativeSrc": "459:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "459:6:84"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "size",
                                "nativeSrc": "475:4:84",
                                "nodeType": "YulIdentifier",
                                "src": "475:4:84"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "481:2:84",
                                "nodeType": "YulLiteral",
                                "src": "481:2:84",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "471:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "471:3:84"
                            },
                            "nativeSrc": "471:13:84",
                            "nodeType": "YulFunctionCall",
                            "src": "471:13:84"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "490:2:84",
                                "nodeType": "YulLiteral",
                                "src": "490:2:84",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nativeSrc": "486:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "486:3:84"
                            },
                            "nativeSrc": "486:7:84",
                            "nodeType": "YulFunctionCall",
                            "src": "486:7:84"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "467:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "467:3:84"
                        },
                        "nativeSrc": "467:27:84",
                        "nodeType": "YulFunctionCall",
                        "src": "467:27:84"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "455:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "455:3:84"
                    },
                    "nativeSrc": "455:40:84",
                    "nodeType": "YulFunctionCall",
                    "src": "455:40:84"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nativeSrc": "441:10:84",
                      "nodeType": "YulTypedName",
                      "src": "441:10:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "570:22:84",
                    "nodeType": "YulBlock",
                    "src": "570:22:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nativeSrc": "572:16:84",
                            "nodeType": "YulIdentifier",
                            "src": "572:16:84"
                          },
                          "nativeSrc": "572:18:84",
                          "nodeType": "YulFunctionCall",
                          "src": "572:18:84"
                        },
                        "nativeSrc": "572:18:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "572:18:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nativeSrc": "513:10:84",
                            "nodeType": "YulIdentifier",
                            "src": "513:10:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "525:18:84",
                            "nodeType": "YulLiteral",
                            "src": "525:18:84",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nativeSrc": "510:2:84",
                          "nodeType": "YulIdentifier",
                          "src": "510:2:84"
                        },
                        "nativeSrc": "510:34:84",
                        "nodeType": "YulFunctionCall",
                        "src": "510:34:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nativeSrc": "549:10:84",
                            "nodeType": "YulIdentifier",
                            "src": "549:10:84"
                          },
                          {
                            "name": "memPtr",
                            "nativeSrc": "561:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "561:6:84"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nativeSrc": "546:2:84",
                          "nodeType": "YulIdentifier",
                          "src": "546:2:84"
                        },
                        "nativeSrc": "546:22:84",
                        "nodeType": "YulFunctionCall",
                        "src": "546:22:84"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nativeSrc": "507:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "507:2:84"
                    },
                    "nativeSrc": "507:62:84",
                    "nodeType": "YulFunctionCall",
                    "src": "507:62:84"
                  },
                  "nativeSrc": "504:88:84",
                  "nodeType": "YulIf",
                  "src": "504:88:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "608:2:84",
                        "nodeType": "YulLiteral",
                        "src": "608:2:84",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nativeSrc": "612:10:84",
                        "nodeType": "YulIdentifier",
                        "src": "612:10:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "601:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "601:6:84"
                    },
                    "nativeSrc": "601:22:84",
                    "nodeType": "YulFunctionCall",
                    "src": "601:22:84"
                  },
                  "nativeSrc": "601:22:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "601:22:84"
                }
              ]
            },
            "name": "allocate_memory",
            "nativeSrc": "354:275:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "size",
                "nativeSrc": "379:4:84",
                "nodeType": "YulTypedName",
                "src": "379:4:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "memPtr",
                "nativeSrc": "388:6:84",
                "nodeType": "YulTypedName",
                "src": "388:6:84",
                "type": ""
              }
            ],
            "src": "354:275:84"
          },
          {
            "body": {
              "nativeSrc": "691:129:84",
              "nodeType": "YulBlock",
              "src": "691:129:84",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "735:22:84",
                    "nodeType": "YulBlock",
                    "src": "735:22:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nativeSrc": "737:16:84",
                            "nodeType": "YulIdentifier",
                            "src": "737:16:84"
                          },
                          "nativeSrc": "737:18:84",
                          "nodeType": "YulFunctionCall",
                          "src": "737:18:84"
                        },
                        "nativeSrc": "737:18:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "737:18:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nativeSrc": "707:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "707:6:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "715:18:84",
                        "nodeType": "YulLiteral",
                        "src": "715:18:84",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "704:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "704:2:84"
                    },
                    "nativeSrc": "704:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "704:30:84"
                  },
                  "nativeSrc": "701:56:84",
                  "nodeType": "YulIf",
                  "src": "701:56:84"
                },
                {
                  "nativeSrc": "766:48:84",
                  "nodeType": "YulAssignment",
                  "src": "766:48:84",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "length",
                                "nativeSrc": "786:6:84",
                                "nodeType": "YulIdentifier",
                                "src": "786:6:84"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "794:2:84",
                                "nodeType": "YulLiteral",
                                "src": "794:2:84",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "782:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "782:3:84"
                            },
                            "nativeSrc": "782:15:84",
                            "nodeType": "YulFunctionCall",
                            "src": "782:15:84"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "803:2:84",
                                "nodeType": "YulLiteral",
                                "src": "803:2:84",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nativeSrc": "799:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "799:3:84"
                            },
                            "nativeSrc": "799:7:84",
                            "nodeType": "YulFunctionCall",
                            "src": "799:7:84"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "778:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "778:3:84"
                        },
                        "nativeSrc": "778:29:84",
                        "nodeType": "YulFunctionCall",
                        "src": "778:29:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "809:4:84",
                        "nodeType": "YulLiteral",
                        "src": "809:4:84",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "774:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "774:3:84"
                    },
                    "nativeSrc": "774:40:84",
                    "nodeType": "YulFunctionCall",
                    "src": "774:40:84"
                  },
                  "variableNames": [
                    {
                      "name": "size",
                      "nativeSrc": "766:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "766:4:84"
                    }
                  ]
                }
              ]
            },
            "name": "array_allocation_size_bytes",
            "nativeSrc": "634:186:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "length",
                "nativeSrc": "671:6:84",
                "nodeType": "YulTypedName",
                "src": "671:6:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "size",
                "nativeSrc": "682:4:84",
                "nodeType": "YulTypedName",
                "src": "682:4:84",
                "type": ""
              }
            ],
            "src": "634:186:84"
          },
          {
            "body": {
              "nativeSrc": "921:749:84",
              "nodeType": "YulBlock",
              "src": "921:749:84",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "967:16:84",
                    "nodeType": "YulBlock",
                    "src": "967:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "976:1:84",
                              "nodeType": "YulLiteral",
                              "src": "976:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "979:1:84",
                              "nodeType": "YulLiteral",
                              "src": "979:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "969:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "969:6:84"
                          },
                          "nativeSrc": "969:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "969:12:84"
                        },
                        "nativeSrc": "969:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "969:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "942:7:84",
                            "nodeType": "YulIdentifier",
                            "src": "942:7:84"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "951:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "951:9:84"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "938:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "938:3:84"
                        },
                        "nativeSrc": "938:23:84",
                        "nodeType": "YulFunctionCall",
                        "src": "938:23:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "963:2:84",
                        "nodeType": "YulLiteral",
                        "src": "963:2:84",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "934:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "934:3:84"
                    },
                    "nativeSrc": "934:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "934:32:84"
                  },
                  "nativeSrc": "931:52:84",
                  "nodeType": "YulIf",
                  "src": "931:52:84"
                },
                {
                  "nativeSrc": "992:36:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "992:36:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1018:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "1018:9:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1005:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "1005:12:84"
                    },
                    "nativeSrc": "1005:23:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1005:23:84"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nativeSrc": "996:5:84",
                      "nodeType": "YulTypedName",
                      "src": "996:5:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "1091:16:84",
                    "nodeType": "YulBlock",
                    "src": "1091:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1100:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1100:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1103:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1103:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1093:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1093:6:84"
                          },
                          "nativeSrc": "1093:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "1093:12:84"
                        },
                        "nativeSrc": "1093:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "1093:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nativeSrc": "1050:5:84",
                            "nodeType": "YulIdentifier",
                            "src": "1050:5:84"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nativeSrc": "1061:5:84",
                                "nodeType": "YulIdentifier",
                                "src": "1061:5:84"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1076:3:84",
                                        "nodeType": "YulLiteral",
                                        "src": "1076:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1081:1:84",
                                        "nodeType": "YulLiteral",
                                        "src": "1081:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nativeSrc": "1072:3:84",
                                      "nodeType": "YulIdentifier",
                                      "src": "1072:3:84"
                                    },
                                    "nativeSrc": "1072:11:84",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1072:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1085:1:84",
                                    "nodeType": "YulLiteral",
                                    "src": "1085:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nativeSrc": "1068:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "1068:3:84"
                                },
                                "nativeSrc": "1068:19:84",
                                "nodeType": "YulFunctionCall",
                                "src": "1068:19:84"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nativeSrc": "1057:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "1057:3:84"
                            },
                            "nativeSrc": "1057:31:84",
                            "nodeType": "YulFunctionCall",
                            "src": "1057:31:84"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nativeSrc": "1047:2:84",
                          "nodeType": "YulIdentifier",
                          "src": "1047:2:84"
                        },
                        "nativeSrc": "1047:42:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1047:42:84"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "1040:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1040:6:84"
                    },
                    "nativeSrc": "1040:50:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1040:50:84"
                  },
                  "nativeSrc": "1037:70:84",
                  "nodeType": "YulIf",
                  "src": "1037:70:84"
                },
                {
                  "nativeSrc": "1116:15:84",
                  "nodeType": "YulAssignment",
                  "src": "1116:15:84",
                  "value": {
                    "name": "value",
                    "nativeSrc": "1126:5:84",
                    "nodeType": "YulIdentifier",
                    "src": "1126:5:84"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "1116:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1116:6:84"
                    }
                  ]
                },
                {
                  "nativeSrc": "1140:46:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1140:46:84",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "1171:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "1171:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1182:2:84",
                            "nodeType": "YulLiteral",
                            "src": "1182:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1167:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1167:3:84"
                        },
                        "nativeSrc": "1167:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1167:18:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1154:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "1154:12:84"
                    },
                    "nativeSrc": "1154:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1154:32:84"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nativeSrc": "1144:6:84",
                      "nodeType": "YulTypedName",
                      "src": "1144:6:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "1229:16:84",
                    "nodeType": "YulBlock",
                    "src": "1229:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1238:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1238:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1241:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1241:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1231:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1231:6:84"
                          },
                          "nativeSrc": "1231:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "1231:12:84"
                        },
                        "nativeSrc": "1231:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "1231:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nativeSrc": "1201:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "1201:6:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1209:18:84",
                        "nodeType": "YulLiteral",
                        "src": "1209:18:84",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "1198:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "1198:2:84"
                    },
                    "nativeSrc": "1198:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1198:30:84"
                  },
                  "nativeSrc": "1195:50:84",
                  "nodeType": "YulIf",
                  "src": "1195:50:84"
                },
                {
                  "nativeSrc": "1254:32:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1254:32:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1268:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "1268:9:84"
                      },
                      {
                        "name": "offset",
                        "nativeSrc": "1279:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "1279:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "1264:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "1264:3:84"
                    },
                    "nativeSrc": "1264:22:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1264:22:84"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nativeSrc": "1258:2:84",
                      "nodeType": "YulTypedName",
                      "src": "1258:2:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "1334:16:84",
                    "nodeType": "YulBlock",
                    "src": "1334:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1343:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1343:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1346:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1346:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1336:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1336:6:84"
                          },
                          "nativeSrc": "1336:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "1336:12:84"
                        },
                        "nativeSrc": "1336:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "1336:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nativeSrc": "1313:2:84",
                                "nodeType": "YulIdentifier",
                                "src": "1313:2:84"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "1317:4:84",
                                "nodeType": "YulLiteral",
                                "src": "1317:4:84",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "1309:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "1309:3:84"
                            },
                            "nativeSrc": "1309:13:84",
                            "nodeType": "YulFunctionCall",
                            "src": "1309:13:84"
                          },
                          {
                            "name": "dataEnd",
                            "nativeSrc": "1324:7:84",
                            "nodeType": "YulIdentifier",
                            "src": "1324:7:84"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nativeSrc": "1305:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1305:3:84"
                        },
                        "nativeSrc": "1305:27:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1305:27:84"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "1298:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1298:6:84"
                    },
                    "nativeSrc": "1298:35:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1298:35:84"
                  },
                  "nativeSrc": "1295:55:84",
                  "nodeType": "YulIf",
                  "src": "1295:55:84"
                },
                {
                  "nativeSrc": "1359:26:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1359:26:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nativeSrc": "1382:2:84",
                        "nodeType": "YulIdentifier",
                        "src": "1382:2:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1369:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "1369:12:84"
                    },
                    "nativeSrc": "1369:16:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1369:16:84"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nativeSrc": "1363:2:84",
                      "nodeType": "YulTypedName",
                      "src": "1363:2:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "1394:61:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1394:61:84",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_2",
                            "nativeSrc": "1451:2:84",
                            "nodeType": "YulIdentifier",
                            "src": "1451:2:84"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_bytes",
                          "nativeSrc": "1423:27:84",
                          "nodeType": "YulIdentifier",
                          "src": "1423:27:84"
                        },
                        "nativeSrc": "1423:31:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1423:31:84"
                      }
                    ],
                    "functionName": {
                      "name": "allocate_memory",
                      "nativeSrc": "1407:15:84",
                      "nodeType": "YulIdentifier",
                      "src": "1407:15:84"
                    },
                    "nativeSrc": "1407:48:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1407:48:84"
                  },
                  "variables": [
                    {
                      "name": "array",
                      "nativeSrc": "1398:5:84",
                      "nodeType": "YulTypedName",
                      "src": "1398:5:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "array",
                        "nativeSrc": "1471:5:84",
                        "nodeType": "YulIdentifier",
                        "src": "1471:5:84"
                      },
                      {
                        "name": "_2",
                        "nativeSrc": "1478:2:84",
                        "nodeType": "YulIdentifier",
                        "src": "1478:2:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1464:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1464:6:84"
                    },
                    "nativeSrc": "1464:17:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1464:17:84"
                  },
                  "nativeSrc": "1464:17:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "1464:17:84"
                },
                {
                  "body": {
                    "nativeSrc": "1527:16:84",
                    "nodeType": "YulBlock",
                    "src": "1527:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1536:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1536:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1539:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1539:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1529:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1529:6:84"
                          },
                          "nativeSrc": "1529:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "1529:12:84"
                        },
                        "nativeSrc": "1529:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "1529:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nativeSrc": "1504:2:84",
                                "nodeType": "YulIdentifier",
                                "src": "1504:2:84"
                              },
                              {
                                "name": "_2",
                                "nativeSrc": "1508:2:84",
                                "nodeType": "YulIdentifier",
                                "src": "1508:2:84"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "1500:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "1500:3:84"
                            },
                            "nativeSrc": "1500:11:84",
                            "nodeType": "YulFunctionCall",
                            "src": "1500:11:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1513:2:84",
                            "nodeType": "YulLiteral",
                            "src": "1513:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1496:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1496:3:84"
                        },
                        "nativeSrc": "1496:20:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1496:20:84"
                      },
                      {
                        "name": "dataEnd",
                        "nativeSrc": "1518:7:84",
                        "nodeType": "YulIdentifier",
                        "src": "1518:7:84"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "1493:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "1493:2:84"
                    },
                    "nativeSrc": "1493:33:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1493:33:84"
                  },
                  "nativeSrc": "1490:53:84",
                  "nodeType": "YulIf",
                  "src": "1490:53:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "array",
                            "nativeSrc": "1569:5:84",
                            "nodeType": "YulIdentifier",
                            "src": "1569:5:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1576:2:84",
                            "nodeType": "YulLiteral",
                            "src": "1576:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1565:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1565:3:84"
                        },
                        "nativeSrc": "1565:14:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1565:14:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "_1",
                            "nativeSrc": "1585:2:84",
                            "nodeType": "YulIdentifier",
                            "src": "1585:2:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1589:2:84",
                            "nodeType": "YulLiteral",
                            "src": "1589:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1581:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1581:3:84"
                        },
                        "nativeSrc": "1581:11:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1581:11:84"
                      },
                      {
                        "name": "_2",
                        "nativeSrc": "1594:2:84",
                        "nodeType": "YulIdentifier",
                        "src": "1594:2:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nativeSrc": "1552:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "1552:12:84"
                    },
                    "nativeSrc": "1552:45:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1552:45:84"
                  },
                  "nativeSrc": "1552:45:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "1552:45:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "array",
                                "nativeSrc": "1621:5:84",
                                "nodeType": "YulIdentifier",
                                "src": "1621:5:84"
                              },
                              {
                                "name": "_2",
                                "nativeSrc": "1628:2:84",
                                "nodeType": "YulIdentifier",
                                "src": "1628:2:84"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "1617:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "1617:3:84"
                            },
                            "nativeSrc": "1617:14:84",
                            "nodeType": "YulFunctionCall",
                            "src": "1617:14:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1633:2:84",
                            "nodeType": "YulLiteral",
                            "src": "1633:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1613:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1613:3:84"
                        },
                        "nativeSrc": "1613:23:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1613:23:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1638:1:84",
                        "nodeType": "YulLiteral",
                        "src": "1638:1:84",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1606:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1606:6:84"
                    },
                    "nativeSrc": "1606:34:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1606:34:84"
                  },
                  "nativeSrc": "1606:34:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "1606:34:84"
                },
                {
                  "nativeSrc": "1649:15:84",
                  "nodeType": "YulAssignment",
                  "src": "1649:15:84",
                  "value": {
                    "name": "array",
                    "nativeSrc": "1659:5:84",
                    "nodeType": "YulIdentifier",
                    "src": "1659:5:84"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nativeSrc": "1649:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1649:6:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_bytes_memory_ptr",
            "nativeSrc": "825:845:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "879:9:84",
                "nodeType": "YulTypedName",
                "src": "879:9:84",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "890:7:84",
                "nodeType": "YulTypedName",
                "src": "890:7:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "902:6:84",
                "nodeType": "YulTypedName",
                "src": "902:6:84",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "910:6:84",
                "nodeType": "YulTypedName",
                "src": "910:6:84",
                "type": ""
              }
            ],
            "src": "825:845:84"
          },
          {
            "body": {
              "nativeSrc": "1770:92:84",
              "nodeType": "YulBlock",
              "src": "1770:92:84",
              "statements": [
                {
                  "nativeSrc": "1780:26:84",
                  "nodeType": "YulAssignment",
                  "src": "1780:26:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1792:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "1792:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1803:2:84",
                        "nodeType": "YulLiteral",
                        "src": "1803:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "1788:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "1788:3:84"
                    },
                    "nativeSrc": "1788:18:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1788:18:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "1780:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "1780:4:84"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1822:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "1822:9:84"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nativeSrc": "1847:6:84",
                                "nodeType": "YulIdentifier",
                                "src": "1847:6:84"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nativeSrc": "1840:6:84",
                              "nodeType": "YulIdentifier",
                              "src": "1840:6:84"
                            },
                            "nativeSrc": "1840:14:84",
                            "nodeType": "YulFunctionCall",
                            "src": "1840:14:84"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nativeSrc": "1833:6:84",
                          "nodeType": "YulIdentifier",
                          "src": "1833:6:84"
                        },
                        "nativeSrc": "1833:22:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1833:22:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1815:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1815:6:84"
                    },
                    "nativeSrc": "1815:41:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1815:41:84"
                  },
                  "nativeSrc": "1815:41:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "1815:41:84"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nativeSrc": "1675:187:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "1739:9:84",
                "nodeType": "YulTypedName",
                "src": "1739:9:84",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "1750:6:84",
                "nodeType": "YulTypedName",
                "src": "1750:6:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "1761:4:84",
                "nodeType": "YulTypedName",
                "src": "1761:4:84",
                "type": ""
              }
            ],
            "src": "1675:187:84"
          },
          {
            "body": {
              "nativeSrc": "2041:182:84",
              "nodeType": "YulBlock",
              "src": "2041:182:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2058:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "2058:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2069:2:84",
                        "nodeType": "YulLiteral",
                        "src": "2069:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2051:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2051:6:84"
                    },
                    "nativeSrc": "2051:21:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2051:21:84"
                  },
                  "nativeSrc": "2051:21:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "2051:21:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2092:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "2092:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2103:2:84",
                            "nodeType": "YulLiteral",
                            "src": "2103:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2088:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "2088:3:84"
                        },
                        "nativeSrc": "2088:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2088:18:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2108:2:84",
                        "nodeType": "YulLiteral",
                        "src": "2108:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2081:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2081:6:84"
                    },
                    "nativeSrc": "2081:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2081:30:84"
                  },
                  "nativeSrc": "2081:30:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "2081:30:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2131:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "2131:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2142:2:84",
                            "nodeType": "YulLiteral",
                            "src": "2142:2:84",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2127:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "2127:3:84"
                        },
                        "nativeSrc": "2127:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2127:18:84"
                      },
                      {
                        "hexValue": "5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e",
                        "kind": "string",
                        "nativeSrc": "2147:34:84",
                        "nodeType": "YulLiteral",
                        "src": "2147:34:84",
                        "type": "",
                        "value": "WitnetProxy: null implementation"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2120:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2120:6:84"
                    },
                    "nativeSrc": "2120:62:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2120:62:84"
                  },
                  "nativeSrc": "2120:62:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "2120:62:84"
                },
                {
                  "nativeSrc": "2191:26:84",
                  "nodeType": "YulAssignment",
                  "src": "2191:26:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2203:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "2203:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2214:2:84",
                        "nodeType": "YulLiteral",
                        "src": "2214:2:84",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "2199:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "2199:3:84"
                    },
                    "nativeSrc": "2199:18:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2199:18:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "2191:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "2191:4:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_d599eaa5e68d91d75c142446490ab9a15fd0284a41ce949219b5b4d8f267239a__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "1867:356:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "2018:9:84",
                "nodeType": "YulTypedName",
                "src": "2018:9:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "2032:4:84",
                "nodeType": "YulTypedName",
                "src": "2032:4:84",
                "type": ""
              }
            ],
            "src": "1867:356:84"
          },
          {
            "body": {
              "nativeSrc": "2402:181:84",
              "nodeType": "YulBlock",
              "src": "2402:181:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2419:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "2419:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2430:2:84",
                        "nodeType": "YulLiteral",
                        "src": "2430:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2412:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2412:6:84"
                    },
                    "nativeSrc": "2412:21:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2412:21:84"
                  },
                  "nativeSrc": "2412:21:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "2412:21:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2453:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "2453:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2464:2:84",
                            "nodeType": "YulLiteral",
                            "src": "2464:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2449:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "2449:3:84"
                        },
                        "nativeSrc": "2449:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2449:18:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2469:2:84",
                        "nodeType": "YulLiteral",
                        "src": "2469:2:84",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2442:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2442:6:84"
                    },
                    "nativeSrc": "2442:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2442:30:84"
                  },
                  "nativeSrc": "2442:30:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "2442:30:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2492:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "2492:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2503:2:84",
                            "nodeType": "YulLiteral",
                            "src": "2503:2:84",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2488:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "2488:3:84"
                        },
                        "nativeSrc": "2488:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2488:18:84"
                      },
                      {
                        "hexValue": "5769746e657450726f78793a206e6f7468696e6720746f2075706772616465",
                        "kind": "string",
                        "nativeSrc": "2508:33:84",
                        "nodeType": "YulLiteral",
                        "src": "2508:33:84",
                        "type": "",
                        "value": "WitnetProxy: nothing to upgrade"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2481:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2481:6:84"
                    },
                    "nativeSrc": "2481:61:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2481:61:84"
                  },
                  "nativeSrc": "2481:61:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "2481:61:84"
                },
                {
                  "nativeSrc": "2551:26:84",
                  "nodeType": "YulAssignment",
                  "src": "2551:26:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2563:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "2563:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2574:2:84",
                        "nodeType": "YulLiteral",
                        "src": "2574:2:84",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "2559:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "2559:3:84"
                    },
                    "nativeSrc": "2559:18:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2559:18:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "2551:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "2551:4:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_e332eab1bae45430d1201a30c0d80d8fcb5570f9e70201a9eb7b229e17fd2084__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "2228:355:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "2379:9:84",
                "nodeType": "YulTypedName",
                "src": "2379:9:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "2393:4:84",
                "nodeType": "YulTypedName",
                "src": "2393:4:84",
                "type": ""
              }
            ],
            "src": "2228:355:84"
          },
          {
            "body": {
              "nativeSrc": "2666:199:84",
              "nodeType": "YulBlock",
              "src": "2666:199:84",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "2712:16:84",
                    "nodeType": "YulBlock",
                    "src": "2712:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "2721:1:84",
                              "nodeType": "YulLiteral",
                              "src": "2721:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "2724:1:84",
                              "nodeType": "YulLiteral",
                              "src": "2724:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "2714:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "2714:6:84"
                          },
                          "nativeSrc": "2714:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "2714:12:84"
                        },
                        "nativeSrc": "2714:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "2714:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "2687:7:84",
                            "nodeType": "YulIdentifier",
                            "src": "2687:7:84"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "2696:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "2696:9:84"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "2683:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "2683:3:84"
                        },
                        "nativeSrc": "2683:23:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2683:23:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2708:2:84",
                        "nodeType": "YulLiteral",
                        "src": "2708:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "2679:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "2679:3:84"
                    },
                    "nativeSrc": "2679:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2679:32:84"
                  },
                  "nativeSrc": "2676:52:84",
                  "nodeType": "YulIf",
                  "src": "2676:52:84"
                },
                {
                  "nativeSrc": "2737:29:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "2737:29:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2756:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "2756:9:84"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "2750:5:84",
                      "nodeType": "YulIdentifier",
                      "src": "2750:5:84"
                    },
                    "nativeSrc": "2750:16:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2750:16:84"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nativeSrc": "2741:5:84",
                      "nodeType": "YulTypedName",
                      "src": "2741:5:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "2819:16:84",
                    "nodeType": "YulBlock",
                    "src": "2819:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "2828:1:84",
                              "nodeType": "YulLiteral",
                              "src": "2828:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "2831:1:84",
                              "nodeType": "YulLiteral",
                              "src": "2831:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "2821:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "2821:6:84"
                          },
                          "nativeSrc": "2821:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "2821:12:84"
                        },
                        "nativeSrc": "2821:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "2821:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nativeSrc": "2788:5:84",
                            "nodeType": "YulIdentifier",
                            "src": "2788:5:84"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nativeSrc": "2809:5:84",
                                    "nodeType": "YulIdentifier",
                                    "src": "2809:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nativeSrc": "2802:6:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "2802:6:84"
                                },
                                "nativeSrc": "2802:13:84",
                                "nodeType": "YulFunctionCall",
                                "src": "2802:13:84"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nativeSrc": "2795:6:84",
                              "nodeType": "YulIdentifier",
                              "src": "2795:6:84"
                            },
                            "nativeSrc": "2795:21:84",
                            "nodeType": "YulFunctionCall",
                            "src": "2795:21:84"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nativeSrc": "2785:2:84",
                          "nodeType": "YulIdentifier",
                          "src": "2785:2:84"
                        },
                        "nativeSrc": "2785:32:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2785:32:84"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "2778:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2778:6:84"
                    },
                    "nativeSrc": "2778:40:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2778:40:84"
                  },
                  "nativeSrc": "2775:60:84",
                  "nodeType": "YulIf",
                  "src": "2775:60:84"
                },
                {
                  "nativeSrc": "2844:15:84",
                  "nodeType": "YulAssignment",
                  "src": "2844:15:84",
                  "value": {
                    "name": "value",
                    "nativeSrc": "2854:5:84",
                    "nodeType": "YulIdentifier",
                    "src": "2854:5:84"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "2844:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2844:6:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nativeSrc": "2588:277:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "2632:9:84",
                "nodeType": "YulTypedName",
                "src": "2632:9:84",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "2643:7:84",
                "nodeType": "YulTypedName",
                "src": "2643:7:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "2655:6:84",
                "nodeType": "YulTypedName",
                "src": "2655:6:84",
                "type": ""
              }
            ],
            "src": "2588:277:84"
          },
          {
            "body": {
              "nativeSrc": "3044:232:84",
              "nodeType": "YulBlock",
              "src": "3044:232:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3061:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "3061:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3072:2:84",
                        "nodeType": "YulLiteral",
                        "src": "3072:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3054:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3054:6:84"
                    },
                    "nativeSrc": "3054:21:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3054:21:84"
                  },
                  "nativeSrc": "3054:21:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3054:21:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3095:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "3095:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3106:2:84",
                            "nodeType": "YulLiteral",
                            "src": "3106:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3091:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3091:3:84"
                        },
                        "nativeSrc": "3091:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3091:18:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3111:2:84",
                        "nodeType": "YulLiteral",
                        "src": "3111:2:84",
                        "type": "",
                        "value": "42"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3084:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3084:6:84"
                    },
                    "nativeSrc": "3084:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3084:30:84"
                  },
                  "nativeSrc": "3084:30:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3084:30:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3134:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "3134:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3145:2:84",
                            "nodeType": "YulLiteral",
                            "src": "3145:2:84",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3130:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3130:3:84"
                        },
                        "nativeSrc": "3130:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3130:18:84"
                      },
                      {
                        "hexValue": "5769746e657450726f78793a20756e61626c6520746f20636865636b20757067",
                        "kind": "string",
                        "nativeSrc": "3150:34:84",
                        "nodeType": "YulLiteral",
                        "src": "3150:34:84",
                        "type": "",
                        "value": "WitnetProxy: unable to check upg"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3123:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3123:6:84"
                    },
                    "nativeSrc": "3123:62:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3123:62:84"
                  },
                  "nativeSrc": "3123:62:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3123:62:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3205:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "3205:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3216:2:84",
                            "nodeType": "YulLiteral",
                            "src": "3216:2:84",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3201:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3201:3:84"
                        },
                        "nativeSrc": "3201:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3201:18:84"
                      },
                      {
                        "hexValue": "7261646162696c697479",
                        "kind": "string",
                        "nativeSrc": "3221:12:84",
                        "nodeType": "YulLiteral",
                        "src": "3221:12:84",
                        "type": "",
                        "value": "radability"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3194:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3194:6:84"
                    },
                    "nativeSrc": "3194:40:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3194:40:84"
                  },
                  "nativeSrc": "3194:40:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3194:40:84"
                },
                {
                  "nativeSrc": "3243:27:84",
                  "nodeType": "YulAssignment",
                  "src": "3243:27:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3255:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "3255:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3266:3:84",
                        "nodeType": "YulLiteral",
                        "src": "3266:3:84",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "3251:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "3251:3:84"
                    },
                    "nativeSrc": "3251:19:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3251:19:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "3243:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "3243:4:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_7f859058ad3ee4e192700ff813ed67dc892a0c7de91510ee584a0ac25fc982fc__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "2870:406:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "3021:9:84",
                "nodeType": "YulTypedName",
                "src": "3021:9:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "3035:4:84",
                "nodeType": "YulTypedName",
                "src": "3035:4:84",
                "type": ""
              }
            ],
            "src": "2870:406:84"
          },
          {
            "body": {
              "nativeSrc": "3455:177:84",
              "nodeType": "YulBlock",
              "src": "3455:177:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3472:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "3472:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3483:2:84",
                        "nodeType": "YulLiteral",
                        "src": "3483:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3465:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3465:6:84"
                    },
                    "nativeSrc": "3465:21:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3465:21:84"
                  },
                  "nativeSrc": "3465:21:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3465:21:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3506:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "3506:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3517:2:84",
                            "nodeType": "YulLiteral",
                            "src": "3517:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3502:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3502:3:84"
                        },
                        "nativeSrc": "3502:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3502:18:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3522:2:84",
                        "nodeType": "YulLiteral",
                        "src": "3522:2:84",
                        "type": "",
                        "value": "27"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3495:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3495:6:84"
                    },
                    "nativeSrc": "3495:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3495:30:84"
                  },
                  "nativeSrc": "3495:30:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3495:30:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3545:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "3545:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3556:2:84",
                            "nodeType": "YulLiteral",
                            "src": "3556:2:84",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3541:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3541:3:84"
                        },
                        "nativeSrc": "3541:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3541:18:84"
                      },
                      {
                        "hexValue": "5769746e657450726f78793a206e6f742075706772616461626c65",
                        "kind": "string",
                        "nativeSrc": "3561:29:84",
                        "nodeType": "YulLiteral",
                        "src": "3561:29:84",
                        "type": "",
                        "value": "WitnetProxy: not upgradable"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3534:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3534:6:84"
                    },
                    "nativeSrc": "3534:57:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3534:57:84"
                  },
                  "nativeSrc": "3534:57:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3534:57:84"
                },
                {
                  "nativeSrc": "3600:26:84",
                  "nodeType": "YulAssignment",
                  "src": "3600:26:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3612:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "3612:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3623:2:84",
                        "nodeType": "YulLiteral",
                        "src": "3623:2:84",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "3608:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "3608:3:84"
                    },
                    "nativeSrc": "3608:18:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3608:18:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "3600:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "3600:4:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_d96132834a96bae5cb2f32cb07f13985dcde0f2358055c198eb3065af6c5aa7f__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "3281:351:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "3432:9:84",
                "nodeType": "YulTypedName",
                "src": "3432:9:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "3446:4:84",
                "nodeType": "YulTypedName",
                "src": "3446:4:84",
                "type": ""
              }
            ],
            "src": "3281:351:84"
          },
          {
            "body": {
              "nativeSrc": "3703:184:84",
              "nodeType": "YulBlock",
              "src": "3703:184:84",
              "statements": [
                {
                  "nativeSrc": "3713:10:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "3713:10:84",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "3722:1:84",
                    "nodeType": "YulLiteral",
                    "src": "3722:1:84",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nativeSrc": "3717:1:84",
                      "nodeType": "YulTypedName",
                      "src": "3717:1:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "3782:63:84",
                    "nodeType": "YulBlock",
                    "src": "3782:63:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nativeSrc": "3807:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "3807:3:84"
                                },
                                {
                                  "name": "i",
                                  "nativeSrc": "3812:1:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "3812:1:84"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "3803:3:84",
                                "nodeType": "YulIdentifier",
                                "src": "3803:3:84"
                              },
                              "nativeSrc": "3803:11:84",
                              "nodeType": "YulFunctionCall",
                              "src": "3803:11:84"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "src",
                                      "nativeSrc": "3826:3:84",
                                      "nodeType": "YulIdentifier",
                                      "src": "3826:3:84"
                                    },
                                    {
                                      "name": "i",
                                      "nativeSrc": "3831:1:84",
                                      "nodeType": "YulIdentifier",
                                      "src": "3831:1:84"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nativeSrc": "3822:3:84",
                                    "nodeType": "YulIdentifier",
                                    "src": "3822:3:84"
                                  },
                                  "nativeSrc": "3822:11:84",
                                  "nodeType": "YulFunctionCall",
                                  "src": "3822:11:84"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nativeSrc": "3816:5:84",
                                "nodeType": "YulIdentifier",
                                "src": "3816:5:84"
                              },
                              "nativeSrc": "3816:18:84",
                              "nodeType": "YulFunctionCall",
                              "src": "3816:18:84"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "3796:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "3796:6:84"
                          },
                          "nativeSrc": "3796:39:84",
                          "nodeType": "YulFunctionCall",
                          "src": "3796:39:84"
                        },
                        "nativeSrc": "3796:39:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "3796:39:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nativeSrc": "3743:1:84",
                        "nodeType": "YulIdentifier",
                        "src": "3743:1:84"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "3746:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "3746:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nativeSrc": "3740:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "3740:2:84"
                    },
                    "nativeSrc": "3740:13:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3740:13:84"
                  },
                  "nativeSrc": "3732:113:84",
                  "nodeType": "YulForLoop",
                  "post": {
                    "nativeSrc": "3754:19:84",
                    "nodeType": "YulBlock",
                    "src": "3754:19:84",
                    "statements": [
                      {
                        "nativeSrc": "3756:15:84",
                        "nodeType": "YulAssignment",
                        "src": "3756:15:84",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nativeSrc": "3765:1:84",
                              "nodeType": "YulIdentifier",
                              "src": "3765:1:84"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "3768:2:84",
                              "nodeType": "YulLiteral",
                              "src": "3768:2:84",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nativeSrc": "3761:3:84",
                            "nodeType": "YulIdentifier",
                            "src": "3761:3:84"
                          },
                          "nativeSrc": "3761:10:84",
                          "nodeType": "YulFunctionCall",
                          "src": "3761:10:84"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nativeSrc": "3756:1:84",
                            "nodeType": "YulIdentifier",
                            "src": "3756:1:84"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nativeSrc": "3736:3:84",
                    "nodeType": "YulBlock",
                    "src": "3736:3:84",
                    "statements": []
                  },
                  "src": "3732:113:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dst",
                            "nativeSrc": "3865:3:84",
                            "nodeType": "YulIdentifier",
                            "src": "3865:3:84"
                          },
                          {
                            "name": "length",
                            "nativeSrc": "3870:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "3870:6:84"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3861:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3861:3:84"
                        },
                        "nativeSrc": "3861:16:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3861:16:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3879:1:84",
                        "nodeType": "YulLiteral",
                        "src": "3879:1:84",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3854:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3854:6:84"
                    },
                    "nativeSrc": "3854:27:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3854:27:84"
                  },
                  "nativeSrc": "3854:27:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3854:27:84"
                }
              ]
            },
            "name": "copy_memory_to_memory_with_cleanup",
            "nativeSrc": "3637:250:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nativeSrc": "3681:3:84",
                "nodeType": "YulTypedName",
                "src": "3681:3:84",
                "type": ""
              },
              {
                "name": "dst",
                "nativeSrc": "3686:3:84",
                "nodeType": "YulTypedName",
                "src": "3686:3:84",
                "type": ""
              },
              {
                "name": "length",
                "nativeSrc": "3691:6:84",
                "nodeType": "YulTypedName",
                "src": "3691:6:84",
                "type": ""
              }
            ],
            "src": "3637:250:84"
          },
          {
            "body": {
              "nativeSrc": "4029:150:84",
              "nodeType": "YulBlock",
              "src": "4029:150:84",
              "statements": [
                {
                  "nativeSrc": "4039:27:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "4039:27:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nativeSrc": "4059:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "4059:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "4053:5:84",
                      "nodeType": "YulIdentifier",
                      "src": "4053:5:84"
                    },
                    "nativeSrc": "4053:13:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4053:13:84"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nativeSrc": "4043:6:84",
                      "nodeType": "YulTypedName",
                      "src": "4043:6:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "4114:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "4114:6:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4122:4:84",
                            "nodeType": "YulLiteral",
                            "src": "4122:4:84",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4110:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4110:3:84"
                        },
                        "nativeSrc": "4110:17:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4110:17:84"
                      },
                      {
                        "name": "pos",
                        "nativeSrc": "4129:3:84",
                        "nodeType": "YulIdentifier",
                        "src": "4129:3:84"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "4134:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "4134:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory_with_cleanup",
                      "nativeSrc": "4075:34:84",
                      "nodeType": "YulIdentifier",
                      "src": "4075:34:84"
                    },
                    "nativeSrc": "4075:66:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4075:66:84"
                  },
                  "nativeSrc": "4075:66:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4075:66:84"
                },
                {
                  "nativeSrc": "4150:23:84",
                  "nodeType": "YulAssignment",
                  "src": "4150:23:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "4161:3:84",
                        "nodeType": "YulIdentifier",
                        "src": "4161:3:84"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "4166:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "4166:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "4157:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "4157:3:84"
                    },
                    "nativeSrc": "4157:16:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4157:16:84"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nativeSrc": "4150:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "4150:3:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nativeSrc": "3892:287:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nativeSrc": "4005:3:84",
                "nodeType": "YulTypedName",
                "src": "4005:3:84",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "4010:6:84",
                "nodeType": "YulTypedName",
                "src": "4010:6:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nativeSrc": "4021:3:84",
                "nodeType": "YulTypedName",
                "src": "4021:3:84",
                "type": ""
              }
            ],
            "src": "3892:287:84"
          },
          {
            "body": {
              "nativeSrc": "4358:229:84",
              "nodeType": "YulBlock",
              "src": "4358:229:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "4375:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "4375:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4386:2:84",
                        "nodeType": "YulLiteral",
                        "src": "4386:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4368:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4368:6:84"
                    },
                    "nativeSrc": "4368:21:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4368:21:84"
                  },
                  "nativeSrc": "4368:21:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4368:21:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "4409:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "4409:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4420:2:84",
                            "nodeType": "YulLiteral",
                            "src": "4420:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4405:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4405:3:84"
                        },
                        "nativeSrc": "4405:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4405:18:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4425:2:84",
                        "nodeType": "YulLiteral",
                        "src": "4425:2:84",
                        "type": "",
                        "value": "39"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4398:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4398:6:84"
                    },
                    "nativeSrc": "4398:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4398:30:84"
                  },
                  "nativeSrc": "4398:30:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4398:30:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "4448:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "4448:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4459:2:84",
                            "nodeType": "YulLiteral",
                            "src": "4459:2:84",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4444:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4444:3:84"
                        },
                        "nativeSrc": "4444:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4444:18:84"
                      },
                      {
                        "hexValue": "5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65",
                        "kind": "string",
                        "nativeSrc": "4464:34:84",
                        "nodeType": "YulLiteral",
                        "src": "4464:34:84",
                        "type": "",
                        "value": "WitnetProxy: uncompliant impleme"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4437:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4437:6:84"
                    },
                    "nativeSrc": "4437:62:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4437:62:84"
                  },
                  "nativeSrc": "4437:62:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4437:62:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "4519:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "4519:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4530:2:84",
                            "nodeType": "YulLiteral",
                            "src": "4530:2:84",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4515:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4515:3:84"
                        },
                        "nativeSrc": "4515:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4515:18:84"
                      },
                      {
                        "hexValue": "6e746174696f6e",
                        "kind": "string",
                        "nativeSrc": "4535:9:84",
                        "nodeType": "YulLiteral",
                        "src": "4535:9:84",
                        "type": "",
                        "value": "ntation"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4508:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4508:6:84"
                    },
                    "nativeSrc": "4508:37:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4508:37:84"
                  },
                  "nativeSrc": "4508:37:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4508:37:84"
                },
                {
                  "nativeSrc": "4554:27:84",
                  "nodeType": "YulAssignment",
                  "src": "4554:27:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "4566:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "4566:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4577:3:84",
                        "nodeType": "YulLiteral",
                        "src": "4577:3:84",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "4562:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "4562:3:84"
                    },
                    "nativeSrc": "4562:19:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4562:19:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "4554:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "4554:4:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "4184:403:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "4335:9:84",
                "nodeType": "YulTypedName",
                "src": "4335:9:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "4349:4:84",
                "nodeType": "YulTypedName",
                "src": "4349:4:84",
                "type": ""
              }
            ],
            "src": "4184:403:84"
          },
          {
            "body": {
              "nativeSrc": "4766:177:84",
              "nodeType": "YulBlock",
              "src": "4766:177:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "4783:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "4783:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4794:2:84",
                        "nodeType": "YulLiteral",
                        "src": "4794:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4776:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4776:6:84"
                    },
                    "nativeSrc": "4776:21:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4776:21:84"
                  },
                  "nativeSrc": "4776:21:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4776:21:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "4817:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "4817:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4828:2:84",
                            "nodeType": "YulLiteral",
                            "src": "4828:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4813:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4813:3:84"
                        },
                        "nativeSrc": "4813:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4813:18:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4833:2:84",
                        "nodeType": "YulLiteral",
                        "src": "4833:2:84",
                        "type": "",
                        "value": "27"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4806:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4806:6:84"
                    },
                    "nativeSrc": "4806:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4806:30:84"
                  },
                  "nativeSrc": "4806:30:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4806:30:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "4856:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "4856:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4867:2:84",
                            "nodeType": "YulLiteral",
                            "src": "4867:2:84",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4852:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4852:3:84"
                        },
                        "nativeSrc": "4852:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4852:18:84"
                      },
                      {
                        "hexValue": "5769746e657450726f78793a206e6f7420617574686f72697a6564",
                        "kind": "string",
                        "nativeSrc": "4872:29:84",
                        "nodeType": "YulLiteral",
                        "src": "4872:29:84",
                        "type": "",
                        "value": "WitnetProxy: not authorized"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4845:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4845:6:84"
                    },
                    "nativeSrc": "4845:57:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4845:57:84"
                  },
                  "nativeSrc": "4845:57:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4845:57:84"
                },
                {
                  "nativeSrc": "4911:26:84",
                  "nodeType": "YulAssignment",
                  "src": "4911:26:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "4923:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "4923:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4934:2:84",
                        "nodeType": "YulLiteral",
                        "src": "4934:2:84",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "4919:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "4919:3:84"
                    },
                    "nativeSrc": "4919:18:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4919:18:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "4911:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "4911:4:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_ba8d4d661ce88eb2915ba133e6cad533938b754d7b66d8253879ef2c2193ecb2__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "4592:351:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "4743:9:84",
                "nodeType": "YulTypedName",
                "src": "4743:9:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "4757:4:84",
                "nodeType": "YulTypedName",
                "src": "4757:4:84",
                "type": ""
              }
            ],
            "src": "4592:351:84"
          },
          {
            "body": {
              "nativeSrc": "5029:103:84",
              "nodeType": "YulBlock",
              "src": "5029:103:84",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "5075:16:84",
                    "nodeType": "YulBlock",
                    "src": "5075:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "5084:1:84",
                              "nodeType": "YulLiteral",
                              "src": "5084:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "5087:1:84",
                              "nodeType": "YulLiteral",
                              "src": "5087:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "5077:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "5077:6:84"
                          },
                          "nativeSrc": "5077:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "5077:12:84"
                        },
                        "nativeSrc": "5077:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "5077:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "5050:7:84",
                            "nodeType": "YulIdentifier",
                            "src": "5050:7:84"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "5059:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "5059:9:84"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "5046:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "5046:3:84"
                        },
                        "nativeSrc": "5046:23:84",
                        "nodeType": "YulFunctionCall",
                        "src": "5046:23:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5071:2:84",
                        "nodeType": "YulLiteral",
                        "src": "5071:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "5042:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "5042:3:84"
                    },
                    "nativeSrc": "5042:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "5042:32:84"
                  },
                  "nativeSrc": "5039:52:84",
                  "nodeType": "YulIf",
                  "src": "5039:52:84"
                },
                {
                  "nativeSrc": "5100:26:84",
                  "nodeType": "YulAssignment",
                  "src": "5100:26:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "5116:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "5116:9:84"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "5110:5:84",
                      "nodeType": "YulIdentifier",
                      "src": "5110:5:84"
                    },
                    "nativeSrc": "5110:16:84",
                    "nodeType": "YulFunctionCall",
                    "src": "5110:16:84"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "5100:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "5100:6:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32_fromMemory",
            "nativeSrc": "4948:184:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "4995:9:84",
                "nodeType": "YulTypedName",
                "src": "4995:9:84",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "5006:7:84",
                "nodeType": "YulTypedName",
                "src": "5006:7:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "5018:6:84",
                "nodeType": "YulTypedName",
                "src": "5018:6:84",
                "type": ""
              }
            ],
            "src": "4948:184:84"
          },
          {
            "body": {
              "nativeSrc": "5311:226:84",
              "nodeType": "YulBlock",
              "src": "5311:226:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "5328:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "5328:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5339:2:84",
                        "nodeType": "YulLiteral",
                        "src": "5339:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5321:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "5321:6:84"
                    },
                    "nativeSrc": "5321:21:84",
                    "nodeType": "YulFunctionCall",
                    "src": "5321:21:84"
                  },
                  "nativeSrc": "5321:21:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "5321:21:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5362:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "5362:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5373:2:84",
                            "nodeType": "YulLiteral",
                            "src": "5373:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5358:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "5358:3:84"
                        },
                        "nativeSrc": "5358:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "5358:18:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5378:2:84",
                        "nodeType": "YulLiteral",
                        "src": "5378:2:84",
                        "type": "",
                        "value": "36"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5351:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "5351:6:84"
                    },
                    "nativeSrc": "5351:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "5351:30:84"
                  },
                  "nativeSrc": "5351:30:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "5351:30:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5401:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "5401:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5412:2:84",
                            "nodeType": "YulLiteral",
                            "src": "5412:2:84",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5397:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "5397:3:84"
                        },
                        "nativeSrc": "5397:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "5397:18:84"
                      },
                      {
                        "hexValue": "5769746e657450726f78793a2070726f786961626c655555494473206d69736d",
                        "kind": "string",
                        "nativeSrc": "5417:34:84",
                        "nodeType": "YulLiteral",
                        "src": "5417:34:84",
                        "type": "",
                        "value": "WitnetProxy: proxiableUUIDs mism"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5390:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "5390:6:84"
                    },
                    "nativeSrc": "5390:62:84",
                    "nodeType": "YulFunctionCall",
                    "src": "5390:62:84"
                  },
                  "nativeSrc": "5390:62:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "5390:62:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5472:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "5472:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5483:2:84",
                            "nodeType": "YulLiteral",
                            "src": "5483:2:84",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5468:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "5468:3:84"
                        },
                        "nativeSrc": "5468:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "5468:18:84"
                      },
                      {
                        "hexValue": "61746368",
                        "kind": "string",
                        "nativeSrc": "5488:6:84",
                        "nodeType": "YulLiteral",
                        "src": "5488:6:84",
                        "type": "",
                        "value": "atch"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5461:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "5461:6:84"
                    },
                    "nativeSrc": "5461:34:84",
                    "nodeType": "YulFunctionCall",
                    "src": "5461:34:84"
                  },
                  "nativeSrc": "5461:34:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "5461:34:84"
                },
                {
                  "nativeSrc": "5504:27:84",
                  "nodeType": "YulAssignment",
                  "src": "5504:27:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "5516:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "5516:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5527:3:84",
                        "nodeType": "YulLiteral",
                        "src": "5527:3:84",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "5512:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "5512:3:84"
                    },
                    "nativeSrc": "5512:19:84",
                    "nodeType": "YulFunctionCall",
                    "src": "5512:19:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "5504:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "5504:4:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_f3c1ad1fa1688d47e62cc4dd5b4be101315ef47e38e05aa3a37a4ef2e1cec0a8__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "5137:400:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "5288:9:84",
                "nodeType": "YulTypedName",
                "src": "5288:9:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "5302:4:84",
                "nodeType": "YulTypedName",
                "src": "5302:4:84",
                "type": ""
              }
            ],
            "src": "5137:400:84"
          },
          {
            "body": {
              "nativeSrc": "5591:221:84",
              "nodeType": "YulBlock",
              "src": "5591:221:84",
              "statements": [
                {
                  "nativeSrc": "5601:26:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "5601:26:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nativeSrc": "5621:5:84",
                        "nodeType": "YulIdentifier",
                        "src": "5621:5:84"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "5615:5:84",
                      "nodeType": "YulIdentifier",
                      "src": "5615:5:84"
                    },
                    "nativeSrc": "5615:12:84",
                    "nodeType": "YulFunctionCall",
                    "src": "5615:12:84"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nativeSrc": "5605:6:84",
                      "nodeType": "YulTypedName",
                      "src": "5605:6:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "5643:3:84",
                        "nodeType": "YulIdentifier",
                        "src": "5643:3:84"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "5648:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "5648:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5636:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "5636:6:84"
                    },
                    "nativeSrc": "5636:19:84",
                    "nodeType": "YulFunctionCall",
                    "src": "5636:19:84"
                  },
                  "nativeSrc": "5636:19:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "5636:19:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nativeSrc": "5703:5:84",
                            "nodeType": "YulIdentifier",
                            "src": "5703:5:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5710:4:84",
                            "nodeType": "YulLiteral",
                            "src": "5710:4:84",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5699:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "5699:3:84"
                        },
                        "nativeSrc": "5699:16:84",
                        "nodeType": "YulFunctionCall",
                        "src": "5699:16:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "5721:3:84",
                            "nodeType": "YulIdentifier",
                            "src": "5721:3:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5726:4:84",
                            "nodeType": "YulLiteral",
                            "src": "5726:4:84",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5717:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "5717:3:84"
                        },
                        "nativeSrc": "5717:14:84",
                        "nodeType": "YulFunctionCall",
                        "src": "5717:14:84"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "5733:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "5733:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory_with_cleanup",
                      "nativeSrc": "5664:34:84",
                      "nodeType": "YulIdentifier",
                      "src": "5664:34:84"
                    },
                    "nativeSrc": "5664:76:84",
                    "nodeType": "YulFunctionCall",
                    "src": "5664:76:84"
                  },
                  "nativeSrc": "5664:76:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "5664:76:84"
                },
                {
                  "nativeSrc": "5749:57:84",
                  "nodeType": "YulAssignment",
                  "src": "5749:57:84",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "5764:3:84",
                            "nodeType": "YulIdentifier",
                            "src": "5764:3:84"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nativeSrc": "5777:6:84",
                                    "nodeType": "YulIdentifier",
                                    "src": "5777:6:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "5785:2:84",
                                    "nodeType": "YulLiteral",
                                    "src": "5785:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nativeSrc": "5773:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "5773:3:84"
                                },
                                "nativeSrc": "5773:15:84",
                                "nodeType": "YulFunctionCall",
                                "src": "5773:15:84"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "5794:2:84",
                                    "nodeType": "YulLiteral",
                                    "src": "5794:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nativeSrc": "5790:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "5790:3:84"
                                },
                                "nativeSrc": "5790:7:84",
                                "nodeType": "YulFunctionCall",
                                "src": "5790:7:84"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nativeSrc": "5769:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "5769:3:84"
                            },
                            "nativeSrc": "5769:29:84",
                            "nodeType": "YulFunctionCall",
                            "src": "5769:29:84"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5760:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "5760:3:84"
                        },
                        "nativeSrc": "5760:39:84",
                        "nodeType": "YulFunctionCall",
                        "src": "5760:39:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5801:4:84",
                        "nodeType": "YulLiteral",
                        "src": "5801:4:84",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "5756:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "5756:3:84"
                    },
                    "nativeSrc": "5756:50:84",
                    "nodeType": "YulFunctionCall",
                    "src": "5756:50:84"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nativeSrc": "5749:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "5749:3:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_bytes",
            "nativeSrc": "5542:270:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nativeSrc": "5568:5:84",
                "nodeType": "YulTypedName",
                "src": "5568:5:84",
                "type": ""
              },
              {
                "name": "pos",
                "nativeSrc": "5575:3:84",
                "nodeType": "YulTypedName",
                "src": "5575:3:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nativeSrc": "5583:3:84",
                "nodeType": "YulTypedName",
                "src": "5583:3:84",
                "type": ""
              }
            ],
            "src": "5542:270:84"
          },
          {
            "body": {
              "nativeSrc": "5936:98:84",
              "nodeType": "YulBlock",
              "src": "5936:98:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "5953:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "5953:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5964:2:84",
                        "nodeType": "YulLiteral",
                        "src": "5964:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5946:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "5946:6:84"
                    },
                    "nativeSrc": "5946:21:84",
                    "nodeType": "YulFunctionCall",
                    "src": "5946:21:84"
                  },
                  "nativeSrc": "5946:21:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "5946:21:84"
                },
                {
                  "nativeSrc": "5976:52:84",
                  "nodeType": "YulAssignment",
                  "src": "5976:52:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nativeSrc": "6001:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "6001:6:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "6013:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "6013:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6024:2:84",
                            "nodeType": "YulLiteral",
                            "src": "6024:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6009:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "6009:3:84"
                        },
                        "nativeSrc": "6009:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "6009:18:84"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes",
                      "nativeSrc": "5984:16:84",
                      "nodeType": "YulIdentifier",
                      "src": "5984:16:84"
                    },
                    "nativeSrc": "5984:44:84",
                    "nodeType": "YulFunctionCall",
                    "src": "5984:44:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "5976:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "5976:4:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed",
            "nativeSrc": "5817:217:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "5905:9:84",
                "nodeType": "YulTypedName",
                "src": "5905:9:84",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "5916:6:84",
                "nodeType": "YulTypedName",
                "src": "5916:6:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "5927:4:84",
                "nodeType": "YulTypedName",
                "src": "5927:4:84",
                "type": ""
              }
            ],
            "src": "5817:217:84"
          },
          {
            "body": {
              "nativeSrc": "6213:224:84",
              "nodeType": "YulBlock",
              "src": "6213:224:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "6230:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "6230:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6241:2:84",
                        "nodeType": "YulLiteral",
                        "src": "6241:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6223:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "6223:6:84"
                    },
                    "nativeSrc": "6223:21:84",
                    "nodeType": "YulFunctionCall",
                    "src": "6223:21:84"
                  },
                  "nativeSrc": "6223:21:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "6223:21:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "6264:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "6264:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6275:2:84",
                            "nodeType": "YulLiteral",
                            "src": "6275:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6260:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "6260:3:84"
                        },
                        "nativeSrc": "6260:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "6260:18:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6280:2:84",
                        "nodeType": "YulLiteral",
                        "src": "6280:2:84",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6253:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "6253:6:84"
                    },
                    "nativeSrc": "6253:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "6253:30:84"
                  },
                  "nativeSrc": "6253:30:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "6253:30:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "6303:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "6303:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6314:2:84",
                            "nodeType": "YulLiteral",
                            "src": "6314:2:84",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6299:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "6299:3:84"
                        },
                        "nativeSrc": "6299:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "6299:18:84"
                      },
                      {
                        "hexValue": "5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c",
                        "kind": "string",
                        "nativeSrc": "6319:34:84",
                        "nodeType": "YulLiteral",
                        "src": "6319:34:84",
                        "type": "",
                        "value": "WitnetProxy: initialization fail"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6292:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "6292:6:84"
                    },
                    "nativeSrc": "6292:62:84",
                    "nodeType": "YulFunctionCall",
                    "src": "6292:62:84"
                  },
                  "nativeSrc": "6292:62:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "6292:62:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "6374:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "6374:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6385:2:84",
                            "nodeType": "YulLiteral",
                            "src": "6385:2:84",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6370:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "6370:3:84"
                        },
                        "nativeSrc": "6370:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "6370:18:84"
                      },
                      {
                        "hexValue": "6564",
                        "kind": "string",
                        "nativeSrc": "6390:4:84",
                        "nodeType": "YulLiteral",
                        "src": "6390:4:84",
                        "type": "",
                        "value": "ed"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6363:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "6363:6:84"
                    },
                    "nativeSrc": "6363:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "6363:32:84"
                  },
                  "nativeSrc": "6363:32:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "6363:32:84"
                },
                {
                  "nativeSrc": "6404:27:84",
                  "nodeType": "YulAssignment",
                  "src": "6404:27:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "6416:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "6416:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6427:3:84",
                        "nodeType": "YulLiteral",
                        "src": "6427:3:84",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "6412:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "6412:3:84"
                    },
                    "nativeSrc": "6412:19:84",
                    "nodeType": "YulFunctionCall",
                    "src": "6412:19:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "6404:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "6404:4:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_1a3a4ea76e2e68e14fc5328c93896fc2e23cf33c9f37d13d21f0003bedc2d604__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "6039:398:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "6190:9:84",
                "nodeType": "YulTypedName",
                "src": "6190:9:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "6204:4:84",
                "nodeType": "YulTypedName",
                "src": "6204:4:84",
                "type": ""
              }
            ],
            "src": "6039:398:84"
          },
          {
            "body": {
              "nativeSrc": "6533:557:84",
              "nodeType": "YulBlock",
              "src": "6533:557:84",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "6579:16:84",
                    "nodeType": "YulBlock",
                    "src": "6579:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "6588:1:84",
                              "nodeType": "YulLiteral",
                              "src": "6588:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "6591:1:84",
                              "nodeType": "YulLiteral",
                              "src": "6591:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "6581:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "6581:6:84"
                          },
                          "nativeSrc": "6581:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "6581:12:84"
                        },
                        "nativeSrc": "6581:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "6581:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "6554:7:84",
                            "nodeType": "YulIdentifier",
                            "src": "6554:7:84"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "6563:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "6563:9:84"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "6550:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "6550:3:84"
                        },
                        "nativeSrc": "6550:23:84",
                        "nodeType": "YulFunctionCall",
                        "src": "6550:23:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6575:2:84",
                        "nodeType": "YulLiteral",
                        "src": "6575:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "6546:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "6546:3:84"
                    },
                    "nativeSrc": "6546:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "6546:32:84"
                  },
                  "nativeSrc": "6543:52:84",
                  "nodeType": "YulIf",
                  "src": "6543:52:84"
                },
                {
                  "nativeSrc": "6604:30:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "6604:30:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "6624:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "6624:9:84"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "6618:5:84",
                      "nodeType": "YulIdentifier",
                      "src": "6618:5:84"
                    },
                    "nativeSrc": "6618:16:84",
                    "nodeType": "YulFunctionCall",
                    "src": "6618:16:84"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nativeSrc": "6608:6:84",
                      "nodeType": "YulTypedName",
                      "src": "6608:6:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "6677:16:84",
                    "nodeType": "YulBlock",
                    "src": "6677:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "6686:1:84",
                              "nodeType": "YulLiteral",
                              "src": "6686:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "6689:1:84",
                              "nodeType": "YulLiteral",
                              "src": "6689:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "6679:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "6679:6:84"
                          },
                          "nativeSrc": "6679:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "6679:12:84"
                        },
                        "nativeSrc": "6679:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "6679:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nativeSrc": "6649:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "6649:6:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6657:18:84",
                        "nodeType": "YulLiteral",
                        "src": "6657:18:84",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "6646:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "6646:2:84"
                    },
                    "nativeSrc": "6646:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "6646:30:84"
                  },
                  "nativeSrc": "6643:50:84",
                  "nodeType": "YulIf",
                  "src": "6643:50:84"
                },
                {
                  "nativeSrc": "6702:32:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "6702:32:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "6716:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "6716:9:84"
                      },
                      {
                        "name": "offset",
                        "nativeSrc": "6727:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "6727:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "6712:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "6712:3:84"
                    },
                    "nativeSrc": "6712:22:84",
                    "nodeType": "YulFunctionCall",
                    "src": "6712:22:84"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nativeSrc": "6706:2:84",
                      "nodeType": "YulTypedName",
                      "src": "6706:2:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "6782:16:84",
                    "nodeType": "YulBlock",
                    "src": "6782:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "6791:1:84",
                              "nodeType": "YulLiteral",
                              "src": "6791:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "6794:1:84",
                              "nodeType": "YulLiteral",
                              "src": "6794:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "6784:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "6784:6:84"
                          },
                          "nativeSrc": "6784:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "6784:12:84"
                        },
                        "nativeSrc": "6784:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "6784:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nativeSrc": "6761:2:84",
                                "nodeType": "YulIdentifier",
                                "src": "6761:2:84"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "6765:4:84",
                                "nodeType": "YulLiteral",
                                "src": "6765:4:84",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "6757:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "6757:3:84"
                            },
                            "nativeSrc": "6757:13:84",
                            "nodeType": "YulFunctionCall",
                            "src": "6757:13:84"
                          },
                          {
                            "name": "dataEnd",
                            "nativeSrc": "6772:7:84",
                            "nodeType": "YulIdentifier",
                            "src": "6772:7:84"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nativeSrc": "6753:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "6753:3:84"
                        },
                        "nativeSrc": "6753:27:84",
                        "nodeType": "YulFunctionCall",
                        "src": "6753:27:84"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "6746:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "6746:6:84"
                    },
                    "nativeSrc": "6746:35:84",
                    "nodeType": "YulFunctionCall",
                    "src": "6746:35:84"
                  },
                  "nativeSrc": "6743:55:84",
                  "nodeType": "YulIf",
                  "src": "6743:55:84"
                },
                {
                  "nativeSrc": "6807:19:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "6807:19:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nativeSrc": "6823:2:84",
                        "nodeType": "YulIdentifier",
                        "src": "6823:2:84"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "6817:5:84",
                      "nodeType": "YulIdentifier",
                      "src": "6817:5:84"
                    },
                    "nativeSrc": "6817:9:84",
                    "nodeType": "YulFunctionCall",
                    "src": "6817:9:84"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nativeSrc": "6811:2:84",
                      "nodeType": "YulTypedName",
                      "src": "6811:2:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "6835:61:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "6835:61:84",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_2",
                            "nativeSrc": "6892:2:84",
                            "nodeType": "YulIdentifier",
                            "src": "6892:2:84"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_bytes",
                          "nativeSrc": "6864:27:84",
                          "nodeType": "YulIdentifier",
                          "src": "6864:27:84"
                        },
                        "nativeSrc": "6864:31:84",
                        "nodeType": "YulFunctionCall",
                        "src": "6864:31:84"
                      }
                    ],
                    "functionName": {
                      "name": "allocate_memory",
                      "nativeSrc": "6848:15:84",
                      "nodeType": "YulIdentifier",
                      "src": "6848:15:84"
                    },
                    "nativeSrc": "6848:48:84",
                    "nodeType": "YulFunctionCall",
                    "src": "6848:48:84"
                  },
                  "variables": [
                    {
                      "name": "array",
                      "nativeSrc": "6839:5:84",
                      "nodeType": "YulTypedName",
                      "src": "6839:5:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "array",
                        "nativeSrc": "6912:5:84",
                        "nodeType": "YulIdentifier",
                        "src": "6912:5:84"
                      },
                      {
                        "name": "_2",
                        "nativeSrc": "6919:2:84",
                        "nodeType": "YulIdentifier",
                        "src": "6919:2:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6905:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "6905:6:84"
                    },
                    "nativeSrc": "6905:17:84",
                    "nodeType": "YulFunctionCall",
                    "src": "6905:17:84"
                  },
                  "nativeSrc": "6905:17:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "6905:17:84"
                },
                {
                  "body": {
                    "nativeSrc": "6968:16:84",
                    "nodeType": "YulBlock",
                    "src": "6968:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "6977:1:84",
                              "nodeType": "YulLiteral",
                              "src": "6977:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "6980:1:84",
                              "nodeType": "YulLiteral",
                              "src": "6980:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "6970:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "6970:6:84"
                          },
                          "nativeSrc": "6970:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "6970:12:84"
                        },
                        "nativeSrc": "6970:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "6970:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nativeSrc": "6945:2:84",
                                "nodeType": "YulIdentifier",
                                "src": "6945:2:84"
                              },
                              {
                                "name": "_2",
                                "nativeSrc": "6949:2:84",
                                "nodeType": "YulIdentifier",
                                "src": "6949:2:84"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "6941:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "6941:3:84"
                            },
                            "nativeSrc": "6941:11:84",
                            "nodeType": "YulFunctionCall",
                            "src": "6941:11:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6954:2:84",
                            "nodeType": "YulLiteral",
                            "src": "6954:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6937:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "6937:3:84"
                        },
                        "nativeSrc": "6937:20:84",
                        "nodeType": "YulFunctionCall",
                        "src": "6937:20:84"
                      },
                      {
                        "name": "dataEnd",
                        "nativeSrc": "6959:7:84",
                        "nodeType": "YulIdentifier",
                        "src": "6959:7:84"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "6934:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "6934:2:84"
                    },
                    "nativeSrc": "6934:33:84",
                    "nodeType": "YulFunctionCall",
                    "src": "6934:33:84"
                  },
                  "nativeSrc": "6931:53:84",
                  "nodeType": "YulIf",
                  "src": "6931:53:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_1",
                            "nativeSrc": "7032:2:84",
                            "nodeType": "YulIdentifier",
                            "src": "7032:2:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "7036:2:84",
                            "nodeType": "YulLiteral",
                            "src": "7036:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "7028:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "7028:3:84"
                        },
                        "nativeSrc": "7028:11:84",
                        "nodeType": "YulFunctionCall",
                        "src": "7028:11:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "array",
                            "nativeSrc": "7045:5:84",
                            "nodeType": "YulIdentifier",
                            "src": "7045:5:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "7052:2:84",
                            "nodeType": "YulLiteral",
                            "src": "7052:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "7041:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "7041:3:84"
                        },
                        "nativeSrc": "7041:14:84",
                        "nodeType": "YulFunctionCall",
                        "src": "7041:14:84"
                      },
                      {
                        "name": "_2",
                        "nativeSrc": "7057:2:84",
                        "nodeType": "YulIdentifier",
                        "src": "7057:2:84"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory_with_cleanup",
                      "nativeSrc": "6993:34:84",
                      "nodeType": "YulIdentifier",
                      "src": "6993:34:84"
                    },
                    "nativeSrc": "6993:67:84",
                    "nodeType": "YulFunctionCall",
                    "src": "6993:67:84"
                  },
                  "nativeSrc": "6993:67:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "6993:67:84"
                },
                {
                  "nativeSrc": "7069:15:84",
                  "nodeType": "YulAssignment",
                  "src": "7069:15:84",
                  "value": {
                    "name": "array",
                    "nativeSrc": "7079:5:84",
                    "nodeType": "YulIdentifier",
                    "src": "7079:5:84"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "7069:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "7069:6:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_string_memory_ptr_fromMemory",
            "nativeSrc": "6442:648:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "6499:9:84",
                "nodeType": "YulTypedName",
                "src": "6499:9:84",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "6510:7:84",
                "nodeType": "YulTypedName",
                "src": "6510:7:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "6522:6:84",
                "nodeType": "YulTypedName",
                "src": "6522:6:84",
                "type": ""
              }
            ],
            "src": "6442:648:84"
          },
          {
            "body": {
              "nativeSrc": "7216:98:84",
              "nodeType": "YulBlock",
              "src": "7216:98:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "7233:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "7233:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "7244:2:84",
                        "nodeType": "YulLiteral",
                        "src": "7244:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "7226:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "7226:6:84"
                    },
                    "nativeSrc": "7226:21:84",
                    "nodeType": "YulFunctionCall",
                    "src": "7226:21:84"
                  },
                  "nativeSrc": "7226:21:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "7226:21:84"
                },
                {
                  "nativeSrc": "7256:52:84",
                  "nodeType": "YulAssignment",
                  "src": "7256:52:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nativeSrc": "7281:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "7281:6:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "7293:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "7293:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "7304:2:84",
                            "nodeType": "YulLiteral",
                            "src": "7304:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "7289:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "7289:3:84"
                        },
                        "nativeSrc": "7289:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "7289:18:84"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes",
                      "nativeSrc": "7264:16:84",
                      "nodeType": "YulIdentifier",
                      "src": "7264:16:84"
                    },
                    "nativeSrc": "7264:44:84",
                    "nodeType": "YulFunctionCall",
                    "src": "7264:44:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "7256:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "7256:4:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "7095:219:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "7185:9:84",
                "nodeType": "YulTypedName",
                "src": "7185:9:84",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "7196:6:84",
                "nodeType": "YulTypedName",
                "src": "7196:6:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "7207:4:84",
                "nodeType": "YulTypedName",
                "src": "7207:4:84",
                "type": ""
              }
            ],
            "src": "7095:219:84"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_bytes(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(and(add(length, 31), not(31)), 0x20)\n    }\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n        let _2 := calldataload(_1)\n        let array := allocate_memory(array_allocation_size_bytes(_2))\n        mstore(array, _2)\n        if gt(add(add(_1, _2), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(array, 32), add(_1, 32), _2)\n        mstore(add(add(array, _2), 32), 0)\n        value1 := array\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_stringliteral_d599eaa5e68d91d75c142446490ab9a15fd0284a41ce949219b5b4d8f267239a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"WitnetProxy: null implementation\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e332eab1bae45430d1201a30c0d80d8fcb5570f9e70201a9eb7b229e17fd2084__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"WitnetProxy: nothing to upgrade\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_7f859058ad3ee4e192700ff813ed67dc892a0c7de91510ee584a0ac25fc982fc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"WitnetProxy: unable to check upg\")\n        mstore(add(headStart, 96), \"radability\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_d96132834a96bae5cb2f32cb07f13985dcde0f2358055c198eb3065af6c5aa7f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"WitnetProxy: not upgradable\")\n        tail := add(headStart, 96)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"WitnetProxy: uncompliant impleme\")\n        mstore(add(headStart, 96), \"ntation\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_ba8d4d661ce88eb2915ba133e6cad533938b754d7b66d8253879ef2c2193ecb2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"WitnetProxy: not authorized\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_f3c1ad1fa1688d47e62cc4dd5b4be101315ef47e38e05aa3a37a4ef2e1cec0a8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"WitnetProxy: proxiableUUIDs mism\")\n        mstore(add(headStart, 96), \"atch\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_1a3a4ea76e2e68e14fc5328c93896fc2e23cf33c9f37d13d21f0003bedc2d604__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"WitnetProxy: initialization fail\")\n        mstore(add(headStart, 96), \"ed\")\n        tail := add(headStart, 128)\n    }\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := mload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n        let _2 := mload(_1)\n        let array := allocate_memory(array_allocation_size_bytes(_2))\n        mstore(array, _2)\n        if gt(add(add(_1, _2), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory_with_cleanup(add(_1, 32), add(array, 32), _2)\n        value0 := array\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n}",
      "id": 84,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "264:5139:27:-:0;;;520:17;;;;;;;;;;264:5139;;;;;;",
  "deployedSourceMap": "264:5139:27:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;746:23;772:16;:14;:16::i;:::-;746:42;;1136:4;1130:11;1176:14;1173:1;1168:3;1155:36;1280:1;1277;1261:14;1256:3;1239:15;1232:5;1219:63;1308:16;1361:4;1358:1;1353:3;1338:28;1387:6;1411:119;;;;1673:4;1668:3;1661:17;1411:119;1505:4;1500:3;1493:17;1781:110;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;178:32:84;;;160:51;;148:2;133:18;1781:110:27;;;;;;;;2185:2793;;;;;;;;;;-1:-1:-1;2185:2793:27;;;;;:::i;:::-;;:::i;:::-;;;1840:14:84;;1833:22;1815:41;;1803:2;1788:18;2185:2793:27;1675:187:84;1781:110:27;5314:66;1855:28;-1:-1:-1;;;;;1855:28:27;;1781:110::o;2185:2793::-;2281:4;-1:-1:-1;;;;;2358:32:27;;2350:77;;;;-1:-1:-1;;;2350:77:27;;2069:2:84;2350:77:27;;;2051:21:84;;;2088:18;;;2081:30;2147:34;2127:18;;;2120:62;2199:18;;2350:77:27;;;;;;;;;2440:26;2469:16;:14;:16::i;:::-;2440:45;-1:-1:-1;;;;;;2500:32:27;;;2496:1298;;2652:18;-1:-1:-1;;;;;2630:40:27;:18;-1:-1:-1;;;;;2630:40:27;;2622:84;;;;-1:-1:-1;;;2622:84:27;;2430:2:84;2622:84:27;;;2412:21:84;2469:2;2449:18;;;2442:30;2508:33;2488:18;;;2481:61;2559:18;;2622:84:27;2228:355:84;2622:84:27;2822:18;-1:-1:-1;;;;;2810:44:27;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2810:46:27;;;;;;;;-1:-1:-1;;2810:46:27;;;;;;;;;;;;:::i;:::-;;;2806:262;;3000:52;;-1:-1:-1;;;3000:52:27;;3072:2:84;3000:52:27;;;3054:21:84;3111:2;3091:18;;;3084:30;3150:34;3130:18;;;3123:62;-1:-1:-1;;;3201:18:84;;;3194:40;3251:19;;3000:52:27;2870:406:84;2806:262:27;2913:13;2905:53;;;;-1:-1:-1;;;2905:53:27;;3483:2:84;2905:53:27;;;3465:21:84;3522:2;3502:18;;;3495:30;3561:29;3541:18;;;3534:57;3608:18;;2905:53:27;3281:351:84;2905:53:27;-1:-1:-1;3272:125:27;;3368:10;3272:125;;;160:51:84;3181:15:27;;;;-1:-1:-1;;;;;3222:31:27;;;133:18:84;;3272:125:27;;;-1:-1:-1;;3272:125:27;;;;;;;;;;;;;;-1:-1:-1;;;;;3272:125:27;-1:-1:-1;;;3272:125:27;;;3222:190;;;3272:125;3222:190;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3180:232;;;;3435:10;3427:62;;;;-1:-1:-1;;;3427:62:27;;;;;;;:::i;:::-;3523:7;3512:27;;;;;;;;;;;;:::i;:::-;3504:67;;;;-1:-1:-1;;;3504:67:27;;4794:2:84;3504:67:27;;;4776:21:84;4833:2;4813:18;;;4806:30;4872:29;4852:18;;;4845:57;4919:18;;3504:67:27;4592:351:84;3504:67:27;3675:18;-1:-1:-1;;;;;3663:45:27;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3624:18;-1:-1:-1;;;;;3612:45:27;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:98;3586:196;;;;-1:-1:-1;;;3586:196:27;;5339:2:84;3586:196:27;;;5321:21:84;5378:2;5358:18;;;5351:30;5417:34;5397:18;;;5390:62;-1:-1:-1;;;5468:18:84;;;5461:34;5512:19;;3586:196:27;5137:400:84;3586:196:27;2534:1260;;2496:1298;3879:20;3901:24;3929:18;-1:-1:-1;;;;;3929:31:27;4055:9;3975:104;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3975:104:27;;;;;;;;;;;;;;-1:-1:-1;;;;;3975:104:27;-1:-1:-1;;;3975:104:27;;;3929:161;;;3975:104;3929:161;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3878:212;;;;4106:15;4101:344;;4163:2;4142:11;:18;:23;4138:296;;;4186:44;;-1:-1:-1;;;4186:44:27;;6241:2:84;4186:44:27;;;6223:21:84;6280:2;6260:18;;;6253:30;6319:34;6299:18;;;6292:62;-1:-1:-1;;;6370:18:84;;;6363:32;6412:19;;4186:44:27;6039:398:84;4138:296:27;4335:4;4322:11;4318:22;4303:37;;4395:11;4384:33;;;;;;;;;;;;:::i;:::-;4377:41;;-1:-1:-1;;;4377:41:27;;;;;;;;:::i;4138:296::-;5314:66;4539:49;;-1:-1:-1;;;;;;4539:49:27;-1:-1:-1;;;;;4539:49:27;;;;;;;;4610:28;;;;-1:-1:-1;;4610:28:27;4767:18;-1:-1:-1;;;;;4755:44:27;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4755:46:27;;;;;;;;-1:-1:-1;;4755:46:27;;;;;;;;;;;;:::i;:::-;;;4751:220;;4909:50;;-1:-1:-1;;;4909:50:27;;;;;;;:::i;4751:220::-;4853:13;-1:-1:-1;4846:20:27;;-1:-1:-1;;;4846:20:27;2185:2793;;;;;:::o;222:127:84:-;283:10;278:3;274:20;271:1;264:31;314:4;311:1;304:15;338:4;335:1;328:15;354:275;425:2;419:9;490:2;471:13;;-1:-1:-1;;467:27:84;455:40;;525:18;510:34;;546:22;;;507:62;504:88;;;572:18;;:::i;:::-;608:2;601:22;354:275;;-1:-1:-1;354:275:84:o;634:186::-;682:4;715:18;707:6;704:30;701:56;;;737:18;;:::i;:::-;-1:-1:-1;803:2:84;782:15;-1:-1:-1;;778:29:84;809:4;774:40;;634:186::o;825:845::-;902:6;910;963:2;951:9;942:7;938:23;934:32;931:52;;;979:1;976;969:12;931:52;1005:23;;-1:-1:-1;;;;;1057:31:84;;1047:42;;1037:70;;1103:1;1100;1093:12;1037:70;1126:5;-1:-1:-1;1182:2:84;1167:18;;1154:32;1209:18;1198:30;;1195:50;;;1241:1;1238;1231:12;1195:50;1264:22;;1317:4;1309:13;;1305:27;-1:-1:-1;1295:55:84;;1346:1;1343;1336:12;1295:55;1382:2;1369:16;1407:48;1423:31;1451:2;1423:31;:::i;:::-;1407:48;:::i;:::-;1478:2;1471:5;1464:17;1518:7;1513:2;1508;1504;1500:11;1496:20;1493:33;1490:53;;;1539:1;1536;1529:12;1490:53;1594:2;1589;1585;1581:11;1576:2;1569:5;1565:14;1552:45;1638:1;1633:2;1628;1621:5;1617:14;1613:23;1606:34;1659:5;1649:15;;;;;825:845;;;;;:::o;2588:277::-;2655:6;2708:2;2696:9;2687:7;2683:23;2679:32;2676:52;;;2724:1;2721;2714:12;2676:52;2756:9;2750:16;2809:5;2802:13;2795:21;2788:5;2785:32;2775:60;;2831:1;2828;2821:12;2775:60;2854:5;2588:277;-1:-1:-1;;;2588:277:84:o;3637:250::-;3722:1;3732:113;3746:6;3743:1;3740:13;3732:113;;;3822:11;;;3816:18;3803:11;;;3796:39;3768:2;3761:10;3732:113;;;-1:-1:-1;;3879:1:84;3861:16;;3854:27;3637:250::o;3892:287::-;4021:3;4059:6;4053:13;4075:66;4134:6;4129:3;4122:4;4114:6;4110:17;4075:66;:::i;:::-;4157:16;;;;;3892:287;-1:-1:-1;;3892:287:84:o;4184:403::-;4386:2;4368:21;;;4425:2;4405:18;;;4398:30;4464:34;4459:2;4444:18;;4437:62;-1:-1:-1;;;4530:2:84;4515:18;;4508:37;4577:3;4562:19;;4184:403::o;4948:184::-;5018:6;5071:2;5059:9;5050:7;5046:23;5042:32;5039:52;;;5087:1;5084;5077:12;5039:52;-1:-1:-1;5110:16:84;;4948:184;-1:-1:-1;4948:184:84:o;5542:270::-;5583:3;5621:5;5615:12;5648:6;5643:3;5636:19;5664:76;5733:6;5726:4;5721:3;5717:14;5710:4;5703:5;5699:16;5664:76;:::i;:::-;5794:2;5773:15;-1:-1:-1;;5769:29:84;5760:39;;;;5801:4;5756:50;;5542:270;-1:-1:-1;;5542:270:84:o;5817:217::-;5964:2;5953:9;5946:21;5927:4;5984:44;6024:2;6013:9;6009:18;6001:6;5984:44;:::i;6442:648::-;6522:6;6575:2;6563:9;6554:7;6550:23;6546:32;6543:52;;;6591:1;6588;6581:12;6543:52;6624:9;6618:16;6657:18;6649:6;6646:30;6643:50;;;6689:1;6686;6679:12;6643:50;6712:22;;6765:4;6757:13;;6753:27;-1:-1:-1;6743:55:84;;6794:1;6791;6784:12;6743:55;6823:2;6817:9;6848:48;6864:31;6892:2;6864:31;:::i;6848:48::-;6919:2;6912:5;6905:17;6959:7;6954:2;6949;6945;6941:11;6937:20;6934:33;6931:53;;;6980:1;6977;6970:12;6931:53;6993:67;7057:2;7052;7045:5;7041:14;7036:2;7032;7028:11;6993:67;:::i;:::-;7079:5;6442:648;-1:-1:-1;;;;;6442:648:84:o",
  "source": "// SPDX-License-Identifier: MIT\r\n\r\npragma solidity >=0.7.0 <0.9.0;\r\npragma experimental ABIEncoderV2;\r\n\r\nimport \"../patterns/Upgradeable.sol\";\r\n\r\n/// @title WitnetProxy: upgradable delegate-proxy contract. \r\n/// @author Guillermo Díaz <guillermo@otherplane.com>\r\ncontract WitnetProxy {\r\n\r\n    /// Event emitted every time the implementation gets updated.\r\n    event Upgraded(address indexed implementation);  \r\n\r\n    /// Constructor with no params as to ease eventual support of Singleton pattern (i.e. ERC-2470).\r\n    constructor () {}\r\n\r\n    receive() virtual external payable {}\r\n\r\n    /// Payable fallback accepts delegating calls to payable functions.  \r\n    fallback() external payable { /* solhint-disable no-complex-fallback */\r\n        address _implementation = implementation();\r\n        assembly { /* solhint-disable avoid-low-level-calls */\r\n            // Gas optimized delegate call to 'implementation' contract.\r\n            // Note: `msg.data`, `msg.sender` and `msg.value` will be passed over \r\n            //       to actual implementation of `msg.sig` within `implementation` contract.\r\n            let ptr := mload(0x40)\r\n            calldatacopy(ptr, 0, calldatasize())\r\n            let result := delegatecall(gas(), _implementation, ptr, calldatasize(), 0, 0)\r\n            let size := returndatasize()\r\n            returndatacopy(ptr, 0, size)\r\n            switch result\r\n                case 0  { \r\n                    // pass back revert message:\r\n                    revert(ptr, size) \r\n                }\r\n                default {\r\n                  // pass back same data as returned by 'implementation' contract:\r\n                  return(ptr, size) \r\n                }\r\n        }\r\n    }\r\n\r\n    /// Returns proxy's current implementation address.\r\n    function implementation() public view returns (address) {\r\n        return __proxySlot().implementation;\r\n    }\r\n\r\n    /// Upgrades the `implementation` address.\r\n    /// @param _newImplementation New implementation address.\r\n    /// @param _initData Raw data with which new implementation will be initialized.\r\n    /// @return Returns whether new implementation would be further upgradable, or not.\r\n    function upgradeTo(address _newImplementation, bytes memory _initData)\r\n        public returns (bool)\r\n    {\r\n        // New implementation cannot be null:\r\n        require(_newImplementation != address(0), \"WitnetProxy: null implementation\");\r\n\r\n        address _oldImplementation = implementation();\r\n        if (_oldImplementation != address(0)) {\r\n            // New implementation address must differ from current one:\r\n            require(_newImplementation != _oldImplementation, \"WitnetProxy: nothing to upgrade\");\r\n\r\n            // Assert whether current implementation is intrinsically upgradable:\r\n            try Upgradeable(_oldImplementation).isUpgradable() returns (bool _isUpgradable) {\r\n                require(_isUpgradable, \"WitnetProxy: not upgradable\");\r\n            } catch {\r\n                revert(\"WitnetProxy: unable to check upgradability\");\r\n            }\r\n\r\n            // Assert whether current implementation allows `msg.sender` to upgrade the proxy:\r\n            (bool _wasCalled, bytes memory _result) = _oldImplementation.delegatecall(\r\n                abi.encodeWithSignature(\r\n                    \"isUpgradableFrom(address)\",\r\n                    msg.sender\r\n                )\r\n            );\r\n            require(_wasCalled, \"WitnetProxy: uncompliant implementation\");\r\n            require(abi.decode(_result, (bool)), \"WitnetProxy: not authorized\");\r\n            require(\r\n                Upgradeable(_oldImplementation).proxiableUUID() == Upgradeable(_newImplementation).proxiableUUID(),\r\n                \"WitnetProxy: proxiableUUIDs mismatch\"\r\n            );\r\n        }\r\n\r\n        // Initialize new implementation within proxy-context storage:\r\n        (bool _wasInitialized, bytes memory _returnData) = _newImplementation.delegatecall(\r\n            abi.encodeWithSignature(\r\n                \"initialize(bytes)\",\r\n                _initData\r\n            )\r\n        );\r\n        if (!_wasInitialized) {\r\n            if (_returnData.length < 68) {\r\n                revert(\"WitnetProxy: initialization failed\");\r\n            } else {\r\n                assembly {\r\n                    _returnData := add(_returnData, 0x04)\r\n                }\r\n                revert(abi.decode(_returnData, (string)));\r\n            }\r\n        }\r\n\r\n        // If all checks and initialization pass, update implementation address:\r\n        __proxySlot().implementation = _newImplementation;\r\n    \r\n        emit Upgraded(_newImplementation);\r\n\r\n        // Asserts new implementation complies w/ minimal implementation of Upgradeable interface:\r\n        try Upgradeable(_newImplementation).isUpgradable() returns (bool _isUpgradable) {\r\n            return _isUpgradable;\r\n        }\r\n        catch {\r\n            revert (\"WitnetProxy: uncompliant implementation\");\r\n        }\r\n    }\r\n\r\n    /// @dev Complying with EIP-1967, retrieves storage struct containing proxy's current implementation address.\r\n    function __proxySlot() private pure returns (Proxiable.ProxiableSlot storage _slot) {\r\n        assembly {\r\n            // bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\r\n            _slot.slot := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\r\n        }\r\n    }\r\n\r\n}\r\n",
  "sourcePath": "C:\\Users\\guill\\github\\witnet\\witnet-solidity-bridge\\contracts\\core\\WitnetProxy.sol",
  "ast": {
    "absolutePath": "project:/contracts/core/WitnetProxy.sol",
    "exportedSymbols": {
      "ERC165": [
        602
      ],
      "IERC165": [
        614
      ],
      "Initializable": [
        253
      ],
      "Proxiable": [
        24189
      ],
      "Upgradeable": [
        24304
      ],
      "WitnetProxy": [
        3700
      ]
    },
    "id": 3701,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3475,
        "literals": [
          "solidity",
          ">=",
          "0.7",
          ".0",
          "<",
          "0.9",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "35:31:27"
      },
      {
        "id": 3476,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "68:33:27"
      },
      {
        "absolutePath": "project:/contracts/patterns/Upgradeable.sol",
        "file": "../patterns/Upgradeable.sol",
        "id": 3477,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 3701,
        "sourceUnit": 24305,
        "src": "105:37:27",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "WitnetProxy",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 3478,
          "nodeType": "StructuredDocumentation",
          "src": "146:118:27",
          "text": "@title WitnetProxy: upgradable delegate-proxy contract. \n @author Guillermo Díaz <guillermo@otherplane.com>"
        },
        "fullyImplemented": true,
        "id": 3700,
        "linearizedBaseContracts": [
          3700
        ],
        "name": "WitnetProxy",
        "nameLocation": "273:11:27",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": {
              "id": 3479,
              "nodeType": "StructuredDocumentation",
              "src": "294:61:27",
              "text": "Event emitted every time the implementation gets updated."
            },
            "eventSelector": "bc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b",
            "id": 3483,
            "name": "Upgraded",
            "nameLocation": "367:8:27",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3482,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3481,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "implementation",
                  "nameLocation": "392:14:27",
                  "nodeType": "VariableDeclaration",
                  "scope": 3483,
                  "src": "376:30:27",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3480,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "376:7:27",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "375:32:27"
            },
            "src": "361:47:27"
          },
          {
            "body": {
              "id": 3487,
              "nodeType": "Block",
              "src": "535:2:27",
              "statements": []
            },
            "documentation": {
              "id": 3484,
              "nodeType": "StructuredDocumentation",
              "src": "418:96:27",
              "text": "Constructor with no params as to ease eventual support of Singleton pattern (i.e. ERC-2470)."
            },
            "id": 3488,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3485,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "532:2:27"
            },
            "returnParameters": {
              "id": 3486,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "535:0:27"
            },
            "scope": 3700,
            "src": "520:17:27",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3491,
              "nodeType": "Block",
              "src": "580:2:27",
              "statements": []
            },
            "id": 3492,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3489,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "552:2:27"
            },
            "returnParameters": {
              "id": 3490,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "580:0:27"
            },
            "scope": 3700,
            "src": "545:37:27",
            "stateMutability": "payable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3502,
              "nodeType": "Block",
              "src": "693:1023:27",
              "statements": [
                {
                  "assignments": [
                    3497
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3497,
                      "mutability": "mutable",
                      "name": "_implementation",
                      "nameLocation": "754:15:27",
                      "nodeType": "VariableDeclaration",
                      "scope": 3502,
                      "src": "746:23:27",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3496,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "746:7:27",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3500,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 3498,
                      "name": "implementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3514,
                      "src": "772:14:27",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 3499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "772:16:27",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "746:42:27"
                },
                {
                  "AST": {
                    "nativeSrc": "808:901:27",
                    "nodeType": "YulBlock",
                    "src": "808:901:27",
                    "statements": [
                      {
                        "nativeSrc": "1119:22:27",
                        "nodeType": "YulVariableDeclaration",
                        "src": "1119:22:27",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1136:4:27",
                              "nodeType": "YulLiteral",
                              "src": "1136:4:27",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nativeSrc": "1130:5:27",
                            "nodeType": "YulIdentifier",
                            "src": "1130:5:27"
                          },
                          "nativeSrc": "1130:11:27",
                          "nodeType": "YulFunctionCall",
                          "src": "1130:11:27"
                        },
                        "variables": [
                          {
                            "name": "ptr",
                            "nativeSrc": "1123:3:27",
                            "nodeType": "YulTypedName",
                            "src": "1123:3:27",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nativeSrc": "1168:3:27",
                              "nodeType": "YulIdentifier",
                              "src": "1168:3:27"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1173:1:27",
                              "nodeType": "YulLiteral",
                              "src": "1173:1:27",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [],
                              "functionName": {
                                "name": "calldatasize",
                                "nativeSrc": "1176:12:27",
                                "nodeType": "YulIdentifier",
                                "src": "1176:12:27"
                              },
                              "nativeSrc": "1176:14:27",
                              "nodeType": "YulFunctionCall",
                              "src": "1176:14:27"
                            }
                          ],
                          "functionName": {
                            "name": "calldatacopy",
                            "nativeSrc": "1155:12:27",
                            "nodeType": "YulIdentifier",
                            "src": "1155:12:27"
                          },
                          "nativeSrc": "1155:36:27",
                          "nodeType": "YulFunctionCall",
                          "src": "1155:36:27"
                        },
                        "nativeSrc": "1155:36:27",
                        "nodeType": "YulExpressionStatement",
                        "src": "1155:36:27"
                      },
                      {
                        "nativeSrc": "1205:77:27",
                        "nodeType": "YulVariableDeclaration",
                        "src": "1205:77:27",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [],
                              "functionName": {
                                "name": "gas",
                                "nativeSrc": "1232:3:27",
                                "nodeType": "YulIdentifier",
                                "src": "1232:3:27"
                              },
                              "nativeSrc": "1232:5:27",
                              "nodeType": "YulFunctionCall",
                              "src": "1232:5:27"
                            },
                            {
                              "name": "_implementation",
                              "nativeSrc": "1239:15:27",
                              "nodeType": "YulIdentifier",
                              "src": "1239:15:27"
                            },
                            {
                              "name": "ptr",
                              "nativeSrc": "1256:3:27",
                              "nodeType": "YulIdentifier",
                              "src": "1256:3:27"
                            },
                            {
                              "arguments": [],
                              "functionName": {
                                "name": "calldatasize",
                                "nativeSrc": "1261:12:27",
                                "nodeType": "YulIdentifier",
                                "src": "1261:12:27"
                              },
                              "nativeSrc": "1261:14:27",
                              "nodeType": "YulFunctionCall",
                              "src": "1261:14:27"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1277:1:27",
                              "nodeType": "YulLiteral",
                              "src": "1277:1:27",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1280:1:27",
                              "nodeType": "YulLiteral",
                              "src": "1280:1:27",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "delegatecall",
                            "nativeSrc": "1219:12:27",
                            "nodeType": "YulIdentifier",
                            "src": "1219:12:27"
                          },
                          "nativeSrc": "1219:63:27",
                          "nodeType": "YulFunctionCall",
                          "src": "1219:63:27"
                        },
                        "variables": [
                          {
                            "name": "result",
                            "nativeSrc": "1209:6:27",
                            "nodeType": "YulTypedName",
                            "src": "1209:6:27",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nativeSrc": "1296:28:27",
                        "nodeType": "YulVariableDeclaration",
                        "src": "1296:28:27",
                        "value": {
                          "arguments": [],
                          "functionName": {
                            "name": "returndatasize",
                            "nativeSrc": "1308:14:27",
                            "nodeType": "YulIdentifier",
                            "src": "1308:14:27"
                          },
                          "nativeSrc": "1308:16:27",
                          "nodeType": "YulFunctionCall",
                          "src": "1308:16:27"
                        },
                        "variables": [
                          {
                            "name": "size",
                            "nativeSrc": "1300:4:27",
                            "nodeType": "YulTypedName",
                            "src": "1300:4:27",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nativeSrc": "1353:3:27",
                              "nodeType": "YulIdentifier",
                              "src": "1353:3:27"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1358:1:27",
                              "nodeType": "YulLiteral",
                              "src": "1358:1:27",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "name": "size",
                              "nativeSrc": "1361:4:27",
                              "nodeType": "YulIdentifier",
                              "src": "1361:4:27"
                            }
                          ],
                          "functionName": {
                            "name": "returndatacopy",
                            "nativeSrc": "1338:14:27",
                            "nodeType": "YulIdentifier",
                            "src": "1338:14:27"
                          },
                          "nativeSrc": "1338:28:27",
                          "nodeType": "YulFunctionCall",
                          "src": "1338:28:27"
                        },
                        "nativeSrc": "1338:28:27",
                        "nodeType": "YulExpressionStatement",
                        "src": "1338:28:27"
                      },
                      {
                        "cases": [
                          {
                            "body": {
                              "nativeSrc": "1419:111:27",
                              "nodeType": "YulBlock",
                              "src": "1419:111:27",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nativeSrc": "1500:3:27",
                                        "nodeType": "YulIdentifier",
                                        "src": "1500:3:27"
                                      },
                                      {
                                        "name": "size",
                                        "nativeSrc": "1505:4:27",
                                        "nodeType": "YulIdentifier",
                                        "src": "1505:4:27"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "revert",
                                      "nativeSrc": "1493:6:27",
                                      "nodeType": "YulIdentifier",
                                      "src": "1493:6:27"
                                    },
                                    "nativeSrc": "1493:17:27",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1493:17:27"
                                  },
                                  "nativeSrc": "1493:17:27",
                                  "nodeType": "YulExpressionStatement",
                                  "src": "1493:17:27"
                                }
                              ]
                            },
                            "nativeSrc": "1411:119:27",
                            "nodeType": "YulCase",
                            "src": "1411:119:27",
                            "value": {
                              "kind": "number",
                              "nativeSrc": "1416:1:27",
                              "nodeType": "YulLiteral",
                              "src": "1416:1:27",
                              "type": "",
                              "value": "0"
                            }
                          },
                          {
                            "body": {
                              "nativeSrc": "1556:142:27",
                              "nodeType": "YulBlock",
                              "src": "1556:142:27",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nativeSrc": "1668:3:27",
                                        "nodeType": "YulIdentifier",
                                        "src": "1668:3:27"
                                      },
                                      {
                                        "name": "size",
                                        "nativeSrc": "1673:4:27",
                                        "nodeType": "YulIdentifier",
                                        "src": "1673:4:27"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "return",
                                      "nativeSrc": "1661:6:27",
                                      "nodeType": "YulIdentifier",
                                      "src": "1661:6:27"
                                    },
                                    "nativeSrc": "1661:17:27",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1661:17:27"
                                  },
                                  "nativeSrc": "1661:17:27",
                                  "nodeType": "YulExpressionStatement",
                                  "src": "1661:17:27"
                                }
                              ]
                            },
                            "nativeSrc": "1548:150:27",
                            "nodeType": "YulCase",
                            "src": "1548:150:27",
                            "value": "default"
                          }
                        ],
                        "expression": {
                          "name": "result",
                          "nativeSrc": "1387:6:27",
                          "nodeType": "YulIdentifier",
                          "src": "1387:6:27"
                        },
                        "nativeSrc": "1380:318:27",
                        "nodeType": "YulSwitch",
                        "src": "1380:318:27"
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 3497,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1239:15:27",
                      "valueSize": 1
                    }
                  ],
                  "id": 3501,
                  "nodeType": "InlineAssembly",
                  "src": "799:910:27"
                }
              ]
            },
            "documentation": {
              "id": 3493,
              "nodeType": "StructuredDocumentation",
              "src": "590:69:27",
              "text": "Payable fallback accepts delegating calls to payable functions.  "
            },
            "id": 3503,
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3494,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "673:2:27"
            },
            "returnParameters": {
              "id": 3495,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "693:0:27"
            },
            "scope": 3700,
            "src": "665:1051:27",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3513,
              "nodeType": "Block",
              "src": "1837:54:27",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 3509,
                        "name": "__proxySlot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3699,
                        "src": "1855:11:27",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ProxiableSlot_$24160_storage_ptr_$",
                          "typeString": "function () pure returns (struct Proxiable.ProxiableSlot storage pointer)"
                        }
                      },
                      "id": 3510,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1855:13:27",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProxiableSlot_$24160_storage_ptr",
                        "typeString": "struct Proxiable.ProxiableSlot storage pointer"
                      }
                    },
                    "id": 3511,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "1869:14:27",
                    "memberName": "implementation",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 24155,
                    "src": "1855:28:27",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 3508,
                  "id": 3512,
                  "nodeType": "Return",
                  "src": "1848:35:27"
                }
              ]
            },
            "documentation": {
              "id": 3504,
              "nodeType": "StructuredDocumentation",
              "src": "1724:51:27",
              "text": "Returns proxy's current implementation address."
            },
            "functionSelector": "5c60da1b",
            "id": 3514,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "implementation",
            "nameLocation": "1790:14:27",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3505,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1804:2:27"
            },
            "returnParameters": {
              "id": 3508,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3507,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3514,
                  "src": "1828:7:27",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3506,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1828:7:27",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1827:9:27"
            },
            "scope": 3700,
            "src": "1781:110:27",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3689,
              "nodeType": "Block",
              "src": "2292:2686:27",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3530,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 3525,
                          "name": "_newImplementation",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3517,
                          "src": "2358:18:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 3528,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2388:1:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 3527,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2380:7:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 3526,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2380:7:27",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 3529,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2380:10:27",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2358:32:27",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e",
                        "id": 3531,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2392:34:27",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d599eaa5e68d91d75c142446490ab9a15fd0284a41ce949219b5b4d8f267239a",
                          "typeString": "literal_string \"WitnetProxy: null implementation\""
                        },
                        "value": "WitnetProxy: null implementation"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d599eaa5e68d91d75c142446490ab9a15fd0284a41ce949219b5b4d8f267239a",
                          "typeString": "literal_string \"WitnetProxy: null implementation\""
                        }
                      ],
                      "id": 3524,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2350:7:27",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3532,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2350:77:27",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3533,
                  "nodeType": "ExpressionStatement",
                  "src": "2350:77:27"
                },
                {
                  "assignments": [
                    3535
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3535,
                      "mutability": "mutable",
                      "name": "_oldImplementation",
                      "nameLocation": "2448:18:27",
                      "nodeType": "VariableDeclaration",
                      "scope": 3689,
                      "src": "2440:26:27",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3534,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2440:7:27",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3538,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 3536,
                      "name": "implementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3514,
                      "src": "2469:14:27",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 3537,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2469:16:27",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2440:45:27"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3544,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3539,
                      "name": "_oldImplementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3535,
                      "src": "2500:18:27",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 3542,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2530:1:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 3541,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2522:7:27",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 3540,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2522:7:27",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 3543,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2522:10:27",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2500:32:27",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3620,
                  "nodeType": "IfStatement",
                  "src": "2496:1298:27",
                  "trueBody": {
                    "id": 3619,
                    "nodeType": "Block",
                    "src": "2534:1260:27",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 3548,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3546,
                                "name": "_newImplementation",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3517,
                                "src": "2630:18:27",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "id": 3547,
                                "name": "_oldImplementation",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3535,
                                "src": "2652:18:27",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "2630:40:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5769746e657450726f78793a206e6f7468696e6720746f2075706772616465",
                              "id": 3549,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2672:33:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e332eab1bae45430d1201a30c0d80d8fcb5570f9e70201a9eb7b229e17fd2084",
                                "typeString": "literal_string \"WitnetProxy: nothing to upgrade\""
                              },
                              "value": "WitnetProxy: nothing to upgrade"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_e332eab1bae45430d1201a30c0d80d8fcb5570f9e70201a9eb7b229e17fd2084",
                                "typeString": "literal_string \"WitnetProxy: nothing to upgrade\""
                              }
                            ],
                            "id": 3545,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "2622:7:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2622:84:27",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3551,
                        "nodeType": "ExpressionStatement",
                        "src": "2622:84:27"
                      },
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 3565,
                              "nodeType": "Block",
                              "src": "2886:88:27",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 3561,
                                        "name": "_isUpgradable",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3558,
                                        "src": "2913:13:27",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      {
                                        "hexValue": "5769746e657450726f78793a206e6f742075706772616461626c65",
                                        "id": 3562,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "2928:29:27",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_d96132834a96bae5cb2f32cb07f13985dcde0f2358055c198eb3065af6c5aa7f",
                                          "typeString": "literal_string \"WitnetProxy: not upgradable\""
                                        },
                                        "value": "WitnetProxy: not upgradable"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        {
                                          "typeIdentifier": "t_stringliteral_d96132834a96bae5cb2f32cb07f13985dcde0f2358055c198eb3065af6c5aa7f",
                                          "typeString": "literal_string \"WitnetProxy: not upgradable\""
                                        }
                                      ],
                                      "id": 3560,
                                      "name": "require",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        4294967278,
                                        4294967278
                                      ],
                                      "referencedDeclaration": 4294967278,
                                      "src": "2905:7:27",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                        "typeString": "function (bool,string memory) pure"
                                      }
                                    },
                                    "id": 3563,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2905:53:27",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 3564,
                                  "nodeType": "ExpressionStatement",
                                  "src": "2905:53:27"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 3566,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 3559,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 3558,
                                  "mutability": "mutable",
                                  "name": "_isUpgradable",
                                  "nameLocation": "2871:13:27",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3566,
                                  "src": "2866:18:27",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 3557,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2866:4:27",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "2865:20:27"
                            },
                            "src": "2857:117:27"
                          },
                          {
                            "block": {
                              "id": 3571,
                              "nodeType": "Block",
                              "src": "2981:87:27",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "hexValue": "5769746e657450726f78793a20756e61626c6520746f20636865636b207570677261646162696c697479",
                                        "id": 3568,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3007:44:27",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_7f859058ad3ee4e192700ff813ed67dc892a0c7de91510ee584a0ac25fc982fc",
                                          "typeString": "literal_string \"WitnetProxy: unable to check upgradability\""
                                        },
                                        "value": "WitnetProxy: unable to check upgradability"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_stringliteral_7f859058ad3ee4e192700ff813ed67dc892a0c7de91510ee584a0ac25fc982fc",
                                          "typeString": "literal_string \"WitnetProxy: unable to check upgradability\""
                                        }
                                      ],
                                      "id": 3567,
                                      "name": "revert",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        4294967277,
                                        4294967277
                                      ],
                                      "referencedDeclaration": 4294967277,
                                      "src": "3000:6:27",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                        "typeString": "function (string memory) pure"
                                      }
                                    },
                                    "id": 3569,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3000:52:27",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 3570,
                                  "nodeType": "ExpressionStatement",
                                  "src": "3000:52:27"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 3572,
                            "nodeType": "TryCatchClause",
                            "src": "2975:93:27"
                          }
                        ],
                        "externalCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3553,
                                  "name": "_oldImplementation",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3535,
                                  "src": "2822:18:27",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3552,
                                "name": "Upgradeable",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24304,
                                "src": "2810:11:27",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Upgradeable_$24304_$",
                                  "typeString": "type(contract Upgradeable)"
                                }
                              },
                              "id": 3554,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2810:31:27",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Upgradeable_$24304",
                                "typeString": "contract Upgradeable"
                              }
                            },
                            "id": 3555,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2842:12:27",
                            "memberName": "isUpgradable",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24283,
                            "src": "2810:44:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                              "typeString": "function () view external returns (bool)"
                            }
                          },
                          "id": 3556,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2810:46:27",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3573,
                        "nodeType": "TryStatement",
                        "src": "2806:262:27"
                      },
                      {
                        "assignments": [
                          3575,
                          3577
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3575,
                            "mutability": "mutable",
                            "name": "_wasCalled",
                            "nameLocation": "3186:10:27",
                            "nodeType": "VariableDeclaration",
                            "scope": 3619,
                            "src": "3181:15:27",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3574,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "3181:4:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3577,
                            "mutability": "mutable",
                            "name": "_result",
                            "nameLocation": "3211:7:27",
                            "nodeType": "VariableDeclaration",
                            "scope": 3619,
                            "src": "3198:20:27",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 3576,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "3198:5:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3587,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "697355706772616461626c6546726f6d286164647265737329",
                                  "id": 3582,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3318:27:27",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_6b58960af5008b519145bb1cb07a67ee0927d8e642573c92f5babc4d0c2721d7",
                                    "typeString": "literal_string \"isUpgradableFrom(address)\""
                                  },
                                  "value": "isUpgradableFrom(address)"
                                },
                                {
                                  "expression": {
                                    "id": 3583,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967281,
                                    "src": "3368:3:27",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 3584,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "3372:6:27",
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "3368:10:27",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_6b58960af5008b519145bb1cb07a67ee0927d8e642573c92f5babc4d0c2721d7",
                                    "typeString": "literal_string \"isUpgradableFrom(address)\""
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 3580,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967295,
                                  "src": "3272:3:27",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 3581,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "3276:19:27",
                                "memberName": "encodeWithSignature",
                                "nodeType": "MemberAccess",
                                "src": "3272:23:27",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (string memory) pure returns (bytes memory)"
                                }
                              },
                              "id": 3585,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3272:125:27",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 3578,
                              "name": "_oldImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3535,
                              "src": "3222:18:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 3579,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3241:12:27",
                            "memberName": "delegatecall",
                            "nodeType": "MemberAccess",
                            "src": "3222:31:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) returns (bool,bytes memory)"
                            }
                          },
                          "id": 3586,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3222:190:27",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3180:232:27"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3589,
                              "name": "_wasCalled",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3575,
                              "src": "3435:10:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d656e746174696f6e",
                              "id": 3590,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3447:41:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4",
                                "typeString": "literal_string \"WitnetProxy: uncompliant implementation\""
                              },
                              "value": "WitnetProxy: uncompliant implementation"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4",
                                "typeString": "literal_string \"WitnetProxy: uncompliant implementation\""
                              }
                            ],
                            "id": 3588,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "3427:7:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3591,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3427:62:27",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3592,
                        "nodeType": "ExpressionStatement",
                        "src": "3427:62:27"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 3596,
                                  "name": "_result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3577,
                                  "src": "3523:7:27",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                {
                                  "components": [
                                    {
                                      "id": 3598,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "3533:4:27",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_bool_$",
                                        "typeString": "type(bool)"
                                      },
                                      "typeName": {
                                        "id": 3597,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3533:4:27",
                                        "typeDescriptions": {}
                                      }
                                    }
                                  ],
                                  "id": 3599,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "3532:6:27",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bool_$",
                                    "typeString": "type(bool)"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  },
                                  {
                                    "typeIdentifier": "t_type$_t_bool_$",
                                    "typeString": "type(bool)"
                                  }
                                ],
                                "expression": {
                                  "id": 3594,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967295,
                                  "src": "3512:3:27",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 3595,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "3516:6:27",
                                "memberName": "decode",
                                "nodeType": "MemberAccess",
                                "src": "3512:10:27",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 3600,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3512:27:27",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5769746e657450726f78793a206e6f7420617574686f72697a6564",
                              "id": 3601,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3541:29:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ba8d4d661ce88eb2915ba133e6cad533938b754d7b66d8253879ef2c2193ecb2",
                                "typeString": "literal_string \"WitnetProxy: not authorized\""
                              },
                              "value": "WitnetProxy: not authorized"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ba8d4d661ce88eb2915ba133e6cad533938b754d7b66d8253879ef2c2193ecb2",
                                "typeString": "literal_string \"WitnetProxy: not authorized\""
                              }
                            ],
                            "id": 3593,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "3504:7:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3504:67:27",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3603,
                        "nodeType": "ExpressionStatement",
                        "src": "3504:67:27"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "id": 3615,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 3606,
                                        "name": "_oldImplementation",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3535,
                                        "src": "3624:18:27",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 3605,
                                      "name": "Upgradeable",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24304,
                                      "src": "3612:11:27",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Upgradeable_$24304_$",
                                        "typeString": "type(contract Upgradeable)"
                                      }
                                    },
                                    "id": 3607,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3612:31:27",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Upgradeable_$24304",
                                      "typeString": "contract Upgradeable"
                                    }
                                  },
                                  "id": 3608,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "3644:13:27",
                                  "memberName": "proxiableUUID",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 24153,
                                  "src": "3612:45:27",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                                    "typeString": "function () view external returns (bytes32)"
                                  }
                                },
                                "id": 3609,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3612:47:27",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 3611,
                                        "name": "_newImplementation",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3517,
                                        "src": "3675:18:27",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 3610,
                                      "name": "Upgradeable",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24304,
                                      "src": "3663:11:27",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Upgradeable_$24304_$",
                                        "typeString": "type(contract Upgradeable)"
                                      }
                                    },
                                    "id": 3612,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3663:31:27",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Upgradeable_$24304",
                                      "typeString": "contract Upgradeable"
                                    }
                                  },
                                  "id": 3613,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "3695:13:27",
                                  "memberName": "proxiableUUID",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 24153,
                                  "src": "3663:45:27",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                                    "typeString": "function () view external returns (bytes32)"
                                  }
                                },
                                "id": 3614,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3663:47:27",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "src": "3612:98:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5769746e657450726f78793a2070726f786961626c655555494473206d69736d61746368",
                              "id": 3616,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3729:38:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f3c1ad1fa1688d47e62cc4dd5b4be101315ef47e38e05aa3a37a4ef2e1cec0a8",
                                "typeString": "literal_string \"WitnetProxy: proxiableUUIDs mismatch\""
                              },
                              "value": "WitnetProxy: proxiableUUIDs mismatch"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f3c1ad1fa1688d47e62cc4dd5b4be101315ef47e38e05aa3a37a4ef2e1cec0a8",
                                "typeString": "literal_string \"WitnetProxy: proxiableUUIDs mismatch\""
                              }
                            ],
                            "id": 3604,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "3586:7:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3617,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3586:196:27",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3618,
                        "nodeType": "ExpressionStatement",
                        "src": "3586:196:27"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3622,
                    3624
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3622,
                      "mutability": "mutable",
                      "name": "_wasInitialized",
                      "nameLocation": "3884:15:27",
                      "nodeType": "VariableDeclaration",
                      "scope": 3689,
                      "src": "3879:20:27",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 3621,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "3879:4:27",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3624,
                      "mutability": "mutable",
                      "name": "_returnData",
                      "nameLocation": "3914:11:27",
                      "nodeType": "VariableDeclaration",
                      "scope": 3689,
                      "src": "3901:24:27",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 3623,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "3901:5:27",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3633,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "696e697469616c697a6528627974657329",
                            "id": 3629,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4017:19:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_439fab91f8ccf5be59586b9cf7bb7786c67a661a95ce1cfc146c1ed62922ae26",
                              "typeString": "literal_string \"initialize(bytes)\""
                            },
                            "value": "initialize(bytes)"
                          },
                          {
                            "id": 3630,
                            "name": "_initData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3519,
                            "src": "4055:9:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_439fab91f8ccf5be59586b9cf7bb7786c67a661a95ce1cfc146c1ed62922ae26",
                              "typeString": "literal_string \"initialize(bytes)\""
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "id": 3627,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "3975:3:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3628,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "3979:19:27",
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "3975:23:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 3631,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3975:104:27",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 3625,
                        "name": "_newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3517,
                        "src": "3929:18:27",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 3626,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3948:12:27",
                      "memberName": "delegatecall",
                      "nodeType": "MemberAccess",
                      "src": "3929:31:27",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) returns (bool,bytes memory)"
                      }
                    },
                    "id": 3632,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3929:161:27",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3878:212:27"
                },
                {
                  "condition": {
                    "id": 3635,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "4105:16:27",
                    "subExpression": {
                      "id": 3634,
                      "name": "_wasInitialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3622,
                      "src": "4106:15:27",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3659,
                  "nodeType": "IfStatement",
                  "src": "4101:344:27",
                  "trueBody": {
                    "id": 3658,
                    "nodeType": "Block",
                    "src": "4123:322:27",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3639,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 3636,
                              "name": "_returnData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3624,
                              "src": "4142:11:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 3637,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4154:6:27",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "4142:18:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "hexValue": "3638",
                            "id": 3638,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4163:2:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_68_by_1",
                              "typeString": "int_const 68"
                            },
                            "value": "68"
                          },
                          "src": "4142:23:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 3656,
                          "nodeType": "Block",
                          "src": "4252:182:27",
                          "statements": [
                            {
                              "AST": {
                                "nativeSrc": "4280:79:27",
                                "nodeType": "YulBlock",
                                "src": "4280:79:27",
                                "statements": [
                                  {
                                    "nativeSrc": "4303:37:27",
                                    "nodeType": "YulAssignment",
                                    "src": "4303:37:27",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "_returnData",
                                          "nativeSrc": "4322:11:27",
                                          "nodeType": "YulIdentifier",
                                          "src": "4322:11:27"
                                        },
                                        {
                                          "kind": "number",
                                          "nativeSrc": "4335:4:27",
                                          "nodeType": "YulLiteral",
                                          "src": "4335:4:27",
                                          "type": "",
                                          "value": "0x04"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nativeSrc": "4318:3:27",
                                        "nodeType": "YulIdentifier",
                                        "src": "4318:3:27"
                                      },
                                      "nativeSrc": "4318:22:27",
                                      "nodeType": "YulFunctionCall",
                                      "src": "4318:22:27"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "_returnData",
                                        "nativeSrc": "4303:11:27",
                                        "nodeType": "YulIdentifier",
                                        "src": "4303:11:27"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "paris",
                              "externalReferences": [
                                {
                                  "declaration": 3624,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "4303:11:27",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 3624,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "4322:11:27",
                                  "valueSize": 1
                                }
                              ],
                              "id": 3645,
                              "nodeType": "InlineAssembly",
                              "src": "4271:88:27"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 3649,
                                        "name": "_returnData",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3624,
                                        "src": "4395:11:27",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "components": [
                                          {
                                            "id": 3651,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "4409:6:27",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                              "typeString": "type(string storage pointer)"
                                            },
                                            "typeName": {
                                              "id": 3650,
                                              "name": "string",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "4409:6:27",
                                              "typeDescriptions": {}
                                            }
                                          }
                                        ],
                                        "id": 3652,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "4408:8:27",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                          "typeString": "type(string storage pointer)"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                          "typeString": "type(string storage pointer)"
                                        }
                                      ],
                                      "expression": {
                                        "id": 3647,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967295,
                                        "src": "4384:3:27",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 3648,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberLocation": "4388:6:27",
                                      "memberName": "decode",
                                      "nodeType": "MemberAccess",
                                      "src": "4384:10:27",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 3653,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4384:33:27",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 3646,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    4294967277,
                                    4294967277
                                  ],
                                  "referencedDeclaration": 4294967277,
                                  "src": "4377:6:27",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 3654,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4377:41:27",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3655,
                              "nodeType": "ExpressionStatement",
                              "src": "4377:41:27"
                            }
                          ]
                        },
                        "id": 3657,
                        "nodeType": "IfStatement",
                        "src": "4138:296:27",
                        "trueBody": {
                          "id": 3644,
                          "nodeType": "Block",
                          "src": "4167:79:27",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "hexValue": "5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c6564",
                                    "id": 3641,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4193:36:27",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_1a3a4ea76e2e68e14fc5328c93896fc2e23cf33c9f37d13d21f0003bedc2d604",
                                      "typeString": "literal_string \"WitnetProxy: initialization failed\""
                                    },
                                    "value": "WitnetProxy: initialization failed"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_1a3a4ea76e2e68e14fc5328c93896fc2e23cf33c9f37d13d21f0003bedc2d604",
                                      "typeString": "literal_string \"WitnetProxy: initialization failed\""
                                    }
                                  ],
                                  "id": 3640,
                                  "name": "revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    4294967277,
                                    4294967277
                                  ],
                                  "referencedDeclaration": 4294967277,
                                  "src": "4186:6:27",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (string memory) pure"
                                  }
                                },
                                "id": 3642,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4186:44:27",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3643,
                              "nodeType": "ExpressionStatement",
                              "src": "4186:44:27"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 3664,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 3660,
                          "name": "__proxySlot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3699,
                          "src": "4539:11:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ProxiableSlot_$24160_storage_ptr_$",
                            "typeString": "function () pure returns (struct Proxiable.ProxiableSlot storage pointer)"
                          }
                        },
                        "id": 3661,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4539:13:27",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProxiableSlot_$24160_storage_ptr",
                          "typeString": "struct Proxiable.ProxiableSlot storage pointer"
                        }
                      },
                      "id": 3662,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "4553:14:27",
                      "memberName": "implementation",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 24155,
                      "src": "4539:28:27",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3663,
                      "name": "_newImplementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3517,
                      "src": "4570:18:27",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4539:49:27",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3665,
                  "nodeType": "ExpressionStatement",
                  "src": "4539:49:27"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 3667,
                        "name": "_newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3517,
                        "src": "4619:18:27",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3666,
                      "name": "Upgraded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3483,
                      "src": "4610:8:27",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 3668,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4610:28:27",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3669,
                  "nodeType": "EmitStatement",
                  "src": "4605:33:27"
                },
                {
                  "clauses": [
                    {
                      "block": {
                        "id": 3680,
                        "nodeType": "Block",
                        "src": "4831:47:27",
                        "statements": [
                          {
                            "expression": {
                              "id": 3678,
                              "name": "_isUpgradable",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3676,
                              "src": "4853:13:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "functionReturnParameters": 3523,
                            "id": 3679,
                            "nodeType": "Return",
                            "src": "4846:20:27"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 3681,
                      "nodeType": "TryCatchClause",
                      "parameters": {
                        "id": 3677,
                        "nodeType": "ParameterList",
                        "parameters": [
                          {
                            "constant": false,
                            "id": 3676,
                            "mutability": "mutable",
                            "name": "_isUpgradable",
                            "nameLocation": "4816:13:27",
                            "nodeType": "VariableDeclaration",
                            "scope": 3681,
                            "src": "4811:18:27",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3675,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4811:4:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "src": "4810:20:27"
                      },
                      "src": "4802:76:27"
                    },
                    {
                      "block": {
                        "id": 3686,
                        "nodeType": "Block",
                        "src": "4894:77:27",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "hexValue": "5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d656e746174696f6e",
                                  "id": 3683,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4917:41:27",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4",
                                    "typeString": "literal_string \"WitnetProxy: uncompliant implementation\""
                                  },
                                  "value": "WitnetProxy: uncompliant implementation"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4",
                                    "typeString": "literal_string \"WitnetProxy: uncompliant implementation\""
                                  }
                                ],
                                "id": 3682,
                                "name": "revert",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  4294967277,
                                  4294967277
                                ],
                                "referencedDeclaration": 4294967277,
                                "src": "4909:6:27",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (string memory) pure"
                                }
                              },
                              "id": 3684,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4909:50:27",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 3685,
                            "nodeType": "ExpressionStatement",
                            "src": "4909:50:27"
                          }
                        ]
                      },
                      "errorName": "",
                      "id": 3687,
                      "nodeType": "TryCatchClause",
                      "src": "4888:83:27"
                    }
                  ],
                  "externalCall": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "id": 3671,
                            "name": "_newImplementation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3517,
                            "src": "4767:18:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 3670,
                          "name": "Upgradeable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24304,
                          "src": "4755:11:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Upgradeable_$24304_$",
                            "typeString": "type(contract Upgradeable)"
                          }
                        },
                        "id": 3672,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4755:31:27",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Upgradeable_$24304",
                          "typeString": "contract Upgradeable"
                        }
                      },
                      "id": 3673,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4787:12:27",
                      "memberName": "isUpgradable",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 24283,
                      "src": "4755:44:27",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                        "typeString": "function () view external returns (bool)"
                      }
                    },
                    "id": 3674,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4755:46:27",
                    "tryCall": true,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3688,
                  "nodeType": "TryStatement",
                  "src": "4751:220:27"
                }
              ]
            },
            "documentation": {
              "id": 3515,
              "nodeType": "StructuredDocumentation",
              "src": "1899:280:27",
              "text": "Upgrades the `implementation` address.\n @param _newImplementation New implementation address.\n @param _initData Raw data with which new implementation will be initialized.\n @return Returns whether new implementation would be further upgradable, or not."
            },
            "functionSelector": "6fbc15e9",
            "id": 3690,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "upgradeTo",
            "nameLocation": "2194:9:27",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3520,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3517,
                  "mutability": "mutable",
                  "name": "_newImplementation",
                  "nameLocation": "2212:18:27",
                  "nodeType": "VariableDeclaration",
                  "scope": 3690,
                  "src": "2204:26:27",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3516,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2204:7:27",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3519,
                  "mutability": "mutable",
                  "name": "_initData",
                  "nameLocation": "2245:9:27",
                  "nodeType": "VariableDeclaration",
                  "scope": 3690,
                  "src": "2232:22:27",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3518,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2232:5:27",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2203:52:27"
            },
            "returnParameters": {
              "id": 3523,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3522,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3690,
                  "src": "2281:4:27",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3521,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2281:4:27",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2280:6:27"
            },
            "scope": 3700,
            "src": "2185:2793:27",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3698,
              "nodeType": "Block",
              "src": "5185:213:27",
              "statements": [
                {
                  "AST": {
                    "nativeSrc": "5205:186:27",
                    "nodeType": "YulBlock",
                    "src": "5205:186:27",
                    "statements": [
                      {
                        "nativeSrc": "5300:80:27",
                        "nodeType": "YulAssignment",
                        "src": "5300:80:27",
                        "value": {
                          "kind": "number",
                          "nativeSrc": "5314:66:27",
                          "nodeType": "YulLiteral",
                          "src": "5314:66:27",
                          "type": "",
                          "value": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"
                        },
                        "variableNames": [
                          {
                            "name": "_slot.slot",
                            "nativeSrc": "5300:10:27",
                            "nodeType": "YulIdentifier",
                            "src": "5300:10:27"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 3695,
                      "isOffset": false,
                      "isSlot": true,
                      "src": "5300:10:27",
                      "suffix": "slot",
                      "valueSize": 1
                    }
                  ],
                  "id": 3697,
                  "nodeType": "InlineAssembly",
                  "src": "5196:195:27"
                }
              ]
            },
            "documentation": {
              "id": 3691,
              "nodeType": "StructuredDocumentation",
              "src": "4986:109:27",
              "text": "@dev Complying with EIP-1967, retrieves storage struct containing proxy's current implementation address."
            },
            "id": 3699,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "__proxySlot",
            "nameLocation": "5110:11:27",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3692,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5121:2:27"
            },
            "returnParameters": {
              "id": 3696,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3695,
                  "mutability": "mutable",
                  "name": "_slot",
                  "nameLocation": "5178:5:27",
                  "nodeType": "VariableDeclaration",
                  "scope": 3699,
                  "src": "5146:37:27",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ProxiableSlot_$24160_storage_ptr",
                    "typeString": "struct Proxiable.ProxiableSlot"
                  },
                  "typeName": {
                    "id": 3694,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3693,
                      "name": "Proxiable.ProxiableSlot",
                      "nameLocations": [
                        "5146:9:27",
                        "5156:13:27"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 24160,
                      "src": "5146:23:27"
                    },
                    "referencedDeclaration": 24160,
                    "src": "5146:23:27",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProxiableSlot_$24160_storage_ptr",
                      "typeString": "struct Proxiable.ProxiableSlot"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5145:39:27"
            },
            "scope": 3700,
            "src": "5101:297:27",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          }
        ],
        "scope": 3701,
        "src": "264:5139:27",
        "usedErrors": [],
        "usedEvents": [
          3483
        ]
      }
    ],
    "src": "35:5370:27"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.25+commit.b61c2a91.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2024-12-05T09:36:04.213Z",
  "devdoc": {
    "author": "Guillermo Díaz <guillermo@otherplane.com>",
    "kind": "dev",
    "methods": {
      "upgradeTo(address,bytes)": {
        "params": {
          "_initData": "Raw data with which new implementation will be initialized.",
          "_newImplementation": "New implementation address."
        },
        "returns": {
          "_0": "Returns whether new implementation would be further upgradable, or not."
        }
      }
    },
    "title": "WitnetProxy: upgradable delegate-proxy contract. ",
    "version": 1
  },
  "userdoc": {
    "events": {
      "Upgraded(address)": {
        "notice": "Event emitted every time the implementation gets updated."
      }
    },
    "kind": "user",
    "methods": {
      "constructor": {
        "notice": "Constructor with no params as to ease eventual support of Singleton pattern (i.e. ERC-2470)."
      },
      "implementation()": {
        "notice": "Returns proxy's current implementation address."
      },
      "upgradeTo(address,bytes)": {
        "notice": "Upgrades the `implementation` address."
      }
    },
    "version": 1
  }
}