{
  "_format": "ethers-rs-sol-build-info-1",
  "solcVersion": "0.8.19",
  "solcLongVersion": "0.8.19+commit.7dd6d404.Darwin.appleclang",
  "input": {
    "language": "Solidity",
    "sources": {
      "src/v0.8/mcm/CallProxy/CallProxy.sol": {
        "content": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity =0.8.19;\n\n/// @notice a contract which acts as a forwarder that forwards the input from\n/// any caller to a a target contract.\ncontract CallProxy {\n    event TargetSet(address target);\n\n    address immutable i_target;\n\n    constructor(address target) {\n        i_target = target;\n        emit TargetSet(target);\n    }\n\n    fallback() external payable {\n        address target = i_target;\n        assembly {\n            // This code destroys Solidity's memory layout.\n            // That's fine, because we never return to Solidity anyways,\n            // we either return or revert out of the callframe at the end.\n            calldatacopy(0, 0, calldatasize())\n            let success := call(gas(), target, callvalue(), 0, calldatasize(), 0, 0)\n            returndatacopy(0, 0, returndatasize())\n            if success { return(0, returndatasize()) }\n            revert(0, returndatasize())\n        }\n    }\n}\n"
      },
      "test/v0.8/foundry/dev/special/MockLinkToken.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract MockLinkToken {\n  uint256 public constant totalSupply = 10 ** 27;\n\n  mapping(address => uint256) public balances;\n\n  constructor() {\n    balances[msg.sender] = totalSupply;\n  }\n\n  /**\n   * @dev transfer token for a specified address\n   * @param _to The address to transfer to.\n   * @param _value The amount to be transferred.\n   */\n  function transfer(address _to, uint256 _value) public returns (bool) {\n    balances[msg.sender] = balances[msg.sender] - _value;\n    balances[_to] = balances[_to] + _value;\n    return true;\n  }\n\n  function transferAndCall(\n    address _to,\n    uint256 _value,\n    bytes calldata _data\n  ) public validRecipient(_to) returns (bool success) {\n    transfer(_to, _value);\n    if (isContract(_to)) {\n      contractFallback(_to, _value, _data);\n    }\n    return true;\n  }\n\n  function balanceOf(address _a) public view returns (uint256 balance) {\n    return balances[_a];\n  }\n\n  modifier validRecipient(address _recipient) {\n    require(_recipient != address(0) && _recipient != address(this));\n    _;\n  }\n\n  function contractFallback(address _to, uint256 _value, bytes calldata _data) private {\n    ERC677Receiver receiver = ERC677Receiver(_to);\n    receiver.onTokenTransfer(msg.sender, _value, _data);\n  }\n\n  function isContract(address _addr) private returns (bool hasCode) {\n    uint256 length;\n    assembly {\n      length := extcodesize(_addr)\n    }\n    return length > 0;\n  }\n}\n\ninterface ERC677Receiver {\n  function onTokenTransfer(address _sender, uint256 _value, bytes calldata _data) external;\n}\n"
      }
    },
    "settings": {
      "remappings": [
        "@eth-optimism/=node_modules/@eth-optimism/",
        "@openzeppelin/=node_modules/@openzeppelin/",
        "ds-test/=foundry-lib/forge-std/lib/ds-test/src/",
        "erc4626-tests/=foundry-lib/openzeppelin-contracts/lib/erc4626-tests/",
        "forge-std/=foundry-lib/forge-std/src/",
        "hardhat/=node_modules/hardhat/",
        "openzeppelin-contracts/=foundry-lib/openzeppelin-contracts/contracts/"
      ],
      "optimizer": {
        "enabled": false,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "none",
        "appendCBOR": true
      },
      "outputSelection": {
        "src/v0.8/mcm/CallProxy/CallProxy.sol": {
          "": [
            "ast"
          ],
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers",
            "metadata"
          ]
        },
        "test/v0.8/foundry/dev/special/MockLinkToken.sol": {
          "": [
            "ast"
          ],
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers",
            "metadata"
          ]
        }
      },
      "evmVersion": "london",
      "libraries": {}
    }
  },
  "id": "6acbd66af758a36ed3dac12d35df13f9",
  "output": {
    "errors": [
      {
        "sourceLocation": {
          "file": "test/v0.8/foundry/dev/special/MockLinkToken.sol",
          "start": 1304,
          "end": 1474
        },
        "type": "Warning",
        "component": "general",
        "severity": "warning",
        "errorCode": "2018",
        "message": "Function state mutability can be restricted to view",
        "formattedMessage": "Warning: Function state mutability can be restricted to view\n  --> test/v0.8/foundry/dev/special/MockLinkToken.sol:50:3:\n   |\n50 |   function isContract(address _addr) private returns (bool hasCode) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n"
      }
    ],
    "sources": {
      "src/v0.8/mcm/CallProxy/CallProxy.sol": {
        "id": 0,
        "ast": {
          "absolutePath": "src/v0.8/mcm/CallProxy/CallProxy.sol",
          "id": 33,
          "exportedSymbols": {
            "CallProxy": [
              32
            ]
          },
          "nodeType": "SourceUnit",
          "src": "37:927:0",
          "nodes": [
            {
              "id": 1,
              "nodeType": "PragmaDirective",
              "src": "37:24:0",
              "nodes": [],
              "literals": [
                "solidity",
                "=",
                "0.8",
                ".19"
              ]
            },
            {
              "id": 32,
              "nodeType": "ContractDefinition",
              "src": "180:783:0",
              "nodes": [
                {
                  "id": 6,
                  "nodeType": "EventDefinition",
                  "src": "205:32:0",
                  "nodes": [],
                  "anonymous": false,
                  "eventSelector": "3bfb4bbf112628248058745a3c57e35b13369386e474b8e56c552f3063a4a196",
                  "name": "TargetSet",
                  "nameLocation": "211:9:0",
                  "parameters": {
                    "id": 5,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "229:6:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 6,
                        "src": "221:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "221:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "220:16:0"
                  }
                },
                {
                  "id": 8,
                  "nodeType": "VariableDeclaration",
                  "src": "243:26:0",
                  "nodes": [],
                  "constant": false,
                  "mutability": "immutable",
                  "name": "i_target",
                  "nameLocation": "261:8:0",
                  "scope": 32,
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "243:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "id": 22,
                  "nodeType": "FunctionDefinition",
                  "src": "276:94:0",
                  "nodes": [],
                  "body": {
                    "id": 21,
                    "nodeType": "Block",
                    "src": "304:66:0",
                    "nodes": [],
                    "statements": [
                      {
                        "expression": {
                          "id": 15,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 13,
                            "name": "i_target",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8,
                            "src": "314:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 14,
                            "name": "target",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10,
                            "src": "325:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "314:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 16,
                        "nodeType": "ExpressionStatement",
                        "src": "314:17:0"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 18,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10,
                              "src": "356:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 17,
                            "name": "TargetSet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6,
                            "src": "346:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 19,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "346:17:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 20,
                        "nodeType": "EmitStatement",
                        "src": "341:22:0"
                      }
                    ]
                  },
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "parameters": {
                    "id": 11,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "296:6:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 22,
                        "src": "288:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "288:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "287:16:0"
                  },
                  "returnParameters": {
                    "id": 12,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "304:0:0"
                  },
                  "scope": 32,
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "id": 31,
                  "nodeType": "FunctionDefinition",
                  "src": "376:585:0",
                  "nodes": [],
                  "body": {
                    "id": 30,
                    "nodeType": "Block",
                    "src": "404:557:0",
                    "nodes": [],
                    "statements": [
                      {
                        "assignments": [
                          26
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 26,
                            "mutability": "mutable",
                            "name": "target",
                            "nameLocation": "422:6:0",
                            "nodeType": "VariableDeclaration",
                            "scope": 30,
                            "src": "414:14:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 25,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "414:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 28,
                        "initialValue": {
                          "id": 27,
                          "name": "i_target",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8,
                          "src": "431:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "414:25:0"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "458:497:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "693:1:0",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "696:1:0",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "calldatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "699:12:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "699:14:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "680:12:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "680:34:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "680:34:0"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "727:72:0",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "gas",
                                      "nodeType": "YulIdentifier",
                                      "src": "747:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "747:5:0"
                                  },
                                  {
                                    "name": "target",
                                    "nodeType": "YulIdentifier",
                                    "src": "754:6:0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "callvalue",
                                      "nodeType": "YulIdentifier",
                                      "src": "762:9:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "762:11:0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "775:1:0",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "calldatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "778:12:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "778:14:0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "794:1:0",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "797:1:0",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "call",
                                  "nodeType": "YulIdentifier",
                                  "src": "742:4:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "742:57:0"
                              },
                              "variables": [
                                {
                                  "name": "success",
                                  "nodeType": "YulTypedName",
                                  "src": "731:7:0",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "827:1:0",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "830:1:0",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "833:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "833:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "returndatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "812:14:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "812:38:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "812:38:0"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "874:31:0",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "883:1:0",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [],
                                          "functionName": {
                                            "name": "returndatasize",
                                            "nodeType": "YulIdentifier",
                                            "src": "886:14:0"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "886:16:0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "return",
                                        "nodeType": "YulIdentifier",
                                        "src": "876:6:0"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "876:27:0"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "876:27:0"
                                  }
                                ]
                              },
                              "condition": {
                                "name": "success",
                                "nodeType": "YulIdentifier",
                                "src": "866:7:0"
                              },
                              "nodeType": "YulIf",
                              "src": "863:42:0"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "925:1:0",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "928:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "928:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "918:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "918:27:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "918:27:0"
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 26,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "754:6:0",
                            "valueSize": 1
                          }
                        ],
                        "id": 29,
                        "nodeType": "InlineAssembly",
                        "src": "449:506:0"
                      }
                    ]
                  },
                  "implemented": true,
                  "kind": "fallback",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "parameters": {
                    "id": 23,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "384:2:0"
                  },
                  "returnParameters": {
                    "id": 24,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "404:0:0"
                  },
                  "scope": 32,
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "CallProxy",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 2,
                "nodeType": "StructuredDocumentation",
                "src": "63:117:0",
                "text": "@notice a contract which acts as a forwarder that forwards the input from\n any caller to a a target contract."
              },
              "fullyImplemented": true,
              "linearizedBaseContracts": [
                32
              ],
              "name": "CallProxy",
              "nameLocation": "189:9:0",
              "scope": 33,
              "usedErrors": []
            }
          ],
          "license": "BUSL-1.1"
        }
      },
      "test/v0.8/foundry/dev/special/MockLinkToken.sol": {
        "id": 1,
        "ast": {
          "absolutePath": "test/v0.8/foundry/dev/special/MockLinkToken.sol",
          "id": 210,
          "exportedSymbols": {
            "ERC677Receiver": [
              209
            ],
            "MockLinkToken": [
              199
            ]
          },
          "nodeType": "SourceUnit",
          "src": "32:1567:1",
          "nodes": [
            {
              "id": 34,
              "nodeType": "PragmaDirective",
              "src": "32:23:1",
              "nodes": [],
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ]
            },
            {
              "id": 199,
              "nodeType": "ContractDefinition",
              "src": "57:1419:1",
              "nodes": [
                {
                  "id": 39,
                  "nodeType": "VariableDeclaration",
                  "src": "84:46:1",
                  "nodes": [],
                  "constant": true,
                  "functionSelector": "18160ddd",
                  "mutability": "constant",
                  "name": "totalSupply",
                  "nameLocation": "108:11:1",
                  "scope": 199,
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 35,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "84:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1000000000000000000000000000_by_1",
                      "typeString": "int_const 1000000000000000000000000000"
                    },
                    "id": 38,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "3130",
                      "id": 36,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "122:2:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10_by_1",
                        "typeString": "int_const 10"
                      },
                      "value": "10"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "hexValue": "3237",
                      "id": 37,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "128:2:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_27_by_1",
                        "typeString": "int_const 27"
                      },
                      "value": "27"
                    },
                    "src": "122:8:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1000000000000000000000000000_by_1",
                      "typeString": "int_const 1000000000000000000000000000"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "id": 43,
                  "nodeType": "VariableDeclaration",
                  "src": "135:43:1",
                  "nodes": [],
                  "constant": false,
                  "functionSelector": "27e235e3",
                  "mutability": "mutable",
                  "name": "balances",
                  "nameLocation": "170:8:1",
                  "scope": 199,
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 42,
                    "keyName": "",
                    "keyNameLocation": "-1:-1:-1",
                    "keyType": {
                      "id": 40,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "143:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "135:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueName": "",
                    "valueNameLocation": "-1:-1:-1",
                    "valueType": {
                      "id": 41,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "154:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "id": 54,
                  "nodeType": "FunctionDefinition",
                  "src": "183:59:1",
                  "nodes": [],
                  "body": {
                    "id": 53,
                    "nodeType": "Block",
                    "src": "197:45:1",
                    "nodes": [],
                    "statements": [
                      {
                        "expression": {
                          "id": 51,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 46,
                              "name": "balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 43,
                              "src": "203:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 49,
                            "indexExpression": {
                              "expression": {
                                "id": 47,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "212:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 48,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "216:6:1",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "212:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "203:20:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 50,
                            "name": "totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 39,
                            "src": "226:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "203:34:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 52,
                        "nodeType": "ExpressionStatement",
                        "src": "203:34:1"
                      }
                    ]
                  },
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "parameters": {
                    "id": 44,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "194:2:1"
                  },
                  "returnParameters": {
                    "id": 45,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "197:0:1"
                  },
                  "scope": 199,
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "id": 89,
                  "nodeType": "FunctionDefinition",
                  "src": "400:193:1",
                  "nodes": [],
                  "body": {
                    "id": 88,
                    "nodeType": "Block",
                    "src": "469:124:1",
                    "nodes": [],
                    "statements": [
                      {
                        "expression": {
                          "id": 74,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 64,
                              "name": "balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 43,
                              "src": "475:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 67,
                            "indexExpression": {
                              "expression": {
                                "id": 65,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "484:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 66,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "488:6:1",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "484:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "475:20:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 73,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "baseExpression": {
                                "id": 68,
                                "name": "balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 43,
                                "src": "498:8:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 71,
                              "indexExpression": {
                                "expression": {
                                  "id": 69,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "507:3:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 70,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "511:6:1",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "507:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "498:20:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "id": 72,
                              "name": "_value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59,
                              "src": "521:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "498:29:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "475:52:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 75,
                        "nodeType": "ExpressionStatement",
                        "src": "475:52:1"
                      },
                      {
                        "expression": {
                          "id": 84,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 76,
                              "name": "balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 43,
                              "src": "533:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 78,
                            "indexExpression": {
                              "id": 77,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 57,
                              "src": "542:3:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "533:13:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 83,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "baseExpression": {
                                "id": 79,
                                "name": "balances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 43,
                                "src": "549:8:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 81,
                              "indexExpression": {
                                "id": 80,
                                "name": "_to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 57,
                                "src": "558:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "549:13:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "id": 82,
                              "name": "_value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59,
                              "src": "565:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "549:22:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "533:38:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 85,
                        "nodeType": "ExpressionStatement",
                        "src": "533:38:1"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 86,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "584:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 63,
                        "id": 87,
                        "nodeType": "Return",
                        "src": "577:11:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 55,
                    "nodeType": "StructuredDocumentation",
                    "src": "246:151:1",
                    "text": " @dev transfer token for a specified address\n @param _to The address to transfer to.\n @param _value The amount to be transferred."
                  },
                  "functionSelector": "a9059cbb",
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nameLocation": "409:8:1",
                  "parameters": {
                    "id": 60,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 57,
                        "mutability": "mutable",
                        "name": "_to",
                        "nameLocation": "426:3:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 89,
                        "src": "418:11:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 56,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "418:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 59,
                        "mutability": "mutable",
                        "name": "_value",
                        "nameLocation": "439:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 89,
                        "src": "431:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 58,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "431:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "417:29:1"
                  },
                  "returnParameters": {
                    "id": 63,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 62,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 89,
                        "src": "463:4:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 61,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "463:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "462:6:1"
                  },
                  "scope": 199,
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "id": 122,
                  "nodeType": "FunctionDefinition",
                  "src": "597:268:1",
                  "nodes": [],
                  "body": {
                    "id": 121,
                    "nodeType": "Block",
                    "src": "739:126:1",
                    "nodes": [],
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 104,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 91,
                              "src": "754:3:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 105,
                              "name": "_value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 93,
                              "src": "759:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 103,
                            "name": "transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 89,
                            "src": "745:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) returns (bool)"
                            }
                          },
                          "id": 106,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "745:21:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 107,
                        "nodeType": "ExpressionStatement",
                        "src": "745:21:1"
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 109,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 91,
                              "src": "787:3:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 108,
                            "name": "isContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 198,
                            "src": "776:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) returns (bool)"
                            }
                          },
                          "id": 110,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "776:15:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 118,
                        "nodeType": "IfStatement",
                        "src": "772:72:1",
                        "trueBody": {
                          "id": 117,
                          "nodeType": "Block",
                          "src": "793:51:1",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 112,
                                    "name": "_to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 91,
                                    "src": "818:3:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 113,
                                    "name": "_value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 93,
                                    "src": "823:6:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 114,
                                    "name": "_data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 95,
                                    "src": "831:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    }
                                  ],
                                  "id": 111,
                                  "name": "contractFallback",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 182,
                                  "src": "801:16:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$__$",
                                    "typeString": "function (address,uint256,bytes calldata)"
                                  }
                                },
                                "id": 115,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "801:36:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 116,
                              "nodeType": "ExpressionStatement",
                              "src": "801:36:1"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 119,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "856:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 102,
                        "id": 120,
                        "nodeType": "Return",
                        "src": "849:11:1"
                      }
                    ]
                  },
                  "functionSelector": "4000aea0",
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 98,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 91,
                          "src": "711:3:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 99,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 97,
                        "name": "validRecipient",
                        "nameLocations": [
                          "696:14:1"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 156,
                        "src": "696:14:1"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "696:19:1"
                    }
                  ],
                  "name": "transferAndCall",
                  "nameLocation": "606:15:1",
                  "parameters": {
                    "id": 96,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 91,
                        "mutability": "mutable",
                        "name": "_to",
                        "nameLocation": "635:3:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 122,
                        "src": "627:11:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 90,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "627:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 93,
                        "mutability": "mutable",
                        "name": "_value",
                        "nameLocation": "652:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 122,
                        "src": "644:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 92,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "644:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 95,
                        "mutability": "mutable",
                        "name": "_data",
                        "nameLocation": "679:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 122,
                        "src": "664:20:1",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 94,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "664:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "621:67:1"
                  },
                  "returnParameters": {
                    "id": 102,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 101,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "730:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 122,
                        "src": "725:12:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 100,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "725:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "724:14:1"
                  },
                  "scope": 199,
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "id": 134,
                  "nodeType": "FunctionDefinition",
                  "src": "869:99:1",
                  "nodes": [],
                  "body": {
                    "id": 133,
                    "nodeType": "Block",
                    "src": "938:30:1",
                    "nodes": [],
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 129,
                            "name": "balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43,
                            "src": "951:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 131,
                          "indexExpression": {
                            "id": 130,
                            "name": "_a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 124,
                            "src": "960:2:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "951:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 128,
                        "id": 132,
                        "nodeType": "Return",
                        "src": "944:19:1"
                      }
                    ]
                  },
                  "functionSelector": "70a08231",
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nameLocation": "878:9:1",
                  "parameters": {
                    "id": 125,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 124,
                        "mutability": "mutable",
                        "name": "_a",
                        "nameLocation": "896:2:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 134,
                        "src": "888:10:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 123,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "888:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "887:12:1"
                  },
                  "returnParameters": {
                    "id": 128,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 127,
                        "mutability": "mutable",
                        "name": "balance",
                        "nameLocation": "929:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 134,
                        "src": "921:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 126,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "921:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "920:17:1"
                  },
                  "scope": 199,
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "id": 156,
                  "nodeType": "ModifierDefinition",
                  "src": "972:126:1",
                  "nodes": [],
                  "body": {
                    "id": 155,
                    "nodeType": "Block",
                    "src": "1016:82:1",
                    "nodes": [],
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 151,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 144,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 139,
                                  "name": "_recipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 136,
                                  "src": "1030:10:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "hexValue": "30",
                                      "id": 142,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1052:1:1",
                                      "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": 141,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1044:7:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 140,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1044:7:1",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 143,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1044:10:1",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "1030:24:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 150,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 145,
                                  "name": "_recipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 136,
                                  "src": "1058:10:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "id": 148,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "1080:4:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_MockLinkToken_$199",
                                        "typeString": "contract MockLinkToken"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_MockLinkToken_$199",
                                        "typeString": "contract MockLinkToken"
                                      }
                                    ],
                                    "id": 147,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1072:7:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 146,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1072:7:1",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 149,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1072:13:1",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "1058:27:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1030:55:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 138,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1022:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 152,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1022:64:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 153,
                        "nodeType": "ExpressionStatement",
                        "src": "1022:64:1"
                      },
                      {
                        "id": 154,
                        "nodeType": "PlaceholderStatement",
                        "src": "1092:1:1"
                      }
                    ]
                  },
                  "name": "validRecipient",
                  "nameLocation": "981:14:1",
                  "parameters": {
                    "id": 137,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 136,
                        "mutability": "mutable",
                        "name": "_recipient",
                        "nameLocation": "1004:10:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 156,
                        "src": "996:18:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 135,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "996:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "995:20:1"
                  },
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "id": 182,
                  "nodeType": "FunctionDefinition",
                  "src": "1102:198:1",
                  "nodes": [],
                  "body": {
                    "id": 181,
                    "nodeType": "Block",
                    "src": "1187:113:1",
                    "nodes": [],
                    "statements": [
                      {
                        "assignments": [
                          167
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 167,
                            "mutability": "mutable",
                            "name": "receiver",
                            "nameLocation": "1208:8:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 181,
                            "src": "1193:23:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC677Receiver_$209",
                              "typeString": "contract ERC677Receiver"
                            },
                            "typeName": {
                              "id": 166,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 165,
                                "name": "ERC677Receiver",
                                "nameLocations": [
                                  "1193:14:1"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 209,
                                "src": "1193:14:1"
                              },
                              "referencedDeclaration": 209,
                              "src": "1193:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC677Receiver_$209",
                                "typeString": "contract ERC677Receiver"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 171,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 169,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 158,
                              "src": "1234:3:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 168,
                            "name": "ERC677Receiver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 209,
                            "src": "1219:14:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ERC677Receiver_$209_$",
                              "typeString": "type(contract ERC677Receiver)"
                            }
                          },
                          "id": 170,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1219:19:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC677Receiver_$209",
                            "typeString": "contract ERC677Receiver"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1193:45:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 175,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1269:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 176,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "1273:6:1",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1269:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 177,
                              "name": "_value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 160,
                              "src": "1281:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 178,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 162,
                              "src": "1289:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "expression": {
                              "id": 172,
                              "name": "receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 167,
                              "src": "1244:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC677Receiver_$209",
                                "typeString": "contract ERC677Receiver"
                              }
                            },
                            "id": 174,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1253:15:1",
                            "memberName": "onTokenTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 208,
                            "src": "1244:24:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,uint256,bytes memory) external"
                            }
                          },
                          "id": 179,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1244:51:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 180,
                        "nodeType": "ExpressionStatement",
                        "src": "1244:51:1"
                      }
                    ]
                  },
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "contractFallback",
                  "nameLocation": "1111:16:1",
                  "parameters": {
                    "id": 163,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 158,
                        "mutability": "mutable",
                        "name": "_to",
                        "nameLocation": "1136:3:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 182,
                        "src": "1128:11:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 157,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1128:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 160,
                        "mutability": "mutable",
                        "name": "_value",
                        "nameLocation": "1149:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 182,
                        "src": "1141:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 159,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1141:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 162,
                        "mutability": "mutable",
                        "name": "_data",
                        "nameLocation": "1172:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 182,
                        "src": "1157:20:1",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 161,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1157:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1127:51:1"
                  },
                  "returnParameters": {
                    "id": 164,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1187:0:1"
                  },
                  "scope": 199,
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "id": 198,
                  "nodeType": "FunctionDefinition",
                  "src": "1304:170:1",
                  "nodes": [],
                  "body": {
                    "id": 197,
                    "nodeType": "Block",
                    "src": "1370:104:1",
                    "nodes": [],
                    "statements": [
                      {
                        "assignments": [
                          190
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 190,
                            "mutability": "mutable",
                            "name": "length",
                            "nameLocation": "1384:6:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 197,
                            "src": "1376:14:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 189,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1376:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 191,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1376:14:1"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "1405:42:1",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1413:28:1",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_addr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1435:5:1"
                                  }
                                ],
                                "functionName": {
                                  "name": "extcodesize",
                                  "nodeType": "YulIdentifier",
                                  "src": "1423:11:1"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1423:18:1"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "1413:6:1"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 184,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1435:5:1",
                            "valueSize": 1
                          },
                          {
                            "declaration": 190,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1413:6:1",
                            "valueSize": 1
                          }
                        ],
                        "id": 192,
                        "nodeType": "InlineAssembly",
                        "src": "1396:51:1"
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 195,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 193,
                            "name": "length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 190,
                            "src": "1459:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 194,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1468:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1459:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 188,
                        "id": 196,
                        "nodeType": "Return",
                        "src": "1452:17:1"
                      }
                    ]
                  },
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isContract",
                  "nameLocation": "1313:10:1",
                  "parameters": {
                    "id": 185,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 184,
                        "mutability": "mutable",
                        "name": "_addr",
                        "nameLocation": "1332:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 198,
                        "src": "1324:13:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 183,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1324:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1323:15:1"
                  },
                  "returnParameters": {
                    "id": 188,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 187,
                        "mutability": "mutable",
                        "name": "hasCode",
                        "nameLocation": "1361:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 198,
                        "src": "1356:12:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 186,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1356:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1355:14:1"
                  },
                  "scope": 199,
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "MockLinkToken",
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "linearizedBaseContracts": [
                199
              ],
              "name": "MockLinkToken",
              "nameLocation": "66:13:1",
              "scope": 210,
              "usedErrors": []
            },
            {
              "id": 209,
              "nodeType": "ContractDefinition",
              "src": "1478:120:1",
              "nodes": [
                {
                  "id": 208,
                  "nodeType": "FunctionDefinition",
                  "src": "1507:89:1",
                  "nodes": [],
                  "functionSelector": "a4c0ed36",
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "onTokenTransfer",
                  "nameLocation": "1516:15:1",
                  "parameters": {
                    "id": 206,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 201,
                        "mutability": "mutable",
                        "name": "_sender",
                        "nameLocation": "1540:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 208,
                        "src": "1532:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 200,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1532:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 203,
                        "mutability": "mutable",
                        "name": "_value",
                        "nameLocation": "1557:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 208,
                        "src": "1549:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 202,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1549:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 205,
                        "mutability": "mutable",
                        "name": "_data",
                        "nameLocation": "1580:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 208,
                        "src": "1565:20:1",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 204,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1565:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1531:55:1"
                  },
                  "returnParameters": {
                    "id": 207,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1595:0:1"
                  },
                  "scope": 209,
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "ERC677Receiver",
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "linearizedBaseContracts": [
                209
              ],
              "name": "ERC677Receiver",
              "nameLocation": "1488:14:1",
              "scope": 210,
              "usedErrors": []
            }
          ],
          "license": "MIT"
        }
      }
    },
    "contracts": {
      "src/v0.8/mcm/CallProxy/CallProxy.sol": {
        "CallProxy": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "target",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "target",
                  "type": "address"
                }
              ],
              "name": "TargetSet",
              "type": "event"
            },
            {
              "stateMutability": "payable",
              "type": "fallback"
            }
          ],
          "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"TargetSet\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"a contract which acts as a forwarder that forwards the input from any caller to a a target contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/v0.8/mcm/CallProxy/CallProxy.sol\":\"CallProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@eth-optimism/=node_modules/@eth-optimism/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=foundry-lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=foundry-lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=foundry-lib/forge-std/src/\",\":hardhat/=node_modules/hardhat/\",\":openzeppelin-contracts/=foundry-lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"src/v0.8/mcm/CallProxy/CallProxy.sol\":{\"keccak256\":\"0x32de27b8817e5b97460e6a08a24f034062cb6d6934475e8b1f577dcfb0326be9\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f7f646843ec89211cf8dfe8ba93f67f96ec55fa34c712b8641954d3e0f52d464\",\"dweb:/ipfs/Qme9XU21LpXsbqnwQUhzUMcrmyFCe6gE8AgLovDLVtKfsh\"]}},\"version\":1}",
          "userdoc": {},
          "devdoc": {},
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_22": {
                  "entryPoint": null,
                  "id": 22,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_t_address_fromMemory": {
                  "entryPoint": 241,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 262,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_t_address_to_t_address_fromStack": {
                  "entryPoint": 307,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 322,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "allocate_unbounded": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "cleanup_t_address": {
                  "entryPoint": 200,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "cleanup_t_uint160": {
                  "entryPoint": 168,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": {
                  "entryPoint": 163,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "validator_revert_t_address": {
                  "entryPoint": 218,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "object": "60a060405234801561001057600080fd5b506040516101ce3803806101ce83398181016040528101906100329190610106565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250507f3bfb4bbf112628248058745a3c57e35b13369386e474b8e56c552f3063a4a196816040516100959190610142565b60405180910390a15061015d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100d3826100a8565b9050919050565b6100e3816100c8565b81146100ee57600080fd5b50565b600081519050610100816100da565b92915050565b60006020828403121561011c5761011b6100a3565b5b600061012a848285016100f1565b91505092915050565b61013c816100c8565b82525050565b60006020820190506101576000830184610133565b92915050565b608051605961017560003960006008015260596000f3fe608060405260007f00000000000000000000000000000000000000000000000000000000000000009050366000803760008036600034855af13d6000803e80156047573d6000f35b3d6000fdfea164736f6c6343000813000a",
              "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1CE CODESIZE SUB DUP1 PUSH2 0x1CE DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH2 0x32 SWAP2 SWAP1 PUSH2 0x106 JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH32 0x3BFB4BBF112628248058745A3C57E35B13369386E474B8E56C552F3063A4A196 DUP2 PUSH1 0x40 MLOAD PUSH2 0x95 SWAP2 SWAP1 PUSH2 0x142 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH2 0x15D JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD3 DUP3 PUSH2 0xA8 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xE3 DUP2 PUSH2 0xC8 JUMP JUMPDEST DUP2 EQ PUSH2 0xEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x100 DUP2 PUSH2 0xDA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x11C JUMPI PUSH2 0x11B PUSH2 0xA3 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x12A DUP5 DUP3 DUP6 ADD PUSH2 0xF1 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x13C DUP2 PUSH2 0xC8 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x157 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x133 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x59 PUSH2 0x175 PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH1 0x8 ADD MSTORE PUSH1 0x59 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH32 0x0 SWAP1 POP CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 CALLVALUE DUP6 GAS CALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 ISZERO PUSH1 0x47 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP ADDMOD SGT STOP EXP ",
              "sourceMap": "180:783:0:-:0;;;276:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;325:6;314:17;;;;;;;;;;346;356:6;346:17;;;;;;:::i;:::-;;;;;;;;276:94;180:783;;88:117:2;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:351::-;915:6;964:2;952:9;943:7;939:23;935:32;932:119;;;970:79;;:::i;:::-;932:119;1090:1;1115:64;1171:7;1162:6;1151:9;1147:22;1115:64;:::i;:::-;1105:74;;1061:128;845:351;;;;:::o;1202:118::-;1289:24;1307:5;1289:24;:::i;:::-;1284:3;1277:37;1202:118;;:::o;1326:222::-;1419:4;1457:2;1446:9;1442:18;1434:26;;1470:71;1538:1;1527:9;1523:17;1514:6;1470:71;:::i;:::-;1326:222;;;;:::o;180:783:0:-;;;;;;;;;;;;;",
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1551:2",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "47:35:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "57:19:2",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "73:2:2",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "67:5:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "67:9:2"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "57:6:2"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "allocate_unbounded",
                        "nodeType": "YulFunctionDefinition",
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "40:6:2",
                            "type": ""
                          }
                        ],
                        "src": "7:75:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "177:28:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "194:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "197:1:2",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "187:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "187:12:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "187:12:2"
                            }
                          ]
                        },
                        "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
                        "nodeType": "YulFunctionDefinition",
                        "src": "88:117:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "300:28:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "317:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "320:1:2",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "310:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "310:12:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "310:12:2"
                            }
                          ]
                        },
                        "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
                        "nodeType": "YulFunctionDefinition",
                        "src": "211:117:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "379:81:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "389:65:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "404:5:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "411:42:2",
                                    "type": "",
                                    "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "400:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "400:54:2"
                              },
                              "variableNames": [
                                {
                                  "name": "cleaned",
                                  "nodeType": "YulIdentifier",
                                  "src": "389:7:2"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "cleanup_t_uint160",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "361:5:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "cleaned",
                            "nodeType": "YulTypedName",
                            "src": "371:7:2",
                            "type": ""
                          }
                        ],
                        "src": "334:126:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "511:51:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "521:35:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "550:5:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "cleanup_t_uint160",
                                  "nodeType": "YulIdentifier",
                                  "src": "532:17:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "532:24:2"
                              },
                              "variableNames": [
                                {
                                  "name": "cleaned",
                                  "nodeType": "YulIdentifier",
                                  "src": "521:7:2"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "cleanup_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "493:5:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "cleaned",
                            "nodeType": "YulTypedName",
                            "src": "503:7:2",
                            "type": ""
                          }
                        ],
                        "src": "466:96:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "611:79:2",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "668:16:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "677:1:2",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "680:1:2",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "670:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "670:12:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "670:12:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "634:5:2"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "659:5:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "cleanup_t_address",
                                          "nodeType": "YulIdentifier",
                                          "src": "641:17:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "641:24:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "631:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "631:35:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "624:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "624:43:2"
                              },
                              "nodeType": "YulIf",
                              "src": "621:63:2"
                            }
                          ]
                        },
                        "name": "validator_revert_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "604:5:2",
                            "type": ""
                          }
                        ],
                        "src": "568:122:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "759:80:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "769:22:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "784:6:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "778:5:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "778:13:2"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "769:5:2"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "827:5:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "800:26:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "800:33:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "800:33:2"
                            }
                          ]
                        },
                        "name": "abi_decode_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "737:6:2",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "745:3:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "753:5:2",
                            "type": ""
                          }
                        ],
                        "src": "696:143:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "922:274:2",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "968:83:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
                                        "nodeType": "YulIdentifier",
                                        "src": "970:77:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "970:79:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "970:79:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "943:7:2"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "952:9:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "939:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "939:23:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "964:2:2",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "935:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "935:32:2"
                              },
                              "nodeType": "YulIf",
                              "src": "932:119:2"
                            },
                            {
                              "nodeType": "YulBlock",
                              "src": "1061:128:2",
                              "statements": [
                                {
                                  "nodeType": "YulVariableDeclaration",
                                  "src": "1076:15:2",
                                  "value": {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1090:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  "variables": [
                                    {
                                      "name": "offset",
                                      "nodeType": "YulTypedName",
                                      "src": "1080:6:2",
                                      "type": ""
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "1105:74:2",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "1151:9:2"
                                          },
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "1162:6:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1147:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1147:22:2"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1171:7:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_address_fromMemory",
                                      "nodeType": "YulIdentifier",
                                      "src": "1115:31:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1115:64:2"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "value0",
                                      "nodeType": "YulIdentifier",
                                      "src": "1105:6:2"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "892:9:2",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "903:7:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "915:6:2",
                            "type": ""
                          }
                        ],
                        "src": "845:351:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1267:53:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "1284:3:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1307:5:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "cleanup_t_address",
                                      "nodeType": "YulIdentifier",
                                      "src": "1289:17:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1289:24:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1277:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1277:37:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1277:37:2"
                            }
                          ]
                        },
                        "name": "abi_encode_t_address_to_t_address_fromStack",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "1255:5:2",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "1262:3:2",
                            "type": ""
                          }
                        ],
                        "src": "1202:118:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1424:124:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1434:26:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1446:9:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1457:2:2",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1442:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1442:18:2"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1434:4:2"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1514:6:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1527:9:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1538:1:2",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1523:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1523:17:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_address_to_t_address_fromStack",
                                  "nodeType": "YulIdentifier",
                                  "src": "1470:43:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1470:71:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1470:71:2"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1396:9:2",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1408:6:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1419:4:2",
                            "type": ""
                          }
                        ],
                        "src": "1326:222:2"
                      }
                    ]
                  },
                  "contents": "{\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address_fromMemory(offset, end) -> value {\n        value := mload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n    }\n\n}\n",
                  "id": 2,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {}
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_31": {
                  "entryPoint": null,
                  "id": 31,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "object": "608060405260007f00000000000000000000000000000000000000000000000000000000000000009050366000803760008036600034855af13d6000803e80156047573d6000f35b3d6000fdfea164736f6c6343000813000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH32 0x0 SWAP1 POP CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 CALLVALUE DUP6 GAS CALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 ISZERO PUSH1 0x47 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT INVALID LOG1 PUSH5 0x736F6C6343 STOP ADDMOD SGT STOP EXP ",
              "sourceMap": "180:783:0:-:0;;;414:14;431:8;414:25;;699:14;696:1;693;680:34;797:1;794;778:14;775:1;762:11;754:6;747:5;742:57;833:16;830:1;827;812:38;866:7;863:42;;;886:16;883:1;876:27;863:42;928:16;925:1;918:27",
              "linkReferences": {},
              "immutableReferences": {
                "8": [
                  {
                    "start": 8,
                    "length": 32
                  }
                ]
              }
            }
          }
        }
      },
      "test/v0.8/foundry/dev/special/MockLinkToken.sol": {
        "ERC677Receiver": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_value",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "_data",
                  "type": "bytes"
                }
              ],
              "name": "onTokenTransfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/v0.8/foundry/dev/special/MockLinkToken.sol\":\"ERC677Receiver\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@eth-optimism/=node_modules/@eth-optimism/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=foundry-lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=foundry-lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=foundry-lib/forge-std/src/\",\":hardhat/=node_modules/hardhat/\",\":openzeppelin-contracts/=foundry-lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"test/v0.8/foundry/dev/special/MockLinkToken.sol\":{\"keccak256\":\"0x9f3c8789b493e2135fd2128c3c5da0145cbea8a7ab1044d8f905d87441fd69b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c0c9d11082529d7bac037fc29832e8dc7fa98ab81b33c54570f23ac8f614407\",\"dweb:/ipfs/QmdpuL3ZsdWeqk8vEmtNm14TCa7Ase5U1rxRtvPS5k8FJ9\"]}},\"version\":1}",
          "userdoc": {},
          "devdoc": {},
          "evm": {
            "bytecode": {
              "object": "",
              "opcodes": "",
              "sourceMap": "",
              "linkReferences": {}
            },
            "deployedBytecode": {
              "object": "",
              "opcodes": "",
              "sourceMap": "",
              "linkReferences": {}
            },
            "methodIdentifiers": {
              "onTokenTransfer(address,uint256,bytes)": "a4c0ed36"
            }
          }
        },
        "MockLinkToken": {
          "abi": [
            {
              "inputs": [],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_a",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "balances",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_value",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_value",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "_data",
                  "type": "bytes"
                }
              ],
              "name": "transferAndCall",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "success",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_a\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"transferAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"transfer(address,uint256)\":{\"details\":\"transfer token for a specified address\",\"params\":{\"_to\":\"The address to transfer to.\",\"_value\":\"The amount to be transferred.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/v0.8/foundry/dev/special/MockLinkToken.sol\":\"MockLinkToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@eth-optimism/=node_modules/@eth-optimism/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=foundry-lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=foundry-lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=foundry-lib/forge-std/src/\",\":hardhat/=node_modules/hardhat/\",\":openzeppelin-contracts/=foundry-lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"test/v0.8/foundry/dev/special/MockLinkToken.sol\":{\"keccak256\":\"0x9f3c8789b493e2135fd2128c3c5da0145cbea8a7ab1044d8f905d87441fd69b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c0c9d11082529d7bac037fc29832e8dc7fa98ab81b33c54570f23ac8f614407\",\"dweb:/ipfs/QmdpuL3ZsdWeqk8vEmtNm14TCa7Ase5U1rxRtvPS5k8FJ9\"]}},\"version\":1}",
          "userdoc": {},
          "devdoc": {},
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_54": {
                  "entryPoint": null,
                  "id": 54,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "object": "608060405234801561001057600080fd5b506b033b2e3c9fd0803ce80000006000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061079b8061006f6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806318160ddd1461005c57806327e235e31461007a5780634000aea0146100aa57806370a08231146100da578063a9059cbb1461010a575b600080fd5b61006461013a565b604051610071919061041f565b60405180910390f35b610094600480360381019061008f91906104a2565b61014a565b6040516100a1919061041f565b60405180910390f35b6100c460048036038101906100bf9190610560565b610162565b6040516100d191906105ef565b60405180910390f35b6100f460048036038101906100ef91906104a2565b61020a565b604051610101919061041f565b60405180910390f35b610124600480360381019061011f919061060a565b610252565b60405161013191906105ef565b60405180910390f35b6b033b2e3c9fd0803ce800000081565b60006020528060005260406000206000915090505481565b600084600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156101ce57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6101d757600080fd5b6101e18686610252565b506101eb86610376565b156101fd576101fc86868686610389565b5b6001915050949350505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461029e9190610679565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461032a91906106ad565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001905092915050565b600080823b905060008111915050919050565b60008490508073ffffffffffffffffffffffffffffffffffffffff1663a4c0ed36338686866040518563ffffffff1660e01b81526004016103cd949392919061074e565b600060405180830381600087803b1580156103e757600080fd5b505af11580156103fb573d6000803e3d6000fd5b505050505050505050565b6000819050919050565b61041981610406565b82525050565b60006020820190506104346000830184610410565b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061046f82610444565b9050919050565b61047f81610464565b811461048a57600080fd5b50565b60008135905061049c81610476565b92915050565b6000602082840312156104b8576104b761043a565b5b60006104c68482850161048d565b91505092915050565b6104d881610406565b81146104e357600080fd5b50565b6000813590506104f5816104cf565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126105205761051f6104fb565b5b8235905067ffffffffffffffff81111561053d5761053c610500565b5b60208301915083600182028301111561055957610558610505565b5b9250929050565b6000806000806060858703121561057a5761057961043a565b5b60006105888782880161048d565b9450506020610599878288016104e6565b935050604085013567ffffffffffffffff8111156105ba576105b961043f565b5b6105c68782880161050a565b925092505092959194509250565b60008115159050919050565b6105e9816105d4565b82525050565b600060208201905061060460008301846105e0565b92915050565b600080604083850312156106215761062061043a565b5b600061062f8582860161048d565b9250506020610640858286016104e6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061068482610406565b915061068f83610406565b92508282039050818111156106a7576106a661064a565b5b92915050565b60006106b882610406565b91506106c383610406565b92508282019050808211156106db576106da61064a565b5b92915050565b6106ea81610464565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b600061072d83856106f0565b935061073a838584610701565b61074383610710565b840190509392505050565b600060608201905061076360008301876106e1565b6107706020830186610410565b8181036040830152610783818486610721565b90509594505050505056fea164736f6c6343000813000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x0 DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0x79B DUP1 PUSH2 0x6F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x18160DDD EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x27E235E3 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0x4000AEA0 EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x10A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x13A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x41F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x94 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x8F SWAP2 SWAP1 PUSH2 0x4A2 JUMP JUMPDEST PUSH2 0x14A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA1 SWAP2 SWAP1 PUSH2 0x41F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xBF SWAP2 SWAP1 PUSH2 0x560 JUMP JUMPDEST PUSH2 0x162 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD1 SWAP2 SWAP1 PUSH2 0x5EF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xEF SWAP2 SWAP1 PUSH2 0x4A2 JUMP JUMPDEST PUSH2 0x20A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x101 SWAP2 SWAP1 PUSH2 0x41F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x124 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x11F SWAP2 SWAP1 PUSH2 0x60A JUMP JUMPDEST PUSH2 0x252 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x131 SWAP2 SWAP1 PUSH2 0x5EF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH12 0x33B2E3C9FD0803CE8000000 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x1CE JUMPI POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x1D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E1 DUP7 DUP7 PUSH2 0x252 JUMP JUMPDEST POP PUSH2 0x1EB DUP7 PUSH2 0x376 JUMP JUMPDEST ISZERO PUSH2 0x1FD JUMPI PUSH2 0x1FC DUP7 DUP7 DUP7 DUP7 PUSH2 0x389 JUMP JUMPDEST JUMPDEST PUSH1 0x1 SWAP2 POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x29E SWAP2 SWAP1 PUSH2 0x679 JUMP JUMPDEST PUSH1 0x0 DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x32A SWAP2 SWAP1 PUSH2 0x6AD JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP5 SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA4C0ED36 CALLER DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3CD SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x74E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3FB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x419 DUP2 PUSH2 0x406 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x434 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x410 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46F DUP3 PUSH2 0x444 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x47F DUP2 PUSH2 0x464 JUMP JUMPDEST DUP2 EQ PUSH2 0x48A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x49C DUP2 PUSH2 0x476 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4B8 JUMPI PUSH2 0x4B7 PUSH2 0x43A JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x4C6 DUP5 DUP3 DUP6 ADD PUSH2 0x48D JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x4D8 DUP2 PUSH2 0x406 JUMP JUMPDEST DUP2 EQ PUSH2 0x4E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x4F5 DUP2 PUSH2 0x4CF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x520 JUMPI PUSH2 0x51F PUSH2 0x4FB JUMP JUMPDEST JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x53D JUMPI PUSH2 0x53C PUSH2 0x500 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x559 JUMPI PUSH2 0x558 PUSH2 0x505 JUMP JUMPDEST JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x57A JUMPI PUSH2 0x579 PUSH2 0x43A JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x588 DUP8 DUP3 DUP9 ADD PUSH2 0x48D JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x599 DUP8 DUP3 DUP9 ADD PUSH2 0x4E6 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5BA JUMPI PUSH2 0x5B9 PUSH2 0x43F JUMP JUMPDEST JUMPDEST PUSH2 0x5C6 DUP8 DUP3 DUP9 ADD PUSH2 0x50A JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x5E9 DUP2 PUSH2 0x5D4 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x604 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x5E0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x621 JUMPI PUSH2 0x620 PUSH2 0x43A JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x62F DUP6 DUP3 DUP7 ADD PUSH2 0x48D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x640 DUP6 DUP3 DUP7 ADD PUSH2 0x4E6 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x684 DUP3 PUSH2 0x406 JUMP JUMPDEST SWAP2 POP PUSH2 0x68F DUP4 PUSH2 0x406 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 SUB SWAP1 POP DUP2 DUP2 GT ISZERO PUSH2 0x6A7 JUMPI PUSH2 0x6A6 PUSH2 0x64A JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6B8 DUP3 PUSH2 0x406 JUMP JUMPDEST SWAP2 POP PUSH2 0x6C3 DUP4 PUSH2 0x406 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 ADD SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x6DB JUMPI PUSH2 0x6DA PUSH2 0x64A JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x6EA DUP2 PUSH2 0x464 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x72D DUP4 DUP6 PUSH2 0x6F0 JUMP JUMPDEST SWAP4 POP PUSH2 0x73A DUP4 DUP6 DUP5 PUSH2 0x701 JUMP JUMPDEST PUSH2 0x743 DUP4 PUSH2 0x710 JUMP JUMPDEST DUP5 ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x763 PUSH1 0x0 DUP4 ADD DUP8 PUSH2 0x6E1 JUMP JUMPDEST PUSH2 0x770 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x410 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x783 DUP2 DUP5 DUP7 PUSH2 0x721 JUMP JUMPDEST SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP ADDMOD SGT STOP EXP ",
              "sourceMap": "57:1419:1:-:0;;;183:59;;;;;;;;;;122:8;203;:20;212:10;203:20;;;;;;;;;;;;;;;:34;;;;57:1419;;;;;;",
              "linkReferences": {}
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@balanceOf_134": {
                  "entryPoint": 522,
                  "id": 134,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@balances_43": {
                  "entryPoint": 330,
                  "id": 43,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@contractFallback_182": {
                  "entryPoint": 905,
                  "id": 182,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@isContract_198": {
                  "entryPoint": 886,
                  "id": 198,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@totalSupply_39": {
                  "entryPoint": 314,
                  "id": 39,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@transferAndCall_122": {
                  "entryPoint": 354,
                  "id": 122,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "@transfer_89": {
                  "entryPoint": 594,
                  "id": 89,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_t_address": {
                  "entryPoint": 1165,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_t_bytes_calldata_ptr": {
                  "entryPoint": 1290,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_t_uint256": {
                  "entryPoint": 1254,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 1186,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_uint256": {
                  "entryPoint": 1546,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_uint256t_bytes_calldata_ptr": {
                  "entryPoint": 1376,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_encode_t_address_to_t_address_fromStack": {
                  "entryPoint": 1761,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "abi_encode_t_bool_to_t_bool_fromStack": {
                  "entryPoint": 1504,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "abi_encode_t_bytes_calldata_ptr_to_t_bytes_memory_ptr_fromStack": {
                  "entryPoint": 1825,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_t_uint256_to_t_uint256_fromStack": {
                  "entryPoint": 1040,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "abi_encode_tuple_t_address_t_uint256_t_bytes_calldata_ptr__to_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed": {
                  "entryPoint": 1870,
                  "id": null,
                  "parameterSlots": 5,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": 1519,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": 1055,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "allocate_unbounded": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack": {
                  "entryPoint": 1776,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 1709,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint256": {
                  "entryPoint": 1657,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "cleanup_t_address": {
                  "entryPoint": 1124,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "cleanup_t_bool": {
                  "entryPoint": 1492,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "cleanup_t_uint160": {
                  "entryPoint": 1092,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "cleanup_t_uint256": {
                  "entryPoint": 1030,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "copy_calldata_to_memory_with_cleanup": {
                  "entryPoint": 1793,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "panic_error_0x11": {
                  "entryPoint": 1610,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490": {
                  "entryPoint": 1280,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d": {
                  "entryPoint": 1275,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef": {
                  "entryPoint": 1285,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": {
                  "entryPoint": 1087,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": {
                  "entryPoint": 1082,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "round_up_to_mul_of_32": {
                  "entryPoint": 1808,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "validator_revert_t_address": {
                  "entryPoint": 1142,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "validator_revert_t_uint256": {
                  "entryPoint": 1231,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "object": "608060405234801561001057600080fd5b50600436106100575760003560e01c806318160ddd1461005c57806327e235e31461007a5780634000aea0146100aa57806370a08231146100da578063a9059cbb1461010a575b600080fd5b61006461013a565b604051610071919061041f565b60405180910390f35b610094600480360381019061008f91906104a2565b61014a565b6040516100a1919061041f565b60405180910390f35b6100c460048036038101906100bf9190610560565b610162565b6040516100d191906105ef565b60405180910390f35b6100f460048036038101906100ef91906104a2565b61020a565b604051610101919061041f565b60405180910390f35b610124600480360381019061011f919061060a565b610252565b60405161013191906105ef565b60405180910390f35b6b033b2e3c9fd0803ce800000081565b60006020528060005260406000206000915090505481565b600084600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156101ce57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6101d757600080fd5b6101e18686610252565b506101eb86610376565b156101fd576101fc86868686610389565b5b6001915050949350505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461029e9190610679565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461032a91906106ad565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001905092915050565b600080823b905060008111915050919050565b60008490508073ffffffffffffffffffffffffffffffffffffffff1663a4c0ed36338686866040518563ffffffff1660e01b81526004016103cd949392919061074e565b600060405180830381600087803b1580156103e757600080fd5b505af11580156103fb573d6000803e3d6000fd5b505050505050505050565b6000819050919050565b61041981610406565b82525050565b60006020820190506104346000830184610410565b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061046f82610444565b9050919050565b61047f81610464565b811461048a57600080fd5b50565b60008135905061049c81610476565b92915050565b6000602082840312156104b8576104b761043a565b5b60006104c68482850161048d565b91505092915050565b6104d881610406565b81146104e357600080fd5b50565b6000813590506104f5816104cf565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126105205761051f6104fb565b5b8235905067ffffffffffffffff81111561053d5761053c610500565b5b60208301915083600182028301111561055957610558610505565b5b9250929050565b6000806000806060858703121561057a5761057961043a565b5b60006105888782880161048d565b9450506020610599878288016104e6565b935050604085013567ffffffffffffffff8111156105ba576105b961043f565b5b6105c68782880161050a565b925092505092959194509250565b60008115159050919050565b6105e9816105d4565b82525050565b600060208201905061060460008301846105e0565b92915050565b600080604083850312156106215761062061043a565b5b600061062f8582860161048d565b9250506020610640858286016104e6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061068482610406565b915061068f83610406565b92508282039050818111156106a7576106a661064a565b5b92915050565b60006106b882610406565b91506106c383610406565b92508282019050808211156106db576106da61064a565b5b92915050565b6106ea81610464565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b600061072d83856106f0565b935061073a838584610701565b61074383610710565b840190509392505050565b600060608201905061076360008301876106e1565b6107706020830186610410565b8181036040830152610783818486610721565b90509594505050505056fea164736f6c6343000813000a",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x18160DDD EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x27E235E3 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0x4000AEA0 EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x10A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x13A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x41F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x94 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x8F SWAP2 SWAP1 PUSH2 0x4A2 JUMP JUMPDEST PUSH2 0x14A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA1 SWAP2 SWAP1 PUSH2 0x41F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xBF SWAP2 SWAP1 PUSH2 0x560 JUMP JUMPDEST PUSH2 0x162 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD1 SWAP2 SWAP1 PUSH2 0x5EF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xEF SWAP2 SWAP1 PUSH2 0x4A2 JUMP JUMPDEST PUSH2 0x20A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x101 SWAP2 SWAP1 PUSH2 0x41F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x124 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x11F SWAP2 SWAP1 PUSH2 0x60A JUMP JUMPDEST PUSH2 0x252 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x131 SWAP2 SWAP1 PUSH2 0x5EF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH12 0x33B2E3C9FD0803CE8000000 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x1CE JUMPI POP ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO JUMPDEST PUSH2 0x1D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E1 DUP7 DUP7 PUSH2 0x252 JUMP JUMPDEST POP PUSH2 0x1EB DUP7 PUSH2 0x376 JUMP JUMPDEST ISZERO PUSH2 0x1FD JUMPI PUSH2 0x1FC DUP7 DUP7 DUP7 DUP7 PUSH2 0x389 JUMP JUMPDEST JUMPDEST PUSH1 0x1 SWAP2 POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x29E SWAP2 SWAP1 PUSH2 0x679 JUMP JUMPDEST PUSH1 0x0 DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x32A SWAP2 SWAP1 PUSH2 0x6AD JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP5 SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA4C0ED36 CALLER DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3CD SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x74E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3FB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x419 DUP2 PUSH2 0x406 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x434 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x410 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46F DUP3 PUSH2 0x444 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x47F DUP2 PUSH2 0x464 JUMP JUMPDEST DUP2 EQ PUSH2 0x48A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x49C DUP2 PUSH2 0x476 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4B8 JUMPI PUSH2 0x4B7 PUSH2 0x43A JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x4C6 DUP5 DUP3 DUP6 ADD PUSH2 0x48D JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x4D8 DUP2 PUSH2 0x406 JUMP JUMPDEST DUP2 EQ PUSH2 0x4E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x4F5 DUP2 PUSH2 0x4CF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x520 JUMPI PUSH2 0x51F PUSH2 0x4FB JUMP JUMPDEST JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x53D JUMPI PUSH2 0x53C PUSH2 0x500 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x559 JUMPI PUSH2 0x558 PUSH2 0x505 JUMP JUMPDEST JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x57A JUMPI PUSH2 0x579 PUSH2 0x43A JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x588 DUP8 DUP3 DUP9 ADD PUSH2 0x48D JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x599 DUP8 DUP3 DUP9 ADD PUSH2 0x4E6 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5BA JUMPI PUSH2 0x5B9 PUSH2 0x43F JUMP JUMPDEST JUMPDEST PUSH2 0x5C6 DUP8 DUP3 DUP9 ADD PUSH2 0x50A JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x5E9 DUP2 PUSH2 0x5D4 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x604 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x5E0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x621 JUMPI PUSH2 0x620 PUSH2 0x43A JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x62F DUP6 DUP3 DUP7 ADD PUSH2 0x48D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x640 DUP6 DUP3 DUP7 ADD PUSH2 0x4E6 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x684 DUP3 PUSH2 0x406 JUMP JUMPDEST SWAP2 POP PUSH2 0x68F DUP4 PUSH2 0x406 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 SUB SWAP1 POP DUP2 DUP2 GT ISZERO PUSH2 0x6A7 JUMPI PUSH2 0x6A6 PUSH2 0x64A JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6B8 DUP3 PUSH2 0x406 JUMP JUMPDEST SWAP2 POP PUSH2 0x6C3 DUP4 PUSH2 0x406 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 ADD SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x6DB JUMPI PUSH2 0x6DA PUSH2 0x64A JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x6EA DUP2 PUSH2 0x464 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x72D DUP4 DUP6 PUSH2 0x6F0 JUMP JUMPDEST SWAP4 POP PUSH2 0x73A DUP4 DUP6 DUP5 PUSH2 0x701 JUMP JUMPDEST PUSH2 0x743 DUP4 PUSH2 0x710 JUMP JUMPDEST DUP5 ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x763 PUSH1 0x0 DUP4 ADD DUP8 PUSH2 0x6E1 JUMP JUMPDEST PUSH2 0x770 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x410 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x783 DUP2 DUP5 DUP7 PUSH2 0x721 JUMP JUMPDEST SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID LOG1 PUSH5 0x736F6C6343 STOP ADDMOD SGT STOP EXP ",
              "sourceMap": "57:1419:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;84:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;135:43;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;597:268;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;869:99;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;400:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;84:46;122:8;84:46;:::o;135:43::-;;;;;;;;;;;;;;;;;:::o;597:268::-;725:12;711:3;1052:1;1030:24;;:10;:24;;;;:55;;;;;1080:4;1058:27;;:10;:27;;;;1030:55;1022:64;;;;;;745:21:::1;754:3;759:6;745:8;:21::i;:::-;;776:15;787:3;776:10;:15::i;:::-;772:72;;;801:36;818:3;823:6;831:5;;801:16;:36::i;:::-;772:72;856:4;849:11;;597:268:::0;;;;;;;:::o;869:99::-;921:15;951:8;:12;960:2;951:12;;;;;;;;;;;;;;;;944:19;;869:99;;;:::o;400:193::-;463:4;521:6;498:8;:20;507:10;498:20;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;475:8;:20;484:10;475:20;;;;;;;;;;;;;;;:52;;;;565:6;549:8;:13;558:3;549:13;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;533:8;:13;542:3;533:13;;;;;;;;;;;;;;;:38;;;;584:4;577:11;;400:193;;;;:::o;1304:170::-;1356:12;1376:14;1435:5;1423:18;1413:28;;1468:1;1459:6;:10;1452:17;;;1304:170;;;:::o;1102:198::-;1193:23;1234:3;1193:45;;1244:8;:24;;;1269:10;1281:6;1289:5;;1244:51;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1187:113;1102:198;;;;:::o;7:77:2:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:126;806:7;846:42;839:5;835:54;824:65;;769:126;;;:::o;901:96::-;938:7;967:24;985:5;967:24;:::i;:::-;956:35;;901:96;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:122::-;1684:24;1702:5;1684:24;:::i;:::-;1677:5;1674:35;1664:63;;1723:1;1720;1713:12;1664:63;1611:122;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:117::-;1993:1;1990;1983:12;2007:117;2116:1;2113;2106:12;2130:117;2239:1;2236;2229:12;2266:552;2323:8;2333:6;2383:3;2376:4;2368:6;2364:17;2360:27;2350:122;;2391:79;;:::i;:::-;2350:122;2504:6;2491:20;2481:30;;2534:18;2526:6;2523:30;2520:117;;;2556:79;;:::i;:::-;2520:117;2670:4;2662:6;2658:17;2646:29;;2724:3;2716:4;2708:6;2704:17;2694:8;2690:32;2687:41;2684:128;;;2731:79;;:::i;:::-;2684:128;2266:552;;;;;:::o;2824:817::-;2912:6;2920;2928;2936;2985:2;2973:9;2964:7;2960:23;2956:32;2953:119;;;2991:79;;:::i;:::-;2953:119;3111:1;3136:53;3181:7;3172:6;3161:9;3157:22;3136:53;:::i;:::-;3126:63;;3082:117;3238:2;3264:53;3309:7;3300:6;3289:9;3285:22;3264:53;:::i;:::-;3254:63;;3209:118;3394:2;3383:9;3379:18;3366:32;3425:18;3417:6;3414:30;3411:117;;;3447:79;;:::i;:::-;3411:117;3560:64;3616:7;3607:6;3596:9;3592:22;3560:64;:::i;:::-;3542:82;;;;3337:297;2824:817;;;;;;;:::o;3647:90::-;3681:7;3724:5;3717:13;3710:21;3699:32;;3647:90;;;:::o;3743:109::-;3824:21;3839:5;3824:21;:::i;:::-;3819:3;3812:34;3743:109;;:::o;3858:210::-;3945:4;3983:2;3972:9;3968:18;3960:26;;3996:65;4058:1;4047:9;4043:17;4034:6;3996:65;:::i;:::-;3858:210;;;;:::o;4074:474::-;4142:6;4150;4199:2;4187:9;4178:7;4174:23;4170:32;4167:119;;;4205:79;;:::i;:::-;4167:119;4325:1;4350:53;4395:7;4386:6;4375:9;4371:22;4350:53;:::i;:::-;4340:63;;4296:117;4452:2;4478:53;4523:7;4514:6;4503:9;4499:22;4478:53;:::i;:::-;4468:63;;4423:118;4074:474;;;;;:::o;4554:180::-;4602:77;4599:1;4592:88;4699:4;4696:1;4689:15;4723:4;4720:1;4713:15;4740:194;4780:4;4800:20;4818:1;4800:20;:::i;:::-;4795:25;;4834:20;4852:1;4834:20;:::i;:::-;4829:25;;4878:1;4875;4871:9;4863:17;;4902:1;4896:4;4893:11;4890:37;;;4907:18;;:::i;:::-;4890:37;4740:194;;;;:::o;4940:191::-;4980:3;4999:20;5017:1;4999:20;:::i;:::-;4994:25;;5033:20;5051:1;5033:20;:::i;:::-;5028:25;;5076:1;5073;5069:9;5062:16;;5097:3;5094:1;5091:10;5088:36;;;5104:18;;:::i;:::-;5088:36;4940:191;;;;:::o;5137:118::-;5224:24;5242:5;5224:24;:::i;:::-;5219:3;5212:37;5137:118;;:::o;5261:168::-;5344:11;5378:6;5373:3;5366:19;5418:4;5413:3;5409:14;5394:29;;5261:168;;;;:::o;5435:146::-;5532:6;5527:3;5522;5509:30;5573:1;5564:6;5559:3;5555:16;5548:27;5435:146;;;:::o;5587:102::-;5628:6;5679:2;5675:7;5670:2;5663:5;5659:14;5655:28;5645:38;;5587:102;;;:::o;5717:314::-;5813:3;5834:70;5897:6;5892:3;5834:70;:::i;:::-;5827:77;;5914:56;5963:6;5958:3;5951:5;5914:56;:::i;:::-;5995:29;6017:6;5995:29;:::i;:::-;5990:3;5986:39;5979:46;;5717:314;;;;;:::o;6037:549::-;6214:4;6252:2;6241:9;6237:18;6229:26;;6265:71;6333:1;6322:9;6318:17;6309:6;6265:71;:::i;:::-;6346:72;6414:2;6403:9;6399:18;6390:6;6346:72;:::i;:::-;6465:9;6459:4;6455:20;6450:2;6439:9;6435:18;6428:48;6493:86;6574:4;6565:6;6557;6493:86;:::i;:::-;6485:94;;6037:549;;;;;;;:::o",
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:6589:2",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "52:32:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "62:16:2",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "73:5:2"
                              },
                              "variableNames": [
                                {
                                  "name": "cleaned",
                                  "nodeType": "YulIdentifier",
                                  "src": "62:7:2"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "cleanup_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "34:5:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "cleaned",
                            "nodeType": "YulTypedName",
                            "src": "44:7:2",
                            "type": ""
                          }
                        ],
                        "src": "7:77:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "155:53:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "172:3:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "195:5:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "cleanup_t_uint256",
                                      "nodeType": "YulIdentifier",
                                      "src": "177:17:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "177:24:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "165:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "165:37:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "165:37:2"
                            }
                          ]
                        },
                        "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "143:5:2",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "150:3:2",
                            "type": ""
                          }
                        ],
                        "src": "90:118:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "312:124:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "322:26:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "334:9:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "345:2:2",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "330:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "330:18:2"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "322:4:2"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "402:6:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "415:9:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "426:1:2",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "411:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "411:17:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                                  "nodeType": "YulIdentifier",
                                  "src": "358:43:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "358:71:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "358:71:2"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "284:9:2",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "296:6:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "307:4:2",
                            "type": ""
                          }
                        ],
                        "src": "214:222:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "482:35:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "492:19:2",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "508:2:2",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "502:5:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "502:9:2"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "492:6:2"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "allocate_unbounded",
                        "nodeType": "YulFunctionDefinition",
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "475:6:2",
                            "type": ""
                          }
                        ],
                        "src": "442:75:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "612:28:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "629:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "632:1:2",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "622:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "622:12:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "622:12:2"
                            }
                          ]
                        },
                        "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
                        "nodeType": "YulFunctionDefinition",
                        "src": "523:117:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "735:28:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "752:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "755:1:2",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "745:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "745:12:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "745:12:2"
                            }
                          ]
                        },
                        "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
                        "nodeType": "YulFunctionDefinition",
                        "src": "646:117:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "814:81:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "824:65:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "839:5:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "846:42:2",
                                    "type": "",
                                    "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "835:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "835:54:2"
                              },
                              "variableNames": [
                                {
                                  "name": "cleaned",
                                  "nodeType": "YulIdentifier",
                                  "src": "824:7:2"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "cleanup_t_uint160",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "796:5:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "cleaned",
                            "nodeType": "YulTypedName",
                            "src": "806:7:2",
                            "type": ""
                          }
                        ],
                        "src": "769:126:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "946:51:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "956:35:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "985:5:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "cleanup_t_uint160",
                                  "nodeType": "YulIdentifier",
                                  "src": "967:17:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "967:24:2"
                              },
                              "variableNames": [
                                {
                                  "name": "cleaned",
                                  "nodeType": "YulIdentifier",
                                  "src": "956:7:2"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "cleanup_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "928:5:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "cleaned",
                            "nodeType": "YulTypedName",
                            "src": "938:7:2",
                            "type": ""
                          }
                        ],
                        "src": "901:96:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1046:79:2",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1103:16:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1112:1:2",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1115:1:2",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1105:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1105:12:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1105:12:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1069:5:2"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "1094:5:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "cleanup_t_address",
                                          "nodeType": "YulIdentifier",
                                          "src": "1076:17:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1076:24:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "1066:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1066:35:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1059:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1059:43:2"
                              },
                              "nodeType": "YulIf",
                              "src": "1056:63:2"
                            }
                          ]
                        },
                        "name": "validator_revert_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "1039:5:2",
                            "type": ""
                          }
                        ],
                        "src": "1003:122:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1183:87:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1193:29:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1215:6:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1202:12:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1202:20:2"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "1193:5:2"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1258:5:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1231:26:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1231:33:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1231:33:2"
                            }
                          ]
                        },
                        "name": "abi_decode_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "1161:6:2",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "1169:3:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "1177:5:2",
                            "type": ""
                          }
                        ],
                        "src": "1131:139:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1342:263:2",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1388:83:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
                                        "nodeType": "YulIdentifier",
                                        "src": "1390:77:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1390:79:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1390:79:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1363:7:2"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1372:9:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1359:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1359:23:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1384:2:2",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1355:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1355:32:2"
                              },
                              "nodeType": "YulIf",
                              "src": "1352:119:2"
                            },
                            {
                              "nodeType": "YulBlock",
                              "src": "1481:117:2",
                              "statements": [
                                {
                                  "nodeType": "YulVariableDeclaration",
                                  "src": "1496:15:2",
                                  "value": {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1510:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  "variables": [
                                    {
                                      "name": "offset",
                                      "nodeType": "YulTypedName",
                                      "src": "1500:6:2",
                                      "type": ""
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "1525:63:2",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "1560:9:2"
                                          },
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "1571:6:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1556:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1556:22:2"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1580:7:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_address",
                                      "nodeType": "YulIdentifier",
                                      "src": "1535:20:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1535:53:2"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "value0",
                                      "nodeType": "YulIdentifier",
                                      "src": "1525:6:2"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1312:9:2",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1323:7:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1335:6:2",
                            "type": ""
                          }
                        ],
                        "src": "1276:329:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1654:79:2",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1711:16:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1720:1:2",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1723:1:2",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1713:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1713:12:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1713:12:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1677:5:2"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "1702:5:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "cleanup_t_uint256",
                                          "nodeType": "YulIdentifier",
                                          "src": "1684:17:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1684:24:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "1674:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1674:35:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1667:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1667:43:2"
                              },
                              "nodeType": "YulIf",
                              "src": "1664:63:2"
                            }
                          ]
                        },
                        "name": "validator_revert_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "1647:5:2",
                            "type": ""
                          }
                        ],
                        "src": "1611:122:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1791:87:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1801:29:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1823:6:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1810:12:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1810:20:2"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "1801:5:2"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1866:5:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_t_uint256",
                                  "nodeType": "YulIdentifier",
                                  "src": "1839:26:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1839:33:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1839:33:2"
                            }
                          ]
                        },
                        "name": "abi_decode_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "1769:6:2",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "1777:3:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "1785:5:2",
                            "type": ""
                          }
                        ],
                        "src": "1739:139:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1973:28:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1990:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1993:1:2",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "1983:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1983:12:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1983:12:2"
                            }
                          ]
                        },
                        "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
                        "nodeType": "YulFunctionDefinition",
                        "src": "1884:117:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2096:28:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2113:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2116:1:2",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "2106:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2106:12:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2106:12:2"
                            }
                          ]
                        },
                        "name": "revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490",
                        "nodeType": "YulFunctionDefinition",
                        "src": "2007:117:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2219:28:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2236:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2239:1:2",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "2229:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2229:12:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2229:12:2"
                            }
                          ]
                        },
                        "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef",
                        "nodeType": "YulFunctionDefinition",
                        "src": "2130:117:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2340:478:2",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2389:83:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
                                        "nodeType": "YulIdentifier",
                                        "src": "2391:77:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2391:79:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2391:79:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "2368:6:2"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2376:4:2",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2364:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2364:17:2"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "2383:3:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2360:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2360:27:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2353:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2353:35:2"
                              },
                              "nodeType": "YulIf",
                              "src": "2350:122:2"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2481:30:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2504:6:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2491:12:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2491:20:2"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "2481:6:2"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2554:83:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490",
                                        "nodeType": "YulIdentifier",
                                        "src": "2556:77:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2556:79:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2556:79:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2526:6:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2534:18:2",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2523:2:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2523:30:2"
                              },
                              "nodeType": "YulIf",
                              "src": "2520:117:2"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2646:29:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2662:6:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2670:4:2",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2658:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2658:17:2"
                              },
                              "variableNames": [
                                {
                                  "name": "arrayPos",
                                  "nodeType": "YulIdentifier",
                                  "src": "2646:8:2"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2729:83:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef",
                                        "nodeType": "YulIdentifier",
                                        "src": "2731:77:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2731:79:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2731:79:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "arrayPos",
                                        "nodeType": "YulIdentifier",
                                        "src": "2694:8:2"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "2708:6:2"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2716:4:2",
                                            "type": "",
                                            "value": "0x01"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mul",
                                          "nodeType": "YulIdentifier",
                                          "src": "2704:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2704:17:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2690:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2690:32:2"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "2724:3:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2687:2:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2687:41:2"
                              },
                              "nodeType": "YulIf",
                              "src": "2684:128:2"
                            }
                          ]
                        },
                        "name": "abi_decode_t_bytes_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "2307:6:2",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "2315:3:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "arrayPos",
                            "nodeType": "YulTypedName",
                            "src": "2323:8:2",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "2333:6:2",
                            "type": ""
                          }
                        ],
                        "src": "2266:552:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2943:698:2",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2989:83:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
                                        "nodeType": "YulIdentifier",
                                        "src": "2991:77:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2991:79:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2991:79:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2964:7:2"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2973:9:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2960:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2960:23:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2985:2:2",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2956:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2956:32:2"
                              },
                              "nodeType": "YulIf",
                              "src": "2953:119:2"
                            },
                            {
                              "nodeType": "YulBlock",
                              "src": "3082:117:2",
                              "statements": [
                                {
                                  "nodeType": "YulVariableDeclaration",
                                  "src": "3097:15:2",
                                  "value": {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3111:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  "variables": [
                                    {
                                      "name": "offset",
                                      "nodeType": "YulTypedName",
                                      "src": "3101:6:2",
                                      "type": ""
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "3126:63:2",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "3161:9:2"
                                          },
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "3172:6:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3157:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3157:22:2"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3181:7:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_address",
                                      "nodeType": "YulIdentifier",
                                      "src": "3136:20:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3136:53:2"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "value0",
                                      "nodeType": "YulIdentifier",
                                      "src": "3126:6:2"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "nodeType": "YulBlock",
                              "src": "3209:118:2",
                              "statements": [
                                {
                                  "nodeType": "YulVariableDeclaration",
                                  "src": "3224:16:2",
                                  "value": {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3238:2:2",
                                    "type": "",
                                    "value": "32"
                                  },
                                  "variables": [
                                    {
                                      "name": "offset",
                                      "nodeType": "YulTypedName",
                                      "src": "3228:6:2",
                                      "type": ""
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "3254:63:2",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "3289:9:2"
                                          },
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "3300:6:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3285:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3285:22:2"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3309:7:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_uint256",
                                      "nodeType": "YulIdentifier",
                                      "src": "3264:20:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3264:53:2"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "value1",
                                      "nodeType": "YulIdentifier",
                                      "src": "3254:6:2"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "nodeType": "YulBlock",
                              "src": "3337:297:2",
                              "statements": [
                                {
                                  "nodeType": "YulVariableDeclaration",
                                  "src": "3352:46:2",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "3383:9:2"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3394:2:2",
                                            "type": "",
                                            "value": "64"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3379:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3379:18:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "3366:12:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3366:32:2"
                                  },
                                  "variables": [
                                    {
                                      "name": "offset",
                                      "nodeType": "YulTypedName",
                                      "src": "3356:6:2",
                                      "type": ""
                                    }
                                  ]
                                },
                                {
                                  "body": {
                                    "nodeType": "YulBlock",
                                    "src": "3445:83:2",
                                    "statements": [
                                      {
                                        "expression": {
                                          "arguments": [],
                                          "functionName": {
                                            "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
                                            "nodeType": "YulIdentifier",
                                            "src": "3447:77:2"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3447:79:2"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "3447:79:2"
                                      }
                                    ]
                                  },
                                  "condition": {
                                    "arguments": [
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "3417:6:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3425:18:2",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "3414:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3414:30:2"
                                  },
                                  "nodeType": "YulIf",
                                  "src": "3411:117:2"
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "3542:82:2",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "3596:9:2"
                                          },
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "3607:6:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3592:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3592:22:2"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3616:7:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_bytes_calldata_ptr",
                                      "nodeType": "YulIdentifier",
                                      "src": "3560:31:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3560:64:2"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "value2",
                                      "nodeType": "YulIdentifier",
                                      "src": "3542:6:2"
                                    },
                                    {
                                      "name": "value3",
                                      "nodeType": "YulIdentifier",
                                      "src": "3550:6:2"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256t_bytes_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2889:9:2",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2900:7:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2912:6:2",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2920:6:2",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2928:6:2",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "2936:6:2",
                            "type": ""
                          }
                        ],
                        "src": "2824:817:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3689:48:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "3699:32:2",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "3724:5:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "3717:6:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3717:13:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "3710:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3710:21:2"
                              },
                              "variableNames": [
                                {
                                  "name": "cleaned",
                                  "nodeType": "YulIdentifier",
                                  "src": "3699:7:2"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "cleanup_t_bool",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "3671:5:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "cleaned",
                            "nodeType": "YulTypedName",
                            "src": "3681:7:2",
                            "type": ""
                          }
                        ],
                        "src": "3647:90:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3802:50:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "3819:3:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "3839:5:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "cleanup_t_bool",
                                      "nodeType": "YulIdentifier",
                                      "src": "3824:14:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3824:21:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3812:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3812:34:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3812:34:2"
                            }
                          ]
                        },
                        "name": "abi_encode_t_bool_to_t_bool_fromStack",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "3790:5:2",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "3797:3:2",
                            "type": ""
                          }
                        ],
                        "src": "3743:109:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3950:118:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "3960:26:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3972:9:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3983:2:2",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3968:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3968:18:2"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3960:4:2"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "4034:6:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4047:9:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4058:1:2",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4043:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4043:17:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bool_to_t_bool_fromStack",
                                  "nodeType": "YulIdentifier",
                                  "src": "3996:37:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3996:65:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3996:65:2"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3922:9:2",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3934:6:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3945:4:2",
                            "type": ""
                          }
                        ],
                        "src": "3858:210:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4157:391:2",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4203:83:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
                                        "nodeType": "YulIdentifier",
                                        "src": "4205:77:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4205:79:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4205:79:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4178:7:2"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4187:9:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4174:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4174:23:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4199:2:2",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4170:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4170:32:2"
                              },
                              "nodeType": "YulIf",
                              "src": "4167:119:2"
                            },
                            {
                              "nodeType": "YulBlock",
                              "src": "4296:117:2",
                              "statements": [
                                {
                                  "nodeType": "YulVariableDeclaration",
                                  "src": "4311:15:2",
                                  "value": {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4325:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  "variables": [
                                    {
                                      "name": "offset",
                                      "nodeType": "YulTypedName",
                                      "src": "4315:6:2",
                                      "type": ""
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "4340:63:2",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "4375:9:2"
                                          },
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "4386:6:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "4371:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4371:22:2"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4395:7:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_address",
                                      "nodeType": "YulIdentifier",
                                      "src": "4350:20:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4350:53:2"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "value0",
                                      "nodeType": "YulIdentifier",
                                      "src": "4340:6:2"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "nodeType": "YulBlock",
                              "src": "4423:118:2",
                              "statements": [
                                {
                                  "nodeType": "YulVariableDeclaration",
                                  "src": "4438:16:2",
                                  "value": {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4452:2:2",
                                    "type": "",
                                    "value": "32"
                                  },
                                  "variables": [
                                    {
                                      "name": "offset",
                                      "nodeType": "YulTypedName",
                                      "src": "4442:6:2",
                                      "type": ""
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "4468:63:2",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "4503:9:2"
                                          },
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "4514:6:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "4499:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4499:22:2"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4523:7:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_uint256",
                                      "nodeType": "YulIdentifier",
                                      "src": "4478:20:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4478:53:2"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "value1",
                                      "nodeType": "YulIdentifier",
                                      "src": "4468:6:2"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4119:9:2",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4130:7:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4142:6:2",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4150:6:2",
                            "type": ""
                          }
                        ],
                        "src": "4074:474:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4582:152:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4599:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4602:77:2",
                                    "type": "",
                                    "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4592:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4592:88:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4592:88:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4696:1:2",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4699:4:2",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4689:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4689:15:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4689:15:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4720:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4723:4:2",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "4713:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4713:15:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4713:15:2"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "4554:180:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4785:149:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "4795:25:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "4818:1:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "cleanup_t_uint256",
                                  "nodeType": "YulIdentifier",
                                  "src": "4800:17:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4800:20:2"
                              },
                              "variableNames": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "4795:1:2"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4829:25:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "4852:1:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "cleanup_t_uint256",
                                  "nodeType": "YulIdentifier",
                                  "src": "4834:17:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4834:20:2"
                              },
                              "variableNames": [
                                {
                                  "name": "y",
                                  "nodeType": "YulIdentifier",
                                  "src": "4829:1:2"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4863:17:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "4875:1:2"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "4878:1:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "4871:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4871:9:2"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "4863:4:2"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4905:22:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "4907:16:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4907:18:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4907:18:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "diff",
                                    "nodeType": "YulIdentifier",
                                    "src": "4896:4:2"
                                  },
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "4902:1:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4893:2:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4893:11:2"
                              },
                              "nodeType": "YulIf",
                              "src": "4890:37:2"
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "4771:1:2",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "4774:1:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "4780:4:2",
                            "type": ""
                          }
                        ],
                        "src": "4740:194:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4984:147:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "4994:25:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "5017:1:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "cleanup_t_uint256",
                                  "nodeType": "YulIdentifier",
                                  "src": "4999:17:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4999:20:2"
                              },
                              "variableNames": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "4994:1:2"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5028:25:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "5051:1:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "cleanup_t_uint256",
                                  "nodeType": "YulIdentifier",
                                  "src": "5033:17:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5033:20:2"
                              },
                              "variableNames": [
                                {
                                  "name": "y",
                                  "nodeType": "YulIdentifier",
                                  "src": "5028:1:2"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5062:16:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "5073:1:2"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "5076:1:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5069:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5069:9:2"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "5062:3:2"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5102:22:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "5104:16:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5104:18:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5104:18:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "5094:1:2"
                                  },
                                  {
                                    "name": "sum",
                                    "nodeType": "YulIdentifier",
                                    "src": "5097:3:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5091:2:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5091:10:2"
                              },
                              "nodeType": "YulIf",
                              "src": "5088:36:2"
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "4971:1:2",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "4974:1:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "4980:3:2",
                            "type": ""
                          }
                        ],
                        "src": "4940:191:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5202:53:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "5219:3:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "5242:5:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "cleanup_t_address",
                                      "nodeType": "YulIdentifier",
                                      "src": "5224:17:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5224:24:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5212:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5212:37:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5212:37:2"
                            }
                          ]
                        },
                        "name": "abi_encode_t_address_to_t_address_fromStack",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "5190:5:2",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "5197:3:2",
                            "type": ""
                          }
                        ],
                        "src": "5137:118:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5356:73:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "5373:3:2"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5378:6:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5366:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5366:19:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5366:19:2"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5394:29:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "5413:3:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5418:4:2",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5409:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5409:14:2"
                              },
                              "variableNames": [
                                {
                                  "name": "updated_pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "5394:11:2"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "5328:3:2",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "5333:6:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "updated_pos",
                            "nodeType": "YulTypedName",
                            "src": "5344:11:2",
                            "type": ""
                          }
                        ],
                        "src": "5261:168:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5499:82:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "5522:3:2"
                                  },
                                  {
                                    "name": "src",
                                    "nodeType": "YulIdentifier",
                                    "src": "5527:3:2"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5532:6:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "5509:12:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5509:30:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5509:30:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "5559:3:2"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "5564:6:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5555:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5555:16:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5573:1:2",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5548:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5548:27:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5548:27:2"
                            }
                          ]
                        },
                        "name": "copy_calldata_to_memory_with_cleanup",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "5481:3:2",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "5486:3:2",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "5491:6:2",
                            "type": ""
                          }
                        ],
                        "src": "5435:146:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5635:54:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5645:38:2",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "5663:5:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5670:2:2",
                                        "type": "",
                                        "value": "31"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5659:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5659:14:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5679:2:2",
                                        "type": "",
                                        "value": "31"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "5675:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5675:7:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "5655:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5655:28:2"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nodeType": "YulIdentifier",
                                  "src": "5645:6:2"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "round_up_to_mul_of_32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "5618:5:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "result",
                            "nodeType": "YulTypedName",
                            "src": "5628:6:2",
                            "type": ""
                          }
                        ],
                        "src": "5587:102:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5817:214:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5827:77:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "5892:3:2"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5897:6:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack",
                                  "nodeType": "YulIdentifier",
                                  "src": "5834:57:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5834:70:2"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "5827:3:2"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "start",
                                    "nodeType": "YulIdentifier",
                                    "src": "5951:5:2"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "5958:3:2"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5963:6:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_calldata_to_memory_with_cleanup",
                                  "nodeType": "YulIdentifier",
                                  "src": "5914:36:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5914:56:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5914:56:2"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5979:46:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "5990:3:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "6017:6:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "round_up_to_mul_of_32",
                                      "nodeType": "YulIdentifier",
                                      "src": "5995:21:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5995:29:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5986:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5986:39:2"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "5979:3:2"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_t_bytes_calldata_ptr_to_t_bytes_memory_ptr_fromStack",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "start",
                            "nodeType": "YulTypedName",
                            "src": "5790:5:2",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "5797:6:2",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "5805:3:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "5813:3:2",
                            "type": ""
                          }
                        ],
                        "src": "5717:314:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6219:367:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6229:26:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6241:9:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6252:2:2",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6237:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6237:18:2"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6229:4:2"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6309:6:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6322:9:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6333:1:2",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6318:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6318:17:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_address_to_t_address_fromStack",
                                  "nodeType": "YulIdentifier",
                                  "src": "6265:43:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6265:71:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6265:71:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6390:6:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6403:9:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6414:2:2",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6399:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6399:18:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_uint256_to_t_uint256_fromStack",
                                  "nodeType": "YulIdentifier",
                                  "src": "6346:43:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6346:72:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6346:72:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6439:9:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6450:2:2",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6435:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6435:18:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "tail",
                                        "nodeType": "YulIdentifier",
                                        "src": "6459:4:2"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6465:9:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "6455:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6455:20:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6428:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6428:48:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6428:48:2"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6485:94:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6557:6:2"
                                  },
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "6565:6:2"
                                  },
                                  {
                                    "name": "tail",
                                    "nodeType": "YulIdentifier",
                                    "src": "6574:4:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes_calldata_ptr_to_t_bytes_memory_ptr_fromStack",
                                  "nodeType": "YulIdentifier",
                                  "src": "6493:63:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6493:86:2"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6485:4:2"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_uint256_t_bytes_calldata_ptr__to_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6167:9:2",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "6179:6:2",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "6187:6:2",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6195:6:2",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6203:6:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6214:4:2",
                            "type": ""
                          }
                        ],
                        "src": "6037:549:2"
                      }
                    ]
                  },
                  "contents": "{\n\n    function cleanup_t_uint256(value) -> cleaned {\n        cleaned := value\n    }\n\n    function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n        mstore(pos, cleanup_t_uint256(value))\n    }\n\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n        revert(0, 0)\n    }\n\n    function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n        revert(0, 0)\n    }\n\n    function cleanup_t_uint160(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n    }\n\n    function cleanup_t_address(value) -> cleaned {\n        cleaned := cleanup_t_uint160(value)\n    }\n\n    function validator_revert_t_address(value) {\n        if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_address(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_address(value)\n    }\n\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function validator_revert_t_uint256(value) {\n        if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n    }\n\n    function abi_decode_t_uint256(offset, end) -> value {\n        value := calldataload(offset)\n        validator_revert_t_uint256(value)\n    }\n\n    function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n        revert(0, 0)\n    }\n\n    function revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() {\n        revert(0, 0)\n    }\n\n    function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n        revert(0, 0)\n    }\n\n    // bytes\n    function abi_decode_t_bytes_calldata_ptr(offset, end) -> arrayPos, length {\n        if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() }\n        arrayPos := add(offset, 0x20)\n        if gt(add(arrayPos, mul(length, 0x01)), end) { revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() }\n    }\n\n    function abi_decode_tuple_t_addresst_uint256t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3 {\n        if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := calldataload(add(headStart, 64))\n            if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n            value2, value3 := abi_decode_t_bytes_calldata_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function cleanup_t_bool(value) -> cleaned {\n        cleaned := iszero(iszero(value))\n    }\n\n    function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n        mstore(pos, cleanup_t_bool(value))\n    }\n\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_bool_to_t_bool_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n        if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n        {\n\n            let offset := 0\n\n            value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n        }\n\n        {\n\n            let offset := 32\n\n            value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function panic_error_0x11() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n\n    function checked_sub_t_uint256(x, y) -> diff {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        diff := sub(x, y)\n\n        if gt(diff, x) { panic_error_0x11() }\n\n    }\n\n    function checked_add_t_uint256(x, y) -> sum {\n        x := cleanup_t_uint256(x)\n        y := cleanup_t_uint256(y)\n        sum := add(x, y)\n\n        if gt(x, sum) { panic_error_0x11() }\n\n    }\n\n    function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n        mstore(pos, cleanup_t_address(value))\n    }\n\n    function array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length) -> updated_pos {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n\n    function copy_calldata_to_memory_with_cleanup(src, dst, length) {\n        calldatacopy(dst, src, length)\n        mstore(add(dst, length), 0)\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n    // bytes -> bytes\n    function abi_encode_t_bytes_calldata_ptr_to_t_bytes_memory_ptr_fromStack(start, length, pos) -> end {\n        pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length)\n\n        copy_calldata_to_memory_with_cleanup(start, pos, length)\n        end := add(pos, round_up_to_mul_of_32(length))\n    }\n\n    function abi_encode_tuple_t_address_t_uint256_t_bytes_calldata_ptr__to_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n        tail := add(headStart, 96)\n\n        abi_encode_t_address_to_t_address_fromStack(value0,  add(headStart, 0))\n\n        abi_encode_t_uint256_to_t_uint256_fromStack(value1,  add(headStart, 32))\n\n        mstore(add(headStart, 64), sub(tail, headStart))\n        tail := abi_encode_t_bytes_calldata_ptr_to_t_bytes_memory_ptr_fromStack(value2, value3,  tail)\n\n    }\n\n}\n",
                  "id": 2,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {}
            },
            "methodIdentifiers": {
              "balanceOf(address)": "70a08231",
              "balances(address)": "27e235e3",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferAndCall(address,uint256,bytes)": "4000aea0"
            }
          }
        }
      }
    }
  }
}