{
  "contractName": "PairOpenSumSwap",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "input",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "output",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "swap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "output",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "getOutputAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.8+commit.0bbfe453\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"output\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"getOutputAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"input\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"output\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"project:/contracts/swappa/PairOpenSumSwap.sol\":\"PairOpenSumSwap\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0xdb26cbf4d028490f49831a7865c2fe1b28db44b535ca8d343785a3b768aae183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://840b14ce0315c47d49ba328f1f9fa7654ded1c9e1559e6c5e777a7b2dc28bf0a\",\"dweb:/ipfs/QmTLLabn4wcfGro9LEmUXUN2nwKqZSotXMvjDCLXEnLtZP\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x9a9cf02622cd7a64261b10534fc3260449da25c98c9e96d1b4ae8110a20e5806\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2df142592d1dc267d9549049ee3317fa190d2f87eaa565f86ab05ec83f7ab8f5\",\"dweb:/ipfs/QmSkJtcfWo7c42KnL5hho6GFxK6HRNV91XABx1P7xDtfLV\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x91e0bd6a6762d2a1700dab0849de8422611355100576c4beef1e80d82a4104a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://73bbd77af0a8b07255d2ffa20728bcf13b116007c9ddac5d37046cfabb0e1e02\",\"dweb:/ipfs/QmRgZgWCWCSMTTaok6o4QvWA6MgB4goS8qpb3sN7bAvaZ9\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x5c26b39d26f7ed489e555d955dcd3e01872972e71fdd1528e93ec164e4f23385\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://efdc632af6960cf865dbc113665ea1f5b90eab75cc40ec062b2f6ae6da582017\",\"dweb:/ipfs/QmfAZFDuG62vxmAN9DnXApv7e7PMzPqi4RkqqZHLMSQiY5\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf5fa8cbdffa5ef8be49b246b5628facc30b71707e78a45d80d93b64eff3fe390\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://774e78a9ff32792cc95db4d2ceaf3a7965bb7f0bea5e6cb7cff182b450d44b37\",\"dweb:/ipfs/QmRRMC4uj7eAcLW7chynA3sNEYULMFazdLwQHKHQPyzAbA\"]},\"project:/contracts/interfaces/stableswap/IOpenSumSwap.sol\":{\"keccak256\":\"0x291c93cfc844c07d8cace1fd7b5a398961d6576c38c77460bed1f89c7bdd94d0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7387bc3f5fa4163e7149c85cf804df177855b3e3e0912a869d427e078fab1608\",\"dweb:/ipfs/QmZ5faizBQJc4pDtGqvayhYPTY8bh2iKA6Cst4G3cJgdSz\"]},\"project:/contracts/swappa/ISwappaPairV1.sol\":{\"keccak256\":\"0x3ad68981bda91ed83c5e9ee8617f08bb5e208208477fb755cc77077f127010ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e4390b1bebc39f58bff34b9099a646ead67cef27b722ef61548487251cca719\",\"dweb:/ipfs/QmRWEuYyjHaS957VKWtTfDpzfqkXb2bvEsS33meAC76ZuU\"]},\"project:/contracts/swappa/PairOpenSumSwap.sol\":{\"keccak256\":\"0x8f9f4600943047799c86b5fa56fc9b8eabef905e0eafed27fcc49a24d5a9b7d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c25c4c5014c7202fb3dd1259afdd312cfb429baca4e20ab6b30141fc02555be\",\"dweb:/ipfs/QmT3ysTicgBTXGwTprLHW5yhBCNJkfg5eEbw9VGrXmv4td\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5061078c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806332ef83141461003b5780637eace892146100db575b600080fd5b6100d96004803603608081101561005157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013582169260408201359092169181019060808101606082013564010000000081111561009a57600080fd5b8201836020820111156100ac57600080fd5b803590602001918460018302840111640100000000831117156100ce57600080fd5b50909250905061018a565b005b610178600480360360808110156100f157600080fd5b73ffffffffffffffffffffffffffffffffffffffff82358116926020810135909116916040820135919081019060808101606082013564010000000081111561013957600080fd5b82018360208201111561014b57600080fd5b8035906020019184600183028401116401000000008311171561016d57600080fd5b50909250905061053d565b60408051918252519081900360200190f35b60006101cb83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106bb92505050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b15801561023d57600080fd5b505afa158015610251573d6000803e3d6000fd5b505050506040513d602081101561026757600080fd5b5051604080517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820184905291519293509089169163095ea7b3916044808201926020929091908290030181600087803b1580156102e557600080fd5b505af11580156102f9573d6000803e3d6000fd5b505050506040513d602081101561030f57600080fd5b505161037c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f506169724f70656e53756d537761703a20617070726f7665206661696c656421604482015290519081900360640190fd5b604080517f7a950f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152888116602483015260448201849052606482018490524260848301529151600092851691637a950f999160a480830192602092919082900301818787803b15801561040a57600080fd5b505af115801561041e573d6000803e3d6000fd5b505050506040513d602081101561043457600080fd5b5051604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301526024820184905291519293509089169163a9059cbb916044808201926020929091908290030181600087803b1580156104b257600080fd5b505af11580156104c6573d6000803e3d6000fd5b505050506040513d60208110156104dc57600080fd5b5051610533576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806107366021913960400191505060405180910390fd5b5050505050505050565b60008061057f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106bb92505050565b90508073ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105c757600080fd5b505afa1580156105db573d6000803e3d6000fd5b505050506040513d60208110156105f157600080fd5b50511580156106a85750848673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561067957600080fd5b505afa15801561068d573d6000803e3d6000fd5b505050506040513d60208110156106a357600080fd5b505110155b156106b1578491505b5095945050505050565b6000815160141461072d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f506169724f70656e53756d537761703a20696e76616c69642064617461210000604482015290519081900360640190fd5b50601401519056fe506169724f70656e53756d537761703a207472616e73666572206661696c656421a264697066735822122060e99049f1e4da33c5803b592cba056df9aaccbf92d830f537b4572d674d72bf64736f6c63430006080033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806332ef83141461003b5780637eace892146100db575b600080fd5b6100d96004803603608081101561005157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013582169260408201359092169181019060808101606082013564010000000081111561009a57600080fd5b8201836020820111156100ac57600080fd5b803590602001918460018302840111640100000000831117156100ce57600080fd5b50909250905061018a565b005b610178600480360360808110156100f157600080fd5b73ffffffffffffffffffffffffffffffffffffffff82358116926020810135909116916040820135919081019060808101606082013564010000000081111561013957600080fd5b82018360208201111561014b57600080fd5b8035906020019184600183028401116401000000008311171561016d57600080fd5b50909250905061053d565b60408051918252519081900360200190f35b60006101cb83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106bb92505050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b15801561023d57600080fd5b505afa158015610251573d6000803e3d6000fd5b505050506040513d602081101561026757600080fd5b5051604080517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820184905291519293509089169163095ea7b3916044808201926020929091908290030181600087803b1580156102e557600080fd5b505af11580156102f9573d6000803e3d6000fd5b505050506040513d602081101561030f57600080fd5b505161037c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f506169724f70656e53756d537761703a20617070726f7665206661696c656421604482015290519081900360640190fd5b604080517f7a950f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152888116602483015260448201849052606482018490524260848301529151600092851691637a950f999160a480830192602092919082900301818787803b15801561040a57600080fd5b505af115801561041e573d6000803e3d6000fd5b505050506040513d602081101561043457600080fd5b5051604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301526024820184905291519293509089169163a9059cbb916044808201926020929091908290030181600087803b1580156104b257600080fd5b505af11580156104c6573d6000803e3d6000fd5b505050506040513d60208110156104dc57600080fd5b5051610533576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806107366021913960400191505060405180910390fd5b5050505050505050565b60008061057f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106bb92505050565b90508073ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105c757600080fd5b505afa1580156105db573d6000803e3d6000fd5b505050506040513d60208110156105f157600080fd5b50511580156106a85750848673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561067957600080fd5b505afa15801561068d573d6000803e3d6000fd5b505050506040513d60208110156106a357600080fd5b505110155b156106b1578491505b5095945050505050565b6000815160141461072d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f506169724f70656e53756d537761703a20696e76616c69642064617461210000604482015290519081900360640190fd5b50601401519056fe506169724f70656e53756d537761703a207472616e73666572206661696c656421a264697066735822122060e99049f1e4da33c5803b592cba056df9aaccbf92d830f537b4572d674d72bf64736f6c63430006080033",
  "immutableReferences": {},
  "sourceMap": "247:1187:52:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;247:1187:52;;;;;;;",
  "deployedSourceMap": "247:1187:52:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;247:1187:52;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;319:542:52;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;319:542:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;319:542:52;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;319:542:52;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;319:542:52;;-1:-1:-1;319:542:52;-1:-1:-1;319:542:52;:::i;:::-;;1074:358;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;1074:358:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;1074:358:52;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;1074:358:52;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;1074:358:52;;-1:-1:-1;1074:358:52;-1:-1:-1;1074:358:52;:::i;:::-;;;;;;;;;;;;;;;;319:542;430:20;453:15;463:4;;453:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;453:9:52;;-1:-1:-1;;;453:15:52:i;:::-;491:37;;;;;;522:4;491:37;;;;;;430:38;;-1:-1:-1;472:16:52;;491:22;;;;;;:37;;;;;;;;;;;;;;:22;:37;;;2:2:-1;;;;27:1;24;17:12;2:2;491:37:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;491:37:52;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;491:37:52;544:47;;;;;;:20;:47;;;;;;;;;;;;;;;491:37;;-1:-1:-1;544:20:52;;;;;;:47;;;;;491:37;;544:47;;;;;;;;-1:-1:-1;544:20:52;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;544:47:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;544:47:52;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;544:47:52;532:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;655:105;;;;;;:31;:105;;;;;;;;;;;;;;;;;;;;;;;;;;744:15;655:105;;;;;;635:17;;655:31;;;;;:105;;;;;;;;;;;;;;635:17;655:31;:105;;;2:2:-1;;;;27:1;24;17:12;2:2;655:105:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;655:105:52;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;655:105:52;776:40;;;;;;:22;:40;;;;;;;;;;;;;;;655:105;;-1:-1:-1;776:22:52;;;;;;:40;;;;;655:105;;776:40;;;;;;;;-1:-1:-1;776:22:52;:40;;;2:2:-1;;;;27:1;24;17:12;2:2;776:40:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;776:40:52;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;776:40:52;764:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;319:542;;;;;;;;:::o;1074:358::-;1198:14;1218:17;1251:15;1261:4;;1251:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1251:9:52;;-1:-1:-1;;;1251:15:52:i;:::-;1218:49;;1330:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1330:13:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1330:13:52;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1330:13:52;1329:14;:68;;;;;1389:8;1353:6;1347:23;;;1379:4;1347:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1347:38:52;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1347:38:52;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1347:38:52;:50;;1329:68;1325:104;;;1416:8;1404:20;;1325:104;1074:358;;;;;;;;:::o;864:207::-;924:20;958:4;:11;973:2;958:17;950:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1060:2:52;1050:13;1044:20;;1023:45::o",
  "source": "// SPDX-License-Identifier: MIT\npragma solidity 0.6.8;\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport \"../interfaces/stableswap/IOpenSumSwap.sol\";\nimport \"./ISwappaPairV1.sol\";\n\ncontract PairOpenSumSwap is ISwappaPairV1 {\n\tusing SafeMath for uint;\n\n\tfunction swap(\n\t\taddress input,\n\t\taddress output,\n\t\taddress to,\n\t\tbytes calldata data\n\t) external override {\n\t\taddress swapPoolAddr = parseData(data);\n\t\tuint inputAmount = ERC20(input).balanceOf(address(this));\n\t\trequire(\n\t\t\tERC20(input).approve(swapPoolAddr, inputAmount),\n\t\t\t\"PairOpenSumSwap: approve failed!\");\n\t\tuint outputAmount = IOpenSumSwap(swapPoolAddr).swap(\n\t\t\tinput,\n\t\t\toutput,\n\t\t\tinputAmount,\n\t\t\tinputAmount,\n\t\t\tblock.timestamp);\n\t\trequire(\n\t\t\tERC20(output).transfer(to, outputAmount),\n\t\t\t\"PairOpenSumSwap: transfer failed!\");\n\t}\n\n\tfunction parseData(bytes memory data) private pure returns (address swapPoolAddr) {\n\t\trequire(data.length == 20, \"PairOpenSumSwap: invalid data!\");\n\t\tassembly {\n\t\t\tswapPoolAddr := mload(add(data, 20))\n\t\t}\n\t}\n\n\tfunction getOutputAmount(\n\t\taddress,\n\t\taddress output,\n\t\tuint amountIn,\n\t\tbytes calldata data\n\t) external override returns (uint amountOut) {\n\t\tIOpenSumSwap pool = IOpenSumSwap(parseData(data));\n\t\t// no fees are taken if there's enough output token\n\t\tif (!pool.paused() && ERC20(output).balanceOf(address(pool)) >= amountIn) {\n\t\t\tamountOut = amountIn;\n\t\t}\n\t}\n}\n",
  "sourcePath": "/home/thezviad_gmail_com/src/swappa/contracts/swappa/PairOpenSumSwap.sol",
  "ast": {
    "absolutePath": "project:/contracts/swappa/PairOpenSumSwap.sol",
    "exportedSymbols": {
      "PairOpenSumSwap": [
        6406
      ]
    },
    "id": 6407,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 6267,
        "literals": [
          "solidity",
          "0.6",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:22:52"
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 6268,
        "nodeType": "ImportDirective",
        "scope": 6407,
        "sourceUnit": 219,
        "src": "56:51:52",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
        "id": 6269,
        "nodeType": "ImportDirective",
        "scope": 6407,
        "sourceUnit": 726,
        "src": "108:55:52",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/stableswap/IOpenSumSwap.sol",
        "file": "../interfaces/stableswap/IOpenSumSwap.sol",
        "id": 6270,
        "nodeType": "ImportDirective",
        "scope": 6407,
        "sourceUnit": 1810,
        "src": "164:51:52",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/swappa/ISwappaPairV1.sol",
        "file": "./ISwappaPairV1.sol",
        "id": 6271,
        "nodeType": "ImportDirective",
        "scope": 6407,
        "sourceUnit": 5326,
        "src": "216:29:52",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6272,
              "name": "ISwappaPairV1",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5325,
              "src": "275:13:52",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ISwappaPairV1_$5325",
                "typeString": "contract ISwappaPairV1"
              }
            },
            "id": 6273,
            "nodeType": "InheritanceSpecifier",
            "src": "275:13:52"
          }
        ],
        "contractDependencies": [
          5325
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 6406,
        "linearizedBaseContracts": [
          6406,
          5325
        ],
        "name": "PairOpenSumSwap",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 6276,
            "libraryName": {
              "contractScope": null,
              "id": 6274,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 218,
              "src": "298:8:52",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$218",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "292:24:52",
            "typeName": {
              "id": 6275,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "311:4:52",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "baseFunctions": [
              5311
            ],
            "body": {
              "id": 6342,
              "nodeType": "Block",
              "src": "426:435:52",
              "statements": [
                {
                  "assignments": [
                    6289
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6289,
                      "mutability": "mutable",
                      "name": "swapPoolAddr",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6342,
                      "src": "430:20:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6288,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "430:7:52",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6293,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6291,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6284,
                        "src": "463:4:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 6290,
                      "name": "parseData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6360,
                      "src": "453:9:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes memory) pure returns (address)"
                      }
                    },
                    "id": 6292,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "453:15:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "430:38:52"
                },
                {
                  "assignments": [
                    6295
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6295,
                      "mutability": "mutable",
                      "name": "inputAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6342,
                      "src": "472:16:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6294,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "472:4:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6305,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6302,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "522:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PairOpenSumSwap_$6406",
                              "typeString": "contract PairOpenSumSwap"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_PairOpenSumSwap_$6406",
                              "typeString": "contract PairOpenSumSwap"
                            }
                          ],
                          "id": 6301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "514:7:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6300,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "514:7:52",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6303,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "514:13:52",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6297,
                            "name": "input",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6278,
                            "src": "497:5:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 6296,
                          "name": "ERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 725,
                          "src": "491:5:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ERC20_$725_$",
                            "typeString": "type(contract ERC20)"
                          }
                        },
                        "id": 6298,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "491:12:52",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$725",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 6299,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 325,
                      "src": "491:22:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 6304,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "491:37:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "472:56:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6311,
                            "name": "swapPoolAddr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6289,
                            "src": "565:12:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 6312,
                            "name": "inputAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6295,
                            "src": "579:11:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6308,
                                "name": "input",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6278,
                                "src": "550:5:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6307,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 725,
                              "src": "544:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$725_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 6309,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "544:12:52",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$725",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 6310,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "approve",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 385,
                          "src": "544:20:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 6313,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "544:47:52",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "506169724f70656e53756d537761703a20617070726f7665206661696c656421",
                        "id": 6314,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "596:34:52",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6b19a92990b172d82b32c38e00a880f42afccd0a4cd0c9d86d08724cf4e02d3f",
                          "typeString": "literal_string \"PairOpenSumSwap: approve failed!\""
                        },
                        "value": "PairOpenSumSwap: approve failed!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6b19a92990b172d82b32c38e00a880f42afccd0a4cd0c9d86d08724cf4e02d3f",
                          "typeString": "literal_string \"PairOpenSumSwap: approve failed!\""
                        }
                      ],
                      "id": 6306,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "532:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6315,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "532:99:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6316,
                  "nodeType": "ExpressionStatement",
                  "src": "532:99:52"
                },
                {
                  "assignments": [
                    6318
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6318,
                      "mutability": "mutable",
                      "name": "outputAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6342,
                      "src": "635:17:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6317,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "635:4:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6330,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6323,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6278,
                        "src": "691:5:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6324,
                        "name": "output",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6280,
                        "src": "701:6:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6325,
                        "name": "inputAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6295,
                        "src": "712:11:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6326,
                        "name": "inputAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6295,
                        "src": "728:11:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6327,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "744:5:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 6328,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "744:15:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6320,
                            "name": "swapPoolAddr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6289,
                            "src": "668:12:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 6319,
                          "name": "IOpenSumSwap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1809,
                          "src": "655:12:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IOpenSumSwap_$1809_$",
                            "typeString": "type(contract IOpenSumSwap)"
                          }
                        },
                        "id": 6321,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "655:26:52",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IOpenSumSwap_$1809",
                          "typeString": "contract IOpenSumSwap"
                        }
                      },
                      "id": 6322,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "swap",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1808,
                      "src": "655:31:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256,uint256,uint256) external returns (uint256)"
                      }
                    },
                    "id": 6329,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "655:105:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "635:125:52"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6336,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6282,
                            "src": "799:2:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 6337,
                            "name": "outputAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6318,
                            "src": "803:12:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6333,
                                "name": "output",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6280,
                                "src": "782:6:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6332,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 725,
                              "src": "776:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$725_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 6334,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "776:13:52",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$725",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 6335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 346,
                          "src": "776:22:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 6338,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "776:40:52",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "506169724f70656e53756d537761703a207472616e73666572206661696c656421",
                        "id": 6339,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "821:35:52",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_992fc87303901b212e9ab97da6aaa9fdee5a5d05b6812f7a66aeb87e6c04a884",
                          "typeString": "literal_string \"PairOpenSumSwap: transfer failed!\""
                        },
                        "value": "PairOpenSumSwap: transfer failed!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_992fc87303901b212e9ab97da6aaa9fdee5a5d05b6812f7a66aeb87e6c04a884",
                          "typeString": "literal_string \"PairOpenSumSwap: transfer failed!\""
                        }
                      ],
                      "id": 6331,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "764:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6340,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "764:93:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6341,
                  "nodeType": "ExpressionStatement",
                  "src": "764:93:52"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "32ef8314",
            "id": 6343,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "swap",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 6286,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "417:8:52"
            },
            "parameters": {
              "id": 6285,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6278,
                  "mutability": "mutable",
                  "name": "input",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6343,
                  "src": "336:13:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6277,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "336:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6280,
                  "mutability": "mutable",
                  "name": "output",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6343,
                  "src": "353:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6279,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "353:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6282,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6343,
                  "src": "371:10:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6281,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "371:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6284,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6343,
                  "src": "385:19:52",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6283,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "385:5:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "332:75:52"
            },
            "returnParameters": {
              "id": 6287,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "426:0:52"
            },
            "scope": 6406,
            "src": "319:542:52",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6359,
              "nodeType": "Block",
              "src": "946:125:52",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6354,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6351,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6345,
                            "src": "958:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 6352,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "958:11:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "3230",
                          "id": 6353,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "973:2:52",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_20_by_1",
                            "typeString": "int_const 20"
                          },
                          "value": "20"
                        },
                        "src": "958:17:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "506169724f70656e53756d537761703a20696e76616c6964206461746121",
                        "id": 6355,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "977:32:52",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7c0273f693d362a9f10ec0424f6c32bffa1dcf1084e58717df3feb6c71183507",
                          "typeString": "literal_string \"PairOpenSumSwap: invalid data!\""
                        },
                        "value": "PairOpenSumSwap: invalid data!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7c0273f693d362a9f10ec0424f6c32bffa1dcf1084e58717df3feb6c71183507",
                          "typeString": "literal_string \"PairOpenSumSwap: invalid data!\""
                        }
                      ],
                      "id": 6350,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "950:7:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6356,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "950:60:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6357,
                  "nodeType": "ExpressionStatement",
                  "src": "950:60:52"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1023:45:52",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "1028:36:52",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "data",
                                  "nodeType": "YulIdentifier",
                                  "src": "1054:4:52"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1060:2:52",
                                  "type": "",
                                  "value": "20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "1050:3:52"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1050:13:52"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "1044:5:52"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1044:20:52"
                        },
                        "variableNames": [
                          {
                            "name": "swapPoolAddr",
                            "nodeType": "YulIdentifier",
                            "src": "1028:12:52"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 6345,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1054:4:52",
                      "valueSize": 1
                    },
                    {
                      "declaration": 6348,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1028:12:52",
                      "valueSize": 1
                    }
                  ],
                  "id": 6358,
                  "nodeType": "InlineAssembly",
                  "src": "1014:54:52"
                }
              ]
            },
            "documentation": null,
            "id": 6360,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "parseData",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6346,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6345,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6360,
                  "src": "883:17:52",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6344,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "883:5:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "882:19:52"
            },
            "returnParameters": {
              "id": 6349,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6348,
                  "mutability": "mutable",
                  "name": "swapPoolAddr",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6360,
                  "src": "924:20:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6347,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "924:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "923:22:52"
            },
            "scope": 6406,
            "src": "864:207:52",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "baseFunctions": [
              5324
            ],
            "body": {
              "id": 6404,
              "nodeType": "Block",
              "src": "1214:218:52",
              "statements": [
                {
                  "assignments": [
                    6375
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6375,
                      "mutability": "mutable",
                      "name": "pool",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6404,
                      "src": "1218:17:52",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IOpenSumSwap_$1809",
                        "typeString": "contract IOpenSumSwap"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 6374,
                        "name": "IOpenSumSwap",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1809,
                        "src": "1218:12:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IOpenSumSwap_$1809",
                          "typeString": "contract IOpenSumSwap"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6381,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6378,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6368,
                            "src": "1261:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "id": 6377,
                          "name": "parseData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6360,
                          "src": "1251:9:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$",
                            "typeString": "function (bytes memory) pure returns (address)"
                          }
                        },
                        "id": 6379,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1251:15:52",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6376,
                      "name": "IOpenSumSwap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1809,
                      "src": "1238:12:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IOpenSumSwap_$1809_$",
                        "typeString": "type(contract IOpenSumSwap)"
                      }
                    },
                    "id": 6380,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1238:29:52",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IOpenSumSwap_$1809",
                      "typeString": "contract IOpenSumSwap"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1218:49:52"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6397,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6385,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "1329:14:52",
                      "subExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 6382,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6375,
                            "src": "1330:4:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IOpenSumSwap_$1809",
                              "typeString": "contract IOpenSumSwap"
                            }
                          },
                          "id": 6383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "paused",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1780,
                          "src": "1330:11:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                            "typeString": "function () view external returns (bool)"
                          }
                        },
                        "id": 6384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1330:13:52",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 6396,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6392,
                                "name": "pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6375,
                                "src": "1379:4:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IOpenSumSwap_$1809",
                                  "typeString": "contract IOpenSumSwap"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IOpenSumSwap_$1809",
                                  "typeString": "contract IOpenSumSwap"
                                }
                              ],
                              "id": 6391,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1371:7:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 6390,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1371:7:52",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 6393,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1371:13:52",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6387,
                                "name": "output",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6364,
                                "src": "1353:6:52",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6386,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 725,
                              "src": "1347:5:52",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$725_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 6388,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1347:13:52",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$725",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 6389,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balanceOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 325,
                          "src": "1347:23:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 6394,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1347:38:52",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 6395,
                        "name": "amountIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6366,
                        "src": "1389:8:52",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "1347:50:52",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1329:68:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6403,
                  "nodeType": "IfStatement",
                  "src": "1325:104:52",
                  "trueBody": {
                    "id": 6402,
                    "nodeType": "Block",
                    "src": "1399:30:52",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6400,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6398,
                            "name": "amountOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6372,
                            "src": "1404:9:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6399,
                            "name": "amountIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6366,
                            "src": "1416:8:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1404:20:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6401,
                        "nodeType": "ExpressionStatement",
                        "src": "1404:20:52"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "functionSelector": "7eace892",
            "id": 6405,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getOutputAmount",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 6370,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1180:8:52"
            },
            "parameters": {
              "id": 6369,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6362,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6405,
                  "src": "1102:7:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6361,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1102:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6364,
                  "mutability": "mutable",
                  "name": "output",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6405,
                  "src": "1113:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6363,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1113:7:52",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6366,
                  "mutability": "mutable",
                  "name": "amountIn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6405,
                  "src": "1131:13:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6365,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1131:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6368,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6405,
                  "src": "1148:19:52",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6367,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1148:5:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1098:72:52"
            },
            "returnParameters": {
              "id": 6373,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6372,
                  "mutability": "mutable",
                  "name": "amountOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6405,
                  "src": "1198:14:52",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6371,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1198:4:52",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1197:16:52"
            },
            "scope": 6406,
            "src": "1074:358:52",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 6407,
        "src": "247:1187:52"
      }
    ],
    "src": "32:1403:52"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "project:/contracts/swappa/PairOpenSumSwap.sol",
      "exportedSymbols": {
        "PairOpenSumSwap": [
          6406
        ]
      },
      "license": "MIT"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.6",
            ".8"
          ]
        },
        "id": 6267,
        "name": "PragmaDirective",
        "src": "32:22:52"
      },
      {
        "attributes": {
          "SourceUnit": 219,
          "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
          "file": "@openzeppelin/contracts/math/SafeMath.sol",
          "scope": 6407,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 6268,
        "name": "ImportDirective",
        "src": "56:51:52"
      },
      {
        "attributes": {
          "SourceUnit": 726,
          "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
          "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
          "scope": 6407,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 6269,
        "name": "ImportDirective",
        "src": "108:55:52"
      },
      {
        "attributes": {
          "SourceUnit": 1810,
          "absolutePath": "project:/contracts/interfaces/stableswap/IOpenSumSwap.sol",
          "file": "../interfaces/stableswap/IOpenSumSwap.sol",
          "scope": 6407,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 6270,
        "name": "ImportDirective",
        "src": "164:51:52"
      },
      {
        "attributes": {
          "SourceUnit": 5326,
          "absolutePath": "project:/contracts/swappa/ISwappaPairV1.sol",
          "file": "./ISwappaPairV1.sol",
          "scope": 6407,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 6271,
        "name": "ImportDirective",
        "src": "216:29:52"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            5325
          ],
          "contractKind": "contract",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            6406,
            5325
          ],
          "name": "PairOpenSumSwap",
          "scope": 6407
        },
        "children": [
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "ISwappaPairV1",
                  "referencedDeclaration": 5325,
                  "type": "contract ISwappaPairV1"
                },
                "id": 6272,
                "name": "UserDefinedTypeName",
                "src": "275:13:52"
              }
            ],
            "id": 6273,
            "name": "InheritanceSpecifier",
            "src": "275:13:52"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "SafeMath",
                  "referencedDeclaration": 218,
                  "type": "library SafeMath"
                },
                "id": 6274,
                "name": "UserDefinedTypeName",
                "src": "298:8:52"
              },
              {
                "attributes": {
                  "name": "uint",
                  "type": "uint256"
                },
                "id": 6275,
                "name": "ElementaryTypeName",
                "src": "311:4:52"
              }
            ],
            "id": 6276,
            "name": "UsingForDirective",
            "src": "292:24:52"
          },
          {
            "attributes": {
              "baseFunctions": [
                5311
              ],
              "documentation": null,
              "functionSelector": "32ef8314",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "swap",
              "scope": 6406,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 6286,
                "name": "OverrideSpecifier",
                "src": "417:8:52"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "input",
                      "overrides": null,
                      "scope": 6343,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 6277,
                        "name": "ElementaryTypeName",
                        "src": "336:7:52"
                      }
                    ],
                    "id": 6278,
                    "name": "VariableDeclaration",
                    "src": "336:13:52"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "output",
                      "overrides": null,
                      "scope": 6343,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 6279,
                        "name": "ElementaryTypeName",
                        "src": "353:7:52"
                      }
                    ],
                    "id": 6280,
                    "name": "VariableDeclaration",
                    "src": "353:14:52"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 6343,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 6281,
                        "name": "ElementaryTypeName",
                        "src": "371:7:52"
                      }
                    ],
                    "id": 6282,
                    "name": "VariableDeclaration",
                    "src": "371:10:52"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "overrides": null,
                      "scope": 6343,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 6283,
                        "name": "ElementaryTypeName",
                        "src": "385:5:52"
                      }
                    ],
                    "id": 6284,
                    "name": "VariableDeclaration",
                    "src": "385:19:52"
                  }
                ],
                "id": 6285,
                "name": "ParameterList",
                "src": "332:75:52"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 6287,
                "name": "ParameterList",
                "src": "426:0:52"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        6289
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "swapPoolAddr",
                          "overrides": null,
                          "scope": 6342,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 6288,
                            "name": "ElementaryTypeName",
                            "src": "430:7:52"
                          }
                        ],
                        "id": 6289,
                        "name": "VariableDeclaration",
                        "src": "430:20:52"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6360,
                              "type": "function (bytes memory) pure returns (address)",
                              "value": "parseData"
                            },
                            "id": 6290,
                            "name": "Identifier",
                            "src": "453:9:52"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6284,
                              "type": "bytes calldata",
                              "value": "data"
                            },
                            "id": 6291,
                            "name": "Identifier",
                            "src": "463:4:52"
                          }
                        ],
                        "id": 6292,
                        "name": "FunctionCall",
                        "src": "453:15:52"
                      }
                    ],
                    "id": 6293,
                    "name": "VariableDeclarationStatement",
                    "src": "430:38:52"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        6295
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "inputAmount",
                          "overrides": null,
                          "scope": 6342,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 6294,
                            "name": "ElementaryTypeName",
                            "src": "472:4:52"
                          }
                        ],
                        "id": 6295,
                        "name": "VariableDeclaration",
                        "src": "472:16:52"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "balanceOf",
                              "referencedDeclaration": 325,
                              "type": "function (address) view external returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "contract ERC20",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 725,
                                      "type": "type(contract ERC20)",
                                      "value": "ERC20"
                                    },
                                    "id": 6296,
                                    "name": "Identifier",
                                    "src": "491:5:52"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6278,
                                      "type": "address",
                                      "value": "input"
                                    },
                                    "id": 6297,
                                    "name": "Identifier",
                                    "src": "497:5:52"
                                  }
                                ],
                                "id": 6298,
                                "name": "FunctionCall",
                                "src": "491:12:52"
                              }
                            ],
                            "id": 6299,
                            "name": "MemberAccess",
                            "src": "491:22:52"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_PairOpenSumSwap_$6406",
                                      "typeString": "contract PairOpenSumSwap"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "type": null
                                    },
                                    "id": 6300,
                                    "name": "ElementaryTypeName",
                                    "src": "514:7:52"
                                  }
                                ],
                                "id": 6301,
                                "name": "ElementaryTypeNameExpression",
                                "src": "514:7:52"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -28,
                                  "type": "contract PairOpenSumSwap",
                                  "value": "this"
                                },
                                "id": 6302,
                                "name": "Identifier",
                                "src": "522:4:52"
                              }
                            ],
                            "id": 6303,
                            "name": "FunctionCall",
                            "src": "514:13:52"
                          }
                        ],
                        "id": 6304,
                        "name": "FunctionCall",
                        "src": "491:37:52"
                      }
                    ],
                    "id": 6305,
                    "name": "VariableDeclarationStatement",
                    "src": "472:56:52"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_6b19a92990b172d82b32c38e00a880f42afccd0a4cd0c9d86d08724cf4e02d3f",
                                  "typeString": "literal_string \"PairOpenSumSwap: approve failed!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 6306,
                            "name": "Identifier",
                            "src": "532:7:52"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "approve",
                                  "referencedDeclaration": 385,
                                  "type": "function (address,uint256) external returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract ERC20",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 725,
                                          "type": "type(contract ERC20)",
                                          "value": "ERC20"
                                        },
                                        "id": 6307,
                                        "name": "Identifier",
                                        "src": "544:5:52"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 6278,
                                          "type": "address",
                                          "value": "input"
                                        },
                                        "id": 6308,
                                        "name": "Identifier",
                                        "src": "550:5:52"
                                      }
                                    ],
                                    "id": 6309,
                                    "name": "FunctionCall",
                                    "src": "544:12:52"
                                  }
                                ],
                                "id": 6310,
                                "name": "MemberAccess",
                                "src": "544:20:52"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6289,
                                  "type": "address",
                                  "value": "swapPoolAddr"
                                },
                                "id": 6311,
                                "name": "Identifier",
                                "src": "565:12:52"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6295,
                                  "type": "uint256",
                                  "value": "inputAmount"
                                },
                                "id": 6312,
                                "name": "Identifier",
                                "src": "579:11:52"
                              }
                            ],
                            "id": 6313,
                            "name": "FunctionCall",
                            "src": "544:47:52"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "506169724f70656e53756d537761703a20617070726f7665206661696c656421",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"PairOpenSumSwap: approve failed!\"",
                              "value": "PairOpenSumSwap: approve failed!"
                            },
                            "id": 6314,
                            "name": "Literal",
                            "src": "596:34:52"
                          }
                        ],
                        "id": 6315,
                        "name": "FunctionCall",
                        "src": "532:99:52"
                      }
                    ],
                    "id": 6316,
                    "name": "ExpressionStatement",
                    "src": "532:99:52"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        6318
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "outputAmount",
                          "overrides": null,
                          "scope": 6342,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 6317,
                            "name": "ElementaryTypeName",
                            "src": "635:4:52"
                          }
                        ],
                        "id": 6318,
                        "name": "VariableDeclaration",
                        "src": "635:17:52"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "swap",
                              "referencedDeclaration": 1808,
                              "type": "function (address,address,uint256,uint256,uint256) external returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "contract IOpenSumSwap",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1809,
                                      "type": "type(contract IOpenSumSwap)",
                                      "value": "IOpenSumSwap"
                                    },
                                    "id": 6319,
                                    "name": "Identifier",
                                    "src": "655:12:52"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6289,
                                      "type": "address",
                                      "value": "swapPoolAddr"
                                    },
                                    "id": 6320,
                                    "name": "Identifier",
                                    "src": "668:12:52"
                                  }
                                ],
                                "id": 6321,
                                "name": "FunctionCall",
                                "src": "655:26:52"
                              }
                            ],
                            "id": 6322,
                            "name": "MemberAccess",
                            "src": "655:31:52"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6278,
                              "type": "address",
                              "value": "input"
                            },
                            "id": 6323,
                            "name": "Identifier",
                            "src": "691:5:52"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6280,
                              "type": "address",
                              "value": "output"
                            },
                            "id": 6324,
                            "name": "Identifier",
                            "src": "701:6:52"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6295,
                              "type": "uint256",
                              "value": "inputAmount"
                            },
                            "id": 6325,
                            "name": "Identifier",
                            "src": "712:11:52"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6295,
                              "type": "uint256",
                              "value": "inputAmount"
                            },
                            "id": 6326,
                            "name": "Identifier",
                            "src": "728:11:52"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "timestamp",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -4,
                                  "type": "block",
                                  "value": "block"
                                },
                                "id": 6327,
                                "name": "Identifier",
                                "src": "744:5:52"
                              }
                            ],
                            "id": 6328,
                            "name": "MemberAccess",
                            "src": "744:15:52"
                          }
                        ],
                        "id": 6329,
                        "name": "FunctionCall",
                        "src": "655:105:52"
                      }
                    ],
                    "id": 6330,
                    "name": "VariableDeclarationStatement",
                    "src": "635:125:52"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_992fc87303901b212e9ab97da6aaa9fdee5a5d05b6812f7a66aeb87e6c04a884",
                                  "typeString": "literal_string \"PairOpenSumSwap: transfer failed!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 6331,
                            "name": "Identifier",
                            "src": "764:7:52"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "transfer",
                                  "referencedDeclaration": 346,
                                  "type": "function (address,uint256) external returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract ERC20",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 725,
                                          "type": "type(contract ERC20)",
                                          "value": "ERC20"
                                        },
                                        "id": 6332,
                                        "name": "Identifier",
                                        "src": "776:5:52"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 6280,
                                          "type": "address",
                                          "value": "output"
                                        },
                                        "id": 6333,
                                        "name": "Identifier",
                                        "src": "782:6:52"
                                      }
                                    ],
                                    "id": 6334,
                                    "name": "FunctionCall",
                                    "src": "776:13:52"
                                  }
                                ],
                                "id": 6335,
                                "name": "MemberAccess",
                                "src": "776:22:52"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6282,
                                  "type": "address",
                                  "value": "to"
                                },
                                "id": 6336,
                                "name": "Identifier",
                                "src": "799:2:52"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6318,
                                  "type": "uint256",
                                  "value": "outputAmount"
                                },
                                "id": 6337,
                                "name": "Identifier",
                                "src": "803:12:52"
                              }
                            ],
                            "id": 6338,
                            "name": "FunctionCall",
                            "src": "776:40:52"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "506169724f70656e53756d537761703a207472616e73666572206661696c656421",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"PairOpenSumSwap: transfer failed!\"",
                              "value": "PairOpenSumSwap: transfer failed!"
                            },
                            "id": 6339,
                            "name": "Literal",
                            "src": "821:35:52"
                          }
                        ],
                        "id": 6340,
                        "name": "FunctionCall",
                        "src": "764:93:52"
                      }
                    ],
                    "id": 6341,
                    "name": "ExpressionStatement",
                    "src": "764:93:52"
                  }
                ],
                "id": 6342,
                "name": "Block",
                "src": "426:435:52"
              }
            ],
            "id": 6343,
            "name": "FunctionDefinition",
            "src": "319:542:52"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "parseData",
              "overrides": null,
              "scope": 6406,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "overrides": null,
                      "scope": 6360,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 6344,
                        "name": "ElementaryTypeName",
                        "src": "883:5:52"
                      }
                    ],
                    "id": 6345,
                    "name": "VariableDeclaration",
                    "src": "883:17:52"
                  }
                ],
                "id": 6346,
                "name": "ParameterList",
                "src": "882:19:52"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "swapPoolAddr",
                      "overrides": null,
                      "scope": 6360,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 6347,
                        "name": "ElementaryTypeName",
                        "src": "924:7:52"
                      }
                    ],
                    "id": 6348,
                    "name": "VariableDeclaration",
                    "src": "924:20:52"
                  }
                ],
                "id": 6349,
                "name": "ParameterList",
                "src": "923:22:52"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_7c0273f693d362a9f10ec0424f6c32bffa1dcf1084e58717df3feb6c71183507",
                                  "typeString": "literal_string \"PairOpenSumSwap: invalid data!\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 6350,
                            "name": "Identifier",
                            "src": "950:7:52"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6345,
                                      "type": "bytes memory",
                                      "value": "data"
                                    },
                                    "id": 6351,
                                    "name": "Identifier",
                                    "src": "958:4:52"
                                  }
                                ],
                                "id": 6352,
                                "name": "MemberAccess",
                                "src": "958:11:52"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "3230",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 20",
                                  "value": "20"
                                },
                                "id": 6353,
                                "name": "Literal",
                                "src": "973:2:52"
                              }
                            ],
                            "id": 6354,
                            "name": "BinaryOperation",
                            "src": "958:17:52"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "506169724f70656e53756d537761703a20696e76616c6964206461746121",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"PairOpenSumSwap: invalid data!\"",
                              "value": "PairOpenSumSwap: invalid data!"
                            },
                            "id": 6355,
                            "name": "Literal",
                            "src": "977:32:52"
                          }
                        ],
                        "id": 6356,
                        "name": "FunctionCall",
                        "src": "950:60:52"
                      }
                    ],
                    "id": 6357,
                    "name": "ExpressionStatement",
                    "src": "950:60:52"
                  },
                  {
                    "attributes": {
                      "evmVersion": "istanbul",
                      "externalReferences": [
                        {
                          "declaration": 6345,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "1054:4:52",
                          "valueSize": 1
                        },
                        {
                          "declaration": 6348,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "1028:12:52",
                          "valueSize": 1
                        }
                      ],
                      "operations": "{\n    swapPoolAddr := mload(add(data, 20))\n}"
                    },
                    "children": [],
                    "id": 6358,
                    "name": "InlineAssembly",
                    "src": "1014:54:52"
                  }
                ],
                "id": 6359,
                "name": "Block",
                "src": "946:125:52"
              }
            ],
            "id": 6360,
            "name": "FunctionDefinition",
            "src": "864:207:52"
          },
          {
            "attributes": {
              "baseFunctions": [
                5324
              ],
              "documentation": null,
              "functionSelector": "7eace892",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getOutputAmount",
              "scope": 6406,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 6370,
                "name": "OverrideSpecifier",
                "src": "1180:8:52"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 6405,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 6361,
                        "name": "ElementaryTypeName",
                        "src": "1102:7:52"
                      }
                    ],
                    "id": 6362,
                    "name": "VariableDeclaration",
                    "src": "1102:7:52"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "output",
                      "overrides": null,
                      "scope": 6405,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 6363,
                        "name": "ElementaryTypeName",
                        "src": "1113:7:52"
                      }
                    ],
                    "id": 6364,
                    "name": "VariableDeclaration",
                    "src": "1113:14:52"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountIn",
                      "overrides": null,
                      "scope": 6405,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 6365,
                        "name": "ElementaryTypeName",
                        "src": "1131:4:52"
                      }
                    ],
                    "id": 6366,
                    "name": "VariableDeclaration",
                    "src": "1131:13:52"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "overrides": null,
                      "scope": 6405,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 6367,
                        "name": "ElementaryTypeName",
                        "src": "1148:5:52"
                      }
                    ],
                    "id": 6368,
                    "name": "VariableDeclaration",
                    "src": "1148:19:52"
                  }
                ],
                "id": 6369,
                "name": "ParameterList",
                "src": "1098:72:52"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountOut",
                      "overrides": null,
                      "scope": 6405,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 6371,
                        "name": "ElementaryTypeName",
                        "src": "1198:4:52"
                      }
                    ],
                    "id": 6372,
                    "name": "VariableDeclaration",
                    "src": "1198:14:52"
                  }
                ],
                "id": 6373,
                "name": "ParameterList",
                "src": "1197:16:52"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        6375
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "pool",
                          "overrides": null,
                          "scope": 6404,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract IOpenSumSwap",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "IOpenSumSwap",
                              "referencedDeclaration": 1809,
                              "type": "contract IOpenSumSwap"
                            },
                            "id": 6374,
                            "name": "UserDefinedTypeName",
                            "src": "1218:12:52"
                          }
                        ],
                        "id": 6375,
                        "name": "VariableDeclaration",
                        "src": "1218:17:52"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "contract IOpenSumSwap",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1809,
                              "type": "type(contract IOpenSumSwap)",
                              "value": "IOpenSumSwap"
                            },
                            "id": 6376,
                            "name": "Identifier",
                            "src": "1238:12:52"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6360,
                                  "type": "function (bytes memory) pure returns (address)",
                                  "value": "parseData"
                                },
                                "id": 6377,
                                "name": "Identifier",
                                "src": "1251:9:52"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6368,
                                  "type": "bytes calldata",
                                  "value": "data"
                                },
                                "id": 6378,
                                "name": "Identifier",
                                "src": "1261:4:52"
                              }
                            ],
                            "id": 6379,
                            "name": "FunctionCall",
                            "src": "1251:15:52"
                          }
                        ],
                        "id": 6380,
                        "name": "FunctionCall",
                        "src": "1238:29:52"
                      }
                    ],
                    "id": 6381,
                    "name": "VariableDeclarationStatement",
                    "src": "1218:49:52"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!",
                              "prefix": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "paused",
                                      "referencedDeclaration": 1780,
                                      "type": "function () view external returns (bool)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 6375,
                                          "type": "contract IOpenSumSwap",
                                          "value": "pool"
                                        },
                                        "id": 6382,
                                        "name": "Identifier",
                                        "src": "1330:4:52"
                                      }
                                    ],
                                    "id": 6383,
                                    "name": "MemberAccess",
                                    "src": "1330:11:52"
                                  }
                                ],
                                "id": 6384,
                                "name": "FunctionCall",
                                "src": "1330:13:52"
                              }
                            ],
                            "id": 6385,
                            "name": "UnaryOperation",
                            "src": "1329:14:52"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "balanceOf",
                                      "referencedDeclaration": 325,
                                      "type": "function (address) view external returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "contract ERC20",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 725,
                                              "type": "type(contract ERC20)",
                                              "value": "ERC20"
                                            },
                                            "id": 6386,
                                            "name": "Identifier",
                                            "src": "1347:5:52"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 6364,
                                              "type": "address",
                                              "value": "output"
                                            },
                                            "id": 6387,
                                            "name": "Identifier",
                                            "src": "1353:6:52"
                                          }
                                        ],
                                        "id": 6388,
                                        "name": "FunctionCall",
                                        "src": "1347:13:52"
                                      }
                                    ],
                                    "id": 6389,
                                    "name": "MemberAccess",
                                    "src": "1347:23:52"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "address",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_IOpenSumSwap_$1809",
                                              "typeString": "contract IOpenSumSwap"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "address",
                                              "type": null
                                            },
                                            "id": 6390,
                                            "name": "ElementaryTypeName",
                                            "src": "1371:7:52"
                                          }
                                        ],
                                        "id": 6391,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "1371:7:52"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 6375,
                                          "type": "contract IOpenSumSwap",
                                          "value": "pool"
                                        },
                                        "id": 6392,
                                        "name": "Identifier",
                                        "src": "1379:4:52"
                                      }
                                    ],
                                    "id": 6393,
                                    "name": "FunctionCall",
                                    "src": "1371:13:52"
                                  }
                                ],
                                "id": 6394,
                                "name": "FunctionCall",
                                "src": "1347:38:52"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6366,
                                  "type": "uint256",
                                  "value": "amountIn"
                                },
                                "id": 6395,
                                "name": "Identifier",
                                "src": "1389:8:52"
                              }
                            ],
                            "id": 6396,
                            "name": "BinaryOperation",
                            "src": "1347:50:52"
                          }
                        ],
                        "id": 6397,
                        "name": "BinaryOperation",
                        "src": "1329:68:52"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6372,
                                      "type": "uint256",
                                      "value": "amountOut"
                                    },
                                    "id": 6398,
                                    "name": "Identifier",
                                    "src": "1404:9:52"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6366,
                                      "type": "uint256",
                                      "value": "amountIn"
                                    },
                                    "id": 6399,
                                    "name": "Identifier",
                                    "src": "1416:8:52"
                                  }
                                ],
                                "id": 6400,
                                "name": "Assignment",
                                "src": "1404:20:52"
                              }
                            ],
                            "id": 6401,
                            "name": "ExpressionStatement",
                            "src": "1404:20:52"
                          }
                        ],
                        "id": 6402,
                        "name": "Block",
                        "src": "1399:30:52"
                      }
                    ],
                    "id": 6403,
                    "name": "IfStatement",
                    "src": "1325:104:52"
                  }
                ],
                "id": 6404,
                "name": "Block",
                "src": "1214:218:52"
              }
            ],
            "id": 6405,
            "name": "FunctionDefinition",
            "src": "1074:358:52"
          }
        ],
        "id": 6406,
        "name": "ContractDefinition",
        "src": "247:1187:52"
      }
    ],
    "id": 6407,
    "name": "SourceUnit",
    "src": "32:1403:52"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.8+commit.0bbfe453.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2025-02-07T17:50:42.836Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}