{
  "id": "133455b73e790d1e4aaf79385e0a0700",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.6.10",
  "solcLongVersion": "0.6.10+commit.00c0fcaf",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/protocol/integration/exchange/ZeroExApiAdapter.sol": {
        "content": "/*\n    Copyright 2021 Set Labs Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n    SPDX-License-Identifier: Apache License, Version 2.0\n*/\n\npragma solidity 0.6.10;\npragma experimental \"ABIEncoderV2\";\n\n/**\n * @title ZeroExApiAdapter\n * @author Set Protocol\n *\n * Exchange adapter for 0xAPI that returns data for swaps\n */\n\ncontract ZeroExApiAdapter {\n\n    struct RfqOrder {\n        address makerToken;\n        address takerToken;\n        uint128 makerAmount;\n        uint128 takerAmount;\n        address maker;\n        address taker;\n        address txOrigin;\n        bytes32 pool;\n        uint64 expiry;\n        uint256 salt;\n    }\n\n    struct Signature {\n        uint8 signatureType;\n        uint8 v;\n        bytes32 r;\n        bytes32 s;\n    }\n\n    /* ============ State Variables ============ */\n\n    // ETH pseudo-token address used by 0x API.\n    address private constant ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\n\n    // Byte size of Uniswap V3 encoded path addresses and pool fees\n    uint256 private constant UNISWAP_V3_PATH_ADDRESS_SIZE = 20;\n    uint256 private constant UNISWAP_V3_PATH_FEE_SIZE = 3;\n    // Minimum byte size of a single hop Uniswap V3 encoded path (token address + fee + token adress)\n    uint256 private constant UNISWAP_V3_SINGLE_HOP_PATH_SIZE = UNISWAP_V3_PATH_ADDRESS_SIZE + UNISWAP_V3_PATH_FEE_SIZE + UNISWAP_V3_PATH_ADDRESS_SIZE;\n    // Byte size of one hop in the Uniswap V3 encoded path (token address + fee)\n    uint256 private constant UNISWAP_V3_SINGLE_HOP_OFFSET_SIZE = UNISWAP_V3_PATH_ADDRESS_SIZE + UNISWAP_V3_PATH_FEE_SIZE;\n\n    // Address of the deployed ZeroEx contract.\n    address public immutable zeroExAddress;\n    // Address of the WETH9 contract.\n    address public immutable wethAddress;\n\n    // Returns the address to approve source tokens to for trading. This is the TokenTaker address\n    address public immutable getSpender;\n\n    /* ============ constructor ============ */\n\n    constructor(address _zeroExAddress, address _wethAddress) public {\n        zeroExAddress = _zeroExAddress;\n        wethAddress = _wethAddress;\n        getSpender = _zeroExAddress;\n    }\n\n\n    /* ============ External Getter Functions ============ */\n\n    /**\n     * Return 0xAPI calldata which is already generated from 0xAPI\n     *\n     * @param  _sourceToken              Address of source token to be sold\n     * @param  _destinationToken         Address of destination token to buy\n     * @param  _destinationAddress       Address that assets should be transferred to\n     * @param  _sourceQuantity           Amount of source token to sell\n     * @param  _minDestinationQuantity   Min amount of destination token to buy\n     * @param  _data                     Arbitrage bytes containing trade call data\n     *\n     * @return address                   Target contract address\n     * @return uint256                   Call value\n     * @return bytes                     Trade calldata\n     */\n    function getTradeCalldata(\n        address _sourceToken,\n        address _destinationToken,\n        address _destinationAddress,\n        uint256 _sourceQuantity,\n        uint256 _minDestinationQuantity,\n        bytes calldata _data\n    )\n        external\n        view\n        returns (address, uint256, bytes memory)\n    {\n        // solium-disable security/no-inline-assembly\n        address inputToken;\n        address outputToken;\n        address recipient;\n        bool supportsRecipient;\n        uint256 inputTokenAmount;\n        uint256 minOutputTokenAmount;\n\n        {\n            require(_data.length >= 4, \"Invalid calldata\");\n            bytes4 selector;\n            assembly {\n                selector := and(\n                    // Read the first 4 bytes of the _data array from calldata.\n                    calldataload(add(36, calldataload(164))), // 164 = 5 * 32 + 4\n                    0xffffffff00000000000000000000000000000000000000000000000000000000\n                )\n            }\n\n            if (selector == 0x415565b0 || selector == 0x8182b61f) {\n                // transformERC20(), transformERC20Staging()\n                (inputToken, outputToken, inputTokenAmount, minOutputTokenAmount) =\n                    abi.decode(_data[4:], (address, address, uint256, uint256));\n            } else if (selector == 0xf7fcd384) {\n                // sellToLiquidityProvider()\n                (inputToken, outputToken, , recipient, inputTokenAmount, minOutputTokenAmount) =\n                    abi.decode(_data[4:], (address, address, address, address, uint256, uint256));\n                supportsRecipient = true;\n                if (recipient == address(0)) {\n                    recipient = _destinationAddress;\n                }\n            } else if (selector == 0xd9627aa4) {\n                // sellToUniswap()\n                address[] memory path;\n                (path, inputTokenAmount, minOutputTokenAmount) =\n                    abi.decode(_data[4:], (address[], uint256, uint256));\n                require(path.length > 1, \"Uniswap token path too short\");\n                inputToken = path[0];\n                outputToken = path[path.length - 1];\n            } else if (selector == 0xaa77476c) {\n                // fillRfqOrder()\n                RfqOrder memory order;\n                uint128 takerTokenFillAmount;\n                (order, , takerTokenFillAmount) =\n                    abi.decode(_data[4:], (RfqOrder, Signature, uint128));\n                inputTokenAmount = uint256(takerTokenFillAmount);\n                inputToken = order.takerToken;\n                outputToken = order.makerToken;\n                minOutputTokenAmount = getRfqOrderMakerFillAmount(order, inputTokenAmount);\n            } else if (selector == 0x75103cb9) {\n                // batchFillRfqOrders()\n                RfqOrder[] memory orders;\n                uint128[] memory takerTokenFillAmounts;\n                bool revertIfIncomplete;\n                (orders, , takerTokenFillAmounts, revertIfIncomplete) =\n                    abi.decode(_data[4:], (RfqOrder[], uint256, uint128[], bool));\n                require(orders.length > 0, \"Empty RFQ orders\");\n                require(revertIfIncomplete, \"batchFillRfqOrder must be all or nothing\");\n                inputToken = orders[0].takerToken;\n                outputToken = orders[0].makerToken;\n                for (uint256 i = 0; i < orders.length; ++i) {\n                    inputTokenAmount += uint256(takerTokenFillAmounts[i]);\n                    minOutputTokenAmount += getRfqOrderMakerFillAmount(orders[i], takerTokenFillAmounts[i]);\n                }\n            } else if (selector == 0x6af479b2) {\n                // sellTokenForTokenToUniswapV3()\n                bytes memory encodedPath;\n                (encodedPath, inputTokenAmount, minOutputTokenAmount, recipient) =\n                    abi.decode(_data[4:], (bytes, uint256, uint256, address));\n                supportsRecipient = true;\n                if (recipient == address(0)) {\n                    recipient = _destinationAddress;\n                }\n                (inputToken, outputToken) = _decodeTokensFromUniswapV3EncodedPath(encodedPath);\n            } else if (selector == 0x7a1eb1b9) {\n                // multiplexBatchSellTokenForToken()\n                (inputToken, outputToken, , inputTokenAmount, minOutputTokenAmount) =\n                \tabi.decode(_data[4:], (address, address, uint256, uint256, uint256));\n            } else if (selector == 0x0f3b31b2) {\n                // multiplexMultiHopSellTokenForToken()\n                address[] memory tokens;\n                (tokens, , inputTokenAmount, minOutputTokenAmount) =\n                \tabi.decode(_data[4:], (address[], uint256, uint256, uint256));\n                require(tokens.length > 1, \"Multihop token path too short\");\n                inputToken = tokens[0];\n                outputToken = tokens[tokens.length - 1];\n            } else {\n                revert(\"Unsupported 0xAPI function selector\");\n            }\n        }\n\n        require(inputToken != ETH_ADDRESS && outputToken != ETH_ADDRESS, \"ETH not supported\");\n        require(inputToken == _sourceToken, \"Mismatched input token\");\n        require(outputToken == _destinationToken, \"Mismatched output token\");\n        require(!supportsRecipient || recipient == _destinationAddress, \"Mismatched recipient\");\n        require(inputTokenAmount == _sourceQuantity, \"Mismatched input token quantity\");\n        require(minOutputTokenAmount >= _minDestinationQuantity, \"Mismatched output token quantity\");\n\n        return (\n            zeroExAddress,\n            // Note: Does not account for limit order protocol fees.\n            0,\n            _data\n        );\n    }\n\n    function getRfqOrderMakerFillAmount(RfqOrder memory order, uint256 takerTokenFillAmount)\n        private\n        pure\n        returns (uint256 makerTokenFillAmount)\n    {\n        if (order.takerAmount == 0 || order.makerAmount == 0 || takerTokenFillAmount == 0) {\n            return 0;\n        }\n        return uint256(order.makerAmount * takerTokenFillAmount / order.takerAmount);\n    }\n\n    // Decode input and output tokens from an arbitrary length encoded Uniswap V3 path\n    function _decodeTokensFromUniswapV3EncodedPath(bytes memory encodedPath)\n        private\n        pure\n        returns (\n            address inputToken,\n            address outputToken\n        )\n    {\n        require(encodedPath.length >= UNISWAP_V3_SINGLE_HOP_PATH_SIZE, \"UniswapV3 token path too short\");\n\n        // UniswapV3 paths are packed encoded as (address(token0), uint24(fee), address(token1), [...])\n        // We want the first and last token.\n        uint256 numHops = (encodedPath.length - UNISWAP_V3_PATH_ADDRESS_SIZE)/UNISWAP_V3_SINGLE_HOP_OFFSET_SIZE;\n        uint256 lastTokenOffset = numHops * UNISWAP_V3_SINGLE_HOP_OFFSET_SIZE;\n        assembly {\n            let p := add(encodedPath, 32)\n            inputToken := shr(96, mload(p))\n            p := add(p, lastTokenOffset)\n            outputToken := shr(96, mload(p))\n        }\n    }\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "contracts": {
      "contracts/protocol/integration/exchange/ZeroExApiAdapter.sol": {
        "ZeroExApiAdapter": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_zeroExAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_wethAddress",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "getSpender",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_sourceToken",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_destinationToken",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_destinationAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_sourceQuantity",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_minDestinationQuantity",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "_data",
                  "type": "bytes"
                }
              ],
              "name": "getTradeCalldata",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "wethAddress",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "zeroExAddress",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60e060405234801561001057600080fd5b506040516113aa3803806113aa83398101604081905261002f91610056565b6001600160601b0319606092831b811660808190529190921b90911660a05260c0526100a7565b60008060408385031215610068578182fd5b82516100738161008f565b60208401519092506100848161008f565b809150509250929050565b6001600160a01b03811681146100a457600080fd5b50565b60805160601c60a05160601c60c05160601c6112cc6100de6000398060c752508060eb52508060a352806106bd52506112cc6000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80632658b4ad14610051578063334fc2891461006f5780634f0e0ef314610077578063e171fcab1461007f575b600080fd5b6100596100a1565b6040516100669190610ec0565b60405180910390f35b6100596100c5565b6100596100e9565b61009261008d366004610b4c565b61010d565b60405161006693929190610ed4565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080606081808080808060048a10156101425760405162461bcd60e51b815260040161013990611110565b60405180910390fd5b602460a43501356001600160e01b031916630415565b60e41b8114806101785750638182b61f60e01b6001600160e01b03198216145b156101a65761018a8b6004818f611235565b8101906101979190610ab7565b92995090975093509150610579565b633dff34e160e21b6001600160e01b031982161415610203576101cc8b6004818f611235565b8101906101d99190610a4a565b949b50929950975060019650909450909250506001600160a01b0385166101fe578e94505b610579565b6336589ea960e21b6001600160e01b03198216141561029e5760608c8c600490809261023193929190611235565b81019061023e9190610c05565b825191965094509091506001106102675760405162461bcd60e51b815260040161013990610f68565b8060008151811061027457fe5b602002602001015197508060018251038151811061028e57fe5b6020026020010151965050610579565b632a9dd1db60e21b6001600160e01b031982161415610314576102bf6107f6565b60008d8d60049080926102d493929190611235565b8101906102e19190610e2c565b60208301518351909c509a506001600160801b038116975091935090915061030b90508286610737565b93505050610579565b6375103cb960e01b6001600160e01b0319821614156104475760608060008e8e600490809261034593929190611235565b8101906103529190610ca3565b83519396509094509250506103795760405162461bcd60e51b815260040161013990610f3e565b806103965760405162461bcd60e51b81526004016101399061116f565b826000815181106103a357fe5b6020026020010151602001519950826000815181106103be57fe5b602090810291909101015151985060005b835181101561043e578281815181106103e457fe5b60200260200101516001600160801b03168701965061043284828151811061040857fe5b602002602001015184838151811061041c57fe5b60200260200101516001600160801b0316610737565b909501946001016103cf565b50505050610579565b63357a3cd960e11b6001600160e01b0319821614156104b65760608c8c600490809261047593929190611235565b8101906104829190610d86565b985060019750909550935090506001600160a01b0386166104a1578f95505b6104aa816107a5565b90985096506105799050565b637a1eb1b960e01b6001600160e01b0319821614156104fc576104dc8b6004818f611235565b8101906104e99190610afc565b939a509198509094509092506105799050565b63079d98d960e11b6001600160e01b0319821614156105615760608c8c600490809261052a93929190611235565b8101906105379190610c51565b83519197509550919250506001106102675760405162461bcd60e51b815260040161013990611047565b60405162461bcd60e51b815260040161013990610fcd565b506001600160a01b03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105c457506001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b6105e05760405162461bcd60e51b8152600401610139906110ae565b8f6001600160a01b0316866001600160a01b0316146106115760405162461bcd60e51b81526004016101399061107e565b8e6001600160a01b0316856001600160a01b0316146106425760405162461bcd60e51b8152600401610139906110d9565b82158061066057508d6001600160a01b0316846001600160a01b0316145b61067c5760405162461bcd60e51b815260040161013990610f9f565b8c821461069b5760405162461bcd60e51b8152600401610139906111b7565b8b8110156106bb5760405162461bcd60e51b81526004016101399061113a565b7f000000000000000000000000000000000000000000000000000000000000000060008c8c82925081818080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250969f50949d50909b5050505050505050505050509750975097945050505050565b600082606001516001600160801b031660001480610760575060408301516001600160801b0316155b80610769575081155b156107765750600061079f565b82606001516001600160801b03168284604001516001600160801b0316028161079b57fe5b0490505b92915050565b80516000908190602b11156107cc5760405162461bcd60e51b815260040161013990611010565b50508051602080830151601760131990930183900490920290920190910151606091821c92911c90565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081019190915290565b803561079f81611269565b600082601f830112610865578081fd5b813561087861087382611215565b6111ee565b81815291506020808301908481018184028601820187101561089957600080fd5b60005b848110156108c15781356108af81611269565b8452928201929082019060010161089c565b505050505092915050565b600082601f8301126108dc578081fd5b81356108ea61087382611215565b81815291506020808301908481018184028601820187101561090b57600080fd5b60005b848110156108c157813561092181611281565b8452928201929082019060010161090e565b8035801515811461079f57600080fd5b6000610140808385031215610956578182fd5b61095f816111ee565b91505061096c838361084a565b815261097b836020840161084a565b602082015261098d8360408401610a0a565b604082015261099f8360608401610a0a565b60608201526109b1836080840161084a565b60808201526109c38360a0840161084a565b60a08201526109d58360c0840161084a565b60c082015260e082013560e08201526101006109f384828501610a21565b818301525061012080830135818301525092915050565b80356001600160801b038116811461079f57600080fd5b803567ffffffffffffffff8116811461079f57600080fd5b803560ff8116811461079f57600080fd5b60008060008060008060c08789031215610a62578182fd5b8635610a6d81611269565b95506020870135610a7d81611269565b94506040870135610a8d81611269565b93506060870135610a9d81611269565b9598949750929560808101359460a0909101359350915050565b60008060008060808587031215610acc578384fd5b8435610ad781611269565b93506020850135610ae781611269565b93969395505050506040820135916060013590565b600080600080600060a08688031215610b13578081fd5b8535610b1e81611269565b94506020860135610b2e81611269565b94979496505050506040830135926060810135926080909101359150565b600080600080600080600060c0888a031215610b66578485fd5b8735610b7181611269565b96506020880135610b8181611269565b95506040880135610b9181611269565b9450606088013593506080880135925060a088013567ffffffffffffffff80821115610bbb578283fd5b818a018b601f820112610bcc578384fd5b8035925081831115610bdc578384fd5b8b6020848301011115610bed578384fd5b60208101945050508091505092959891949750929550565b600080600060608486031215610c19578081fd5b833567ffffffffffffffff811115610c2f578182fd5b610c3b86828701610855565b9660208601359650604090950135949350505050565b60008060008060808587031215610c66578182fd5b843567ffffffffffffffff811115610c7c578283fd5b610c8887828801610855565b97602087013597506040870135966060013595509350505050565b60008060008060808587031215610cb8578182fd5b843567ffffffffffffffff80821115610ccf578384fd5b81870188601f820112610ce0578485fd5b80359250610cf061087384611215565b80848252602080830192508084016101408d83828a028801011115610d1357898afd5b8995505b87861015610d3f57610d298e83610943565b8552600195909501949382019390810190610d17565b509199508a013597505050604088013592505080821115610d5e578384fd5b50610d6b878288016108cc565b925050610d7b8660608701610933565b905092959194509250565b60008060008060808587031215610d9b578182fd5b843567ffffffffffffffff80821115610db2578384fd5b81870188601f820112610dc3578485fd5b8035925081831115610dd3578485fd5b610de6601f8401601f19166020016111ee565b9150828252886020848301011115610dfc578485fd5b610e0d83602084016020840161125d565b509450506020850135925060408501359150610d7b866060870161084a565b60008060008385036101e0811215610e42578182fd5b610e4c8686610943565b9350608061013f1982011215610e60578182fd5b50610e6b60806111ee565b610e79866101408701610a39565b8152610e89866101608701610a39565b602082015261018085013560408201526101a0850135606082015291506101c0840135610eb581611281565b809150509250925092565b6001600160a01b0391909116815260200190565b600060018060a01b038516825260208481840152606060408401528351806060850152825b81811015610f1557858101830151858201608001528201610ef9565b81811115610f265783608083870101525b50601f01601f19169290920160800195945050505050565b60208082526010908201526f456d70747920524651206f726465727360801b604082015260600190565b6020808252601c908201527f556e697377617020746f6b656e207061746820746f6f2073686f727400000000604082015260600190565b602080825260149082015273135a5cdb585d18da1959081c9958da5c1a595b9d60621b604082015260600190565b60208082526023908201527f556e737570706f727465642030784150492066756e6374696f6e2073656c65636040820152623a37b960e91b606082015260800190565b6020808252601e908201527f556e6973776170563320746f6b656e207061746820746f6f2073686f72740000604082015260600190565b6020808252601d908201527f4d756c7469686f7020746f6b656e207061746820746f6f2073686f7274000000604082015260600190565b60208082526016908201527526b4b9b6b0ba31b432b21034b7383aba103a37b5b2b760511b604082015260600190565b602080825260119082015270115512081b9bdd081cdd5c1c1bdc9d1959607a1b604082015260600190565b60208082526017908201527f4d69736d617463686564206f757470757420746f6b656e000000000000000000604082015260600190565b60208082526010908201526f496e76616c69642063616c6c6461746160801b604082015260600190565b6020808252818101527f4d69736d617463686564206f757470757420746f6b656e207175616e74697479604082015260600190565b60208082526028908201527f626174636846696c6c5266714f72646572206d75737420626520616c6c206f72604082015267206e6f7468696e6760c01b606082015260800190565b6020808252601f908201527f4d69736d61746368656420696e70757420746f6b656e207175616e7469747900604082015260600190565b60405181810167ffffffffffffffff8111828210171561120d57600080fd5b604052919050565b600067ffffffffffffffff82111561122b578081fd5b5060209081020190565b60008085851115611244578182fd5b83861115611250578182fd5b5050820193919092039150565b82818337506000910152565b6001600160a01b038116811461127e57600080fd5b50565b6001600160801b038116811461127e57600080fdfea2646970667358221220a6ff3c43f21e07e3f930dab7c7d062d5a0e2d2f4c15015d2a7f87662f35963e164736f6c634300060a0033",
              "opcodes": "PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x13AA CODESIZE SUB DUP1 PUSH2 0x13AA DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x56 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP3 DUP4 SHL DUP2 AND PUSH1 0x80 DUP2 SWAP1 MSTORE SWAP2 SWAP1 SWAP3 SHL SWAP1 SWAP2 AND PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE PUSH2 0xA7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x68 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x73 DUP2 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x84 DUP2 PUSH2 0x8F JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH2 0x12CC PUSH2 0xDE PUSH1 0x0 CODECOPY DUP1 PUSH1 0xC7 MSTORE POP DUP1 PUSH1 0xEB MSTORE POP DUP1 PUSH1 0xA3 MSTORE DUP1 PUSH2 0x6BD MSTORE POP PUSH2 0x12CC PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2658B4AD EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x334FC289 EQ PUSH2 0x6F JUMPI DUP1 PUSH4 0x4F0E0EF3 EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0xE171FCAB EQ PUSH2 0x7F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0xA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0xEC0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x59 PUSH2 0xC5 JUMP JUMPDEST PUSH2 0x59 PUSH2 0xE9 JUMP JUMPDEST PUSH2 0x92 PUSH2 0x8D CALLDATASIZE PUSH1 0x4 PUSH2 0xB4C JUMP JUMPDEST PUSH2 0x10D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xED4 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP2 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH1 0x4 DUP11 LT ISZERO PUSH2 0x142 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x1110 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x24 PUSH1 0xA4 CALLDATALOAD ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH4 0x415565B PUSH1 0xE4 SHL DUP2 EQ DUP1 PUSH2 0x178 JUMPI POP PUSH4 0x8182B61F PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND EQ JUMPDEST ISZERO PUSH2 0x1A6 JUMPI PUSH2 0x18A DUP12 PUSH1 0x4 DUP2 DUP16 PUSH2 0x1235 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x197 SWAP2 SWAP1 PUSH2 0xAB7 JUMP JUMPDEST SWAP3 SWAP10 POP SWAP1 SWAP8 POP SWAP4 POP SWAP2 POP PUSH2 0x579 JUMP JUMPDEST PUSH4 0x3DFF34E1 PUSH1 0xE2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND EQ ISZERO PUSH2 0x203 JUMPI PUSH2 0x1CC DUP12 PUSH1 0x4 DUP2 DUP16 PUSH2 0x1235 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1D9 SWAP2 SWAP1 PUSH2 0xA4A JUMP JUMPDEST SWAP5 SWAP12 POP SWAP3 SWAP10 POP SWAP8 POP PUSH1 0x1 SWAP7 POP SWAP1 SWAP5 POP SWAP1 SWAP3 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH2 0x1FE JUMPI DUP15 SWAP5 POP JUMPDEST PUSH2 0x579 JUMP JUMPDEST PUSH4 0x36589EA9 PUSH1 0xE2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND EQ ISZERO PUSH2 0x29E JUMPI PUSH1 0x60 DUP13 DUP13 PUSH1 0x4 SWAP1 DUP1 SWAP3 PUSH2 0x231 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1235 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x23E SWAP2 SWAP1 PUSH2 0xC05 JUMP JUMPDEST DUP3 MLOAD SWAP2 SWAP7 POP SWAP5 POP SWAP1 SWAP2 POP PUSH1 0x1 LT PUSH2 0x267 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0xF68 JUMP JUMPDEST DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x274 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP8 POP DUP1 PUSH1 0x1 DUP3 MLOAD SUB DUP2 MLOAD DUP2 LT PUSH2 0x28E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP7 POP POP PUSH2 0x579 JUMP JUMPDEST PUSH4 0x2A9DD1DB PUSH1 0xE2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND EQ ISZERO PUSH2 0x314 JUMPI PUSH2 0x2BF PUSH2 0x7F6 JUMP JUMPDEST PUSH1 0x0 DUP14 DUP14 PUSH1 0x4 SWAP1 DUP1 SWAP3 PUSH2 0x2D4 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1235 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2E1 SWAP2 SWAP1 PUSH2 0xE2C JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MLOAD DUP4 MLOAD SWAP1 SWAP13 POP SWAP11 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND SWAP8 POP SWAP2 SWAP4 POP SWAP1 SWAP2 POP PUSH2 0x30B SWAP1 POP DUP3 DUP7 PUSH2 0x737 JUMP JUMPDEST SWAP4 POP POP POP PUSH2 0x579 JUMP JUMPDEST PUSH4 0x75103CB9 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND EQ ISZERO PUSH2 0x447 JUMPI PUSH1 0x60 DUP1 PUSH1 0x0 DUP15 DUP15 PUSH1 0x4 SWAP1 DUP1 SWAP3 PUSH2 0x345 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1235 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x352 SWAP2 SWAP1 PUSH2 0xCA3 JUMP JUMPDEST DUP4 MLOAD SWAP4 SWAP7 POP SWAP1 SWAP5 POP SWAP3 POP POP PUSH2 0x379 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0xF3E JUMP JUMPDEST DUP1 PUSH2 0x396 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x116F JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3A3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD SWAP10 POP DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3BE JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD MLOAD SWAP9 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x43E JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3E4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP8 ADD SWAP7 POP PUSH2 0x432 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x408 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x41C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x737 JUMP JUMPDEST SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 ADD PUSH2 0x3CF JUMP JUMPDEST POP POP POP POP PUSH2 0x579 JUMP JUMPDEST PUSH4 0x357A3CD9 PUSH1 0xE1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND EQ ISZERO PUSH2 0x4B6 JUMPI PUSH1 0x60 DUP13 DUP13 PUSH1 0x4 SWAP1 DUP1 SWAP3 PUSH2 0x475 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1235 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x482 SWAP2 SWAP1 PUSH2 0xD86 JUMP JUMPDEST SWAP9 POP PUSH1 0x1 SWAP8 POP SWAP1 SWAP6 POP SWAP4 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x4A1 JUMPI DUP16 SWAP6 POP JUMPDEST PUSH2 0x4AA DUP2 PUSH2 0x7A5 JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH2 0x579 SWAP1 POP JUMP JUMPDEST PUSH4 0x7A1EB1B9 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND EQ ISZERO PUSH2 0x4FC JUMPI PUSH2 0x4DC DUP12 PUSH1 0x4 DUP2 DUP16 PUSH2 0x1235 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x4E9 SWAP2 SWAP1 PUSH2 0xAFC JUMP JUMPDEST SWAP4 SWAP11 POP SWAP2 SWAP9 POP SWAP1 SWAP5 POP SWAP1 SWAP3 POP PUSH2 0x579 SWAP1 POP JUMP JUMPDEST PUSH4 0x79D98D9 PUSH1 0xE1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND EQ ISZERO PUSH2 0x561 JUMPI PUSH1 0x60 DUP13 DUP13 PUSH1 0x4 SWAP1 DUP1 SWAP3 PUSH2 0x52A SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1235 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x537 SWAP2 SWAP1 PUSH2 0xC51 JUMP JUMPDEST DUP4 MLOAD SWAP2 SWAP8 POP SWAP6 POP SWAP2 SWAP3 POP POP PUSH1 0x1 LT PUSH2 0x267 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x1047 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0xFCD JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ DUP1 ISZERO SWAP1 PUSH2 0x5C4 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO JUMPDEST PUSH2 0x5E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x10AE JUMP JUMPDEST DUP16 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x611 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x107E JUMP JUMPDEST DUP15 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x642 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x10D9 JUMP JUMPDEST DUP3 ISZERO DUP1 PUSH2 0x660 JUMPI POP DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x67C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0xF9F JUMP JUMPDEST DUP13 DUP3 EQ PUSH2 0x69B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x11B7 JUMP JUMPDEST DUP12 DUP2 LT ISZERO PUSH2 0x6BB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x113A JUMP JUMPDEST PUSH32 0x0 PUSH1 0x0 DUP13 DUP13 DUP3 SWAP3 POP DUP2 DUP2 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP7 SWAP16 POP SWAP5 SWAP14 POP SWAP1 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP SWAP8 POP SWAP8 POP SWAP8 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH1 0x0 EQ DUP1 PUSH2 0x760 JUMPI POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND ISZERO JUMPDEST DUP1 PUSH2 0x769 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x776 JUMPI POP PUSH1 0x0 PUSH2 0x79F JUMP JUMPDEST DUP3 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP3 DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND MUL DUP2 PUSH2 0x79B JUMPI INVALID JUMPDEST DIV SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x2B GT ISZERO PUSH2 0x7CC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x1010 JUMP JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x17 PUSH1 0x13 NOT SWAP1 SWAP4 ADD DUP4 SWAP1 DIV SWAP1 SWAP3 MUL SWAP1 SWAP3 ADD SWAP1 SWAP2 ADD MLOAD PUSH1 0x60 SWAP2 DUP3 SHR SWAP3 SWAP2 SHR SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x140 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x79F DUP2 PUSH2 0x1269 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x865 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x878 PUSH2 0x873 DUP3 PUSH2 0x1215 JUMP JUMPDEST PUSH2 0x11EE JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x899 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x8C1 JUMPI DUP2 CALLDATALOAD PUSH2 0x8AF DUP2 PUSH2 0x1269 JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x89C JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x8DC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x8EA PUSH2 0x873 DUP3 PUSH2 0x1215 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x90B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x8C1 JUMPI DUP2 CALLDATALOAD PUSH2 0x921 DUP2 PUSH2 0x1281 JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x90E JUMP JUMPDEST DUP1 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x79F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x140 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x956 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x95F DUP2 PUSH2 0x11EE JUMP JUMPDEST SWAP2 POP POP PUSH2 0x96C DUP4 DUP4 PUSH2 0x84A JUMP JUMPDEST DUP2 MSTORE PUSH2 0x97B DUP4 PUSH1 0x20 DUP5 ADD PUSH2 0x84A JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x98D DUP4 PUSH1 0x40 DUP5 ADD PUSH2 0xA0A JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x99F DUP4 PUSH1 0x60 DUP5 ADD PUSH2 0xA0A JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x9B1 DUP4 PUSH1 0x80 DUP5 ADD PUSH2 0x84A JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x9C3 DUP4 PUSH1 0xA0 DUP5 ADD PUSH2 0x84A JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x9D5 DUP4 PUSH1 0xC0 DUP5 ADD PUSH2 0x84A JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 DUP3 ADD CALLDATALOAD PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x9F3 DUP5 DUP3 DUP6 ADD PUSH2 0xA21 JUMP JUMPDEST DUP2 DUP4 ADD MSTORE POP PUSH2 0x120 DUP1 DUP4 ADD CALLDATALOAD DUP2 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x79F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x79F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x79F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0xA62 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0xA6D DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0xA7D DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0xA8D DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0xA9D DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xACC JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0xAD7 DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0xAE7 DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xB13 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0xB1E DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0xB2E DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xC0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0xB66 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0xB71 DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0xB81 DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0xB91 DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xBBB JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP11 ADD DUP12 PUSH1 0x1F DUP3 ADD SLT PUSH2 0xBCC JUMPI DUP4 DUP5 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0xBDC JUMPI DUP4 DUP5 REVERT JUMPDEST DUP12 PUSH1 0x20 DUP5 DUP4 ADD ADD GT ISZERO PUSH2 0xBED JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD SWAP5 POP POP POP DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xC19 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC2F JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xC3B DUP7 DUP3 DUP8 ADD PUSH2 0x855 JUMP JUMPDEST SWAP7 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 SWAP1 SWAP6 ADD CALLDATALOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xC66 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC7C JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0xC88 DUP8 DUP3 DUP9 ADD PUSH2 0x855 JUMP JUMPDEST SWAP8 PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP8 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP7 PUSH1 0x60 ADD CALLDATALOAD SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xCB8 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xCCF JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP8 ADD DUP9 PUSH1 0x1F DUP3 ADD SLT PUSH2 0xCE0 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP PUSH2 0xCF0 PUSH2 0x873 DUP5 PUSH2 0x1215 JUMP JUMPDEST DUP1 DUP5 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP3 POP DUP1 DUP5 ADD PUSH2 0x140 DUP14 DUP4 DUP3 DUP11 MUL DUP9 ADD ADD GT ISZERO PUSH2 0xD13 JUMPI DUP10 DUP11 REVERT JUMPDEST DUP10 SWAP6 POP JUMPDEST DUP8 DUP7 LT ISZERO PUSH2 0xD3F JUMPI PUSH2 0xD29 DUP15 DUP4 PUSH2 0x943 JUMP JUMPDEST DUP6 MSTORE PUSH1 0x1 SWAP6 SWAP1 SWAP6 ADD SWAP5 SWAP4 DUP3 ADD SWAP4 SWAP1 DUP2 ADD SWAP1 PUSH2 0xD17 JUMP JUMPDEST POP SWAP2 SWAP10 POP DUP11 ADD CALLDATALOAD SWAP8 POP POP POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP3 POP POP DUP1 DUP3 GT ISZERO PUSH2 0xD5E JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0xD6B DUP8 DUP3 DUP9 ADD PUSH2 0x8CC JUMP JUMPDEST SWAP3 POP POP PUSH2 0xD7B DUP7 PUSH1 0x60 DUP8 ADD PUSH2 0x933 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xD9B JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xDB2 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP8 ADD DUP9 PUSH1 0x1F DUP3 ADD SLT PUSH2 0xDC3 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0xDD3 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xDE6 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x11EE JUMP JUMPDEST SWAP2 POP DUP3 DUP3 MSTORE DUP9 PUSH1 0x20 DUP5 DUP4 ADD ADD GT ISZERO PUSH2 0xDFC JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xE0D DUP4 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD PUSH2 0x125D JUMP JUMPDEST POP SWAP5 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH2 0xD7B DUP7 PUSH1 0x60 DUP8 ADD PUSH2 0x84A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH2 0x1E0 DUP2 SLT ISZERO PUSH2 0xE42 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xE4C DUP7 DUP7 PUSH2 0x943 JUMP JUMPDEST SWAP4 POP PUSH1 0x80 PUSH2 0x13F NOT DUP3 ADD SLT ISZERO PUSH2 0xE60 JUMPI DUP2 DUP3 REVERT JUMPDEST POP PUSH2 0xE6B PUSH1 0x80 PUSH2 0x11EE JUMP JUMPDEST PUSH2 0xE79 DUP7 PUSH2 0x140 DUP8 ADD PUSH2 0xA39 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xE89 DUP7 PUSH2 0x160 DUP8 ADD PUSH2 0xA39 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x180 DUP6 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x1A0 DUP6 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x1C0 DUP5 ADD CALLDATALOAD PUSH2 0xEB5 DUP2 PUSH2 0x1281 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 AND DUP3 MSTORE PUSH1 0x20 DUP5 DUP2 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 PUSH1 0x60 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xF15 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x80 ADD MSTORE DUP3 ADD PUSH2 0xEF9 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xF26 JUMPI DUP4 PUSH1 0x80 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x80 ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH16 0x456D70747920524651206F7264657273 PUSH1 0x80 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x556E697377617020746F6B656E207061746820746F6F2073686F727400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x14 SWAP1 DUP3 ADD MSTORE PUSH20 0x135A5CDB585D18DA1959081C9958DA5C1A595B9D PUSH1 0x62 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x23 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E737570706F727465642030784150492066756E6374696F6E2073656C6563 PUSH1 0x40 DUP3 ADD MSTORE PUSH3 0x3A37B9 PUSH1 0xE9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x556E6973776170563320746F6B656E207061746820746F6F2073686F72740000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x4D756C7469686F7020746F6B656E207061746820746F6F2073686F7274000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH22 0x26B4B9B6B0BA31B432B21034B7383ABA103A37B5B2B7 PUSH1 0x51 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x115512081B9BDD081CDD5C1C1BDC9D1959 PUSH1 0x7A SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x17 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D69736D617463686564206F757470757420746F6B656E000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH16 0x496E76616C69642063616C6C64617461 PUSH1 0x80 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4D69736D617463686564206F757470757420746F6B656E207175616E74697479 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x28 SWAP1 DUP3 ADD MSTORE PUSH32 0x626174636846696C6C5266714F72646572206D75737420626520616C6C206F72 PUSH1 0x40 DUP3 ADD MSTORE PUSH8 0x206E6F7468696E67 PUSH1 0xC0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x4D69736D61746368656420696E70757420746F6B656E207175616E7469747900 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x120D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x122B JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 GT ISZERO PUSH2 0x1244 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP4 DUP7 GT ISZERO PUSH2 0x1250 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP3 ADD SWAP4 SWAP2 SWAP1 SWAP3 SUB SWAP2 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x127E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x127E JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA6 SELFDESTRUCT EXTCODECOPY NUMBER CALLCODE 0x1E SMOD 0xE3 0xF9 ADDRESS 0xDA 0xB7 0xC7 0xD0 PUSH3 0xD5A0E2 0xD2 DELEGATECALL 0xC1 POP ISZERO 0xD2 0xA7 0xF8 PUSH23 0x62F35963E164736F6C634300060A003300000000000000 ",
              "sourceMap": "837:9701:0:-:0;;;2466:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2541:30:0;;;;;;;;;;2581:26;;;;;;;;;2617:27;;837:9701;;146:399:-1;;;278:2;266:9;257:7;253:23;249:32;246:2;;;-1:-1;;284:12;246:2;89:6;83:13;101:33;128:5;101:33;;;447:2;497:22;;83:13;336:74;;-1:-1;101:33;83:13;101:33;;;455:74;;;;240:305;;;;;;778:117;-1:-1;;;;;712:54;;837:35;;827:2;;886:1;;876:12;827:2;821:74;;;837:9701:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "56": [
                  {
                    "length": 32,
                    "start": 163
                  },
                  {
                    "length": 32,
                    "start": 1725
                  }
                ],
                "58": [
                  {
                    "length": 32,
                    "start": 235
                  }
                ],
                "60": [
                  {
                    "length": 32,
                    "start": 199
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506004361061004c5760003560e01c80632658b4ad14610051578063334fc2891461006f5780634f0e0ef314610077578063e171fcab1461007f575b600080fd5b6100596100a1565b6040516100669190610ec0565b60405180910390f35b6100596100c5565b6100596100e9565b61009261008d366004610b4c565b61010d565b60405161006693929190610ed4565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080606081808080808060048a10156101425760405162461bcd60e51b815260040161013990611110565b60405180910390fd5b602460a43501356001600160e01b031916630415565b60e41b8114806101785750638182b61f60e01b6001600160e01b03198216145b156101a65761018a8b6004818f611235565b8101906101979190610ab7565b92995090975093509150610579565b633dff34e160e21b6001600160e01b031982161415610203576101cc8b6004818f611235565b8101906101d99190610a4a565b949b50929950975060019650909450909250506001600160a01b0385166101fe578e94505b610579565b6336589ea960e21b6001600160e01b03198216141561029e5760608c8c600490809261023193929190611235565b81019061023e9190610c05565b825191965094509091506001106102675760405162461bcd60e51b815260040161013990610f68565b8060008151811061027457fe5b602002602001015197508060018251038151811061028e57fe5b6020026020010151965050610579565b632a9dd1db60e21b6001600160e01b031982161415610314576102bf6107f6565b60008d8d60049080926102d493929190611235565b8101906102e19190610e2c565b60208301518351909c509a506001600160801b038116975091935090915061030b90508286610737565b93505050610579565b6375103cb960e01b6001600160e01b0319821614156104475760608060008e8e600490809261034593929190611235565b8101906103529190610ca3565b83519396509094509250506103795760405162461bcd60e51b815260040161013990610f3e565b806103965760405162461bcd60e51b81526004016101399061116f565b826000815181106103a357fe5b6020026020010151602001519950826000815181106103be57fe5b602090810291909101015151985060005b835181101561043e578281815181106103e457fe5b60200260200101516001600160801b03168701965061043284828151811061040857fe5b602002602001015184838151811061041c57fe5b60200260200101516001600160801b0316610737565b909501946001016103cf565b50505050610579565b63357a3cd960e11b6001600160e01b0319821614156104b65760608c8c600490809261047593929190611235565b8101906104829190610d86565b985060019750909550935090506001600160a01b0386166104a1578f95505b6104aa816107a5565b90985096506105799050565b637a1eb1b960e01b6001600160e01b0319821614156104fc576104dc8b6004818f611235565b8101906104e99190610afc565b939a509198509094509092506105799050565b63079d98d960e11b6001600160e01b0319821614156105615760608c8c600490809261052a93929190611235565b8101906105379190610c51565b83519197509550919250506001106102675760405162461bcd60e51b815260040161013990611047565b60405162461bcd60e51b815260040161013990610fcd565b506001600160a01b03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105c457506001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b6105e05760405162461bcd60e51b8152600401610139906110ae565b8f6001600160a01b0316866001600160a01b0316146106115760405162461bcd60e51b81526004016101399061107e565b8e6001600160a01b0316856001600160a01b0316146106425760405162461bcd60e51b8152600401610139906110d9565b82158061066057508d6001600160a01b0316846001600160a01b0316145b61067c5760405162461bcd60e51b815260040161013990610f9f565b8c821461069b5760405162461bcd60e51b8152600401610139906111b7565b8b8110156106bb5760405162461bcd60e51b81526004016101399061113a565b7f000000000000000000000000000000000000000000000000000000000000000060008c8c82925081818080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250969f50949d50909b5050505050505050505050509750975097945050505050565b600082606001516001600160801b031660001480610760575060408301516001600160801b0316155b80610769575081155b156107765750600061079f565b82606001516001600160801b03168284604001516001600160801b0316028161079b57fe5b0490505b92915050565b80516000908190602b11156107cc5760405162461bcd60e51b815260040161013990611010565b50508051602080830151601760131990930183900490920290920190910151606091821c92911c90565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081019190915290565b803561079f81611269565b600082601f830112610865578081fd5b813561087861087382611215565b6111ee565b81815291506020808301908481018184028601820187101561089957600080fd5b60005b848110156108c15781356108af81611269565b8452928201929082019060010161089c565b505050505092915050565b600082601f8301126108dc578081fd5b81356108ea61087382611215565b81815291506020808301908481018184028601820187101561090b57600080fd5b60005b848110156108c157813561092181611281565b8452928201929082019060010161090e565b8035801515811461079f57600080fd5b6000610140808385031215610956578182fd5b61095f816111ee565b91505061096c838361084a565b815261097b836020840161084a565b602082015261098d8360408401610a0a565b604082015261099f8360608401610a0a565b60608201526109b1836080840161084a565b60808201526109c38360a0840161084a565b60a08201526109d58360c0840161084a565b60c082015260e082013560e08201526101006109f384828501610a21565b818301525061012080830135818301525092915050565b80356001600160801b038116811461079f57600080fd5b803567ffffffffffffffff8116811461079f57600080fd5b803560ff8116811461079f57600080fd5b60008060008060008060c08789031215610a62578182fd5b8635610a6d81611269565b95506020870135610a7d81611269565b94506040870135610a8d81611269565b93506060870135610a9d81611269565b9598949750929560808101359460a0909101359350915050565b60008060008060808587031215610acc578384fd5b8435610ad781611269565b93506020850135610ae781611269565b93969395505050506040820135916060013590565b600080600080600060a08688031215610b13578081fd5b8535610b1e81611269565b94506020860135610b2e81611269565b94979496505050506040830135926060810135926080909101359150565b600080600080600080600060c0888a031215610b66578485fd5b8735610b7181611269565b96506020880135610b8181611269565b95506040880135610b9181611269565b9450606088013593506080880135925060a088013567ffffffffffffffff80821115610bbb578283fd5b818a018b601f820112610bcc578384fd5b8035925081831115610bdc578384fd5b8b6020848301011115610bed578384fd5b60208101945050508091505092959891949750929550565b600080600060608486031215610c19578081fd5b833567ffffffffffffffff811115610c2f578182fd5b610c3b86828701610855565b9660208601359650604090950135949350505050565b60008060008060808587031215610c66578182fd5b843567ffffffffffffffff811115610c7c578283fd5b610c8887828801610855565b97602087013597506040870135966060013595509350505050565b60008060008060808587031215610cb8578182fd5b843567ffffffffffffffff80821115610ccf578384fd5b81870188601f820112610ce0578485fd5b80359250610cf061087384611215565b80848252602080830192508084016101408d83828a028801011115610d1357898afd5b8995505b87861015610d3f57610d298e83610943565b8552600195909501949382019390810190610d17565b509199508a013597505050604088013592505080821115610d5e578384fd5b50610d6b878288016108cc565b925050610d7b8660608701610933565b905092959194509250565b60008060008060808587031215610d9b578182fd5b843567ffffffffffffffff80821115610db2578384fd5b81870188601f820112610dc3578485fd5b8035925081831115610dd3578485fd5b610de6601f8401601f19166020016111ee565b9150828252886020848301011115610dfc578485fd5b610e0d83602084016020840161125d565b509450506020850135925060408501359150610d7b866060870161084a565b60008060008385036101e0811215610e42578182fd5b610e4c8686610943565b9350608061013f1982011215610e60578182fd5b50610e6b60806111ee565b610e79866101408701610a39565b8152610e89866101608701610a39565b602082015261018085013560408201526101a0850135606082015291506101c0840135610eb581611281565b809150509250925092565b6001600160a01b0391909116815260200190565b600060018060a01b038516825260208481840152606060408401528351806060850152825b81811015610f1557858101830151858201608001528201610ef9565b81811115610f265783608083870101525b50601f01601f19169290920160800195945050505050565b60208082526010908201526f456d70747920524651206f726465727360801b604082015260600190565b6020808252601c908201527f556e697377617020746f6b656e207061746820746f6f2073686f727400000000604082015260600190565b602080825260149082015273135a5cdb585d18da1959081c9958da5c1a595b9d60621b604082015260600190565b60208082526023908201527f556e737570706f727465642030784150492066756e6374696f6e2073656c65636040820152623a37b960e91b606082015260800190565b6020808252601e908201527f556e6973776170563320746f6b656e207061746820746f6f2073686f72740000604082015260600190565b6020808252601d908201527f4d756c7469686f7020746f6b656e207061746820746f6f2073686f7274000000604082015260600190565b60208082526016908201527526b4b9b6b0ba31b432b21034b7383aba103a37b5b2b760511b604082015260600190565b602080825260119082015270115512081b9bdd081cdd5c1c1bdc9d1959607a1b604082015260600190565b60208082526017908201527f4d69736d617463686564206f757470757420746f6b656e000000000000000000604082015260600190565b60208082526010908201526f496e76616c69642063616c6c6461746160801b604082015260600190565b6020808252818101527f4d69736d617463686564206f757470757420746f6b656e207175616e74697479604082015260600190565b60208082526028908201527f626174636846696c6c5266714f72646572206d75737420626520616c6c206f72604082015267206e6f7468696e6760c01b606082015260800190565b6020808252601f908201527f4d69736d61746368656420696e70757420746f6b656e207175616e7469747900604082015260600190565b60405181810167ffffffffffffffff8111828210171561120d57600080fd5b604052919050565b600067ffffffffffffffff82111561122b578081fd5b5060209081020190565b60008085851115611244578182fd5b83861115611250578182fd5b5050820193919092039150565b82818337506000910152565b6001600160a01b038116811461127e57600080fd5b50565b6001600160801b038116811461127e57600080fdfea2646970667358221220a6ff3c43f21e07e3f930dab7c7d062d5a0e2d2f4c15015d2a7f87662f35963e164736f6c634300060a0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2658B4AD EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x334FC289 EQ PUSH2 0x6F JUMPI DUP1 PUSH4 0x4F0E0EF3 EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0xE171FCAB EQ PUSH2 0x7F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0xA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0xEC0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x59 PUSH2 0xC5 JUMP JUMPDEST PUSH2 0x59 PUSH2 0xE9 JUMP JUMPDEST PUSH2 0x92 PUSH2 0x8D CALLDATASIZE PUSH1 0x4 PUSH2 0xB4C JUMP JUMPDEST PUSH2 0x10D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xED4 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP2 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH1 0x4 DUP11 LT ISZERO PUSH2 0x142 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x1110 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x24 PUSH1 0xA4 CALLDATALOAD ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH4 0x415565B PUSH1 0xE4 SHL DUP2 EQ DUP1 PUSH2 0x178 JUMPI POP PUSH4 0x8182B61F PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND EQ JUMPDEST ISZERO PUSH2 0x1A6 JUMPI PUSH2 0x18A DUP12 PUSH1 0x4 DUP2 DUP16 PUSH2 0x1235 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x197 SWAP2 SWAP1 PUSH2 0xAB7 JUMP JUMPDEST SWAP3 SWAP10 POP SWAP1 SWAP8 POP SWAP4 POP SWAP2 POP PUSH2 0x579 JUMP JUMPDEST PUSH4 0x3DFF34E1 PUSH1 0xE2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND EQ ISZERO PUSH2 0x203 JUMPI PUSH2 0x1CC DUP12 PUSH1 0x4 DUP2 DUP16 PUSH2 0x1235 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1D9 SWAP2 SWAP1 PUSH2 0xA4A JUMP JUMPDEST SWAP5 SWAP12 POP SWAP3 SWAP10 POP SWAP8 POP PUSH1 0x1 SWAP7 POP SWAP1 SWAP5 POP SWAP1 SWAP3 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH2 0x1FE JUMPI DUP15 SWAP5 POP JUMPDEST PUSH2 0x579 JUMP JUMPDEST PUSH4 0x36589EA9 PUSH1 0xE2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND EQ ISZERO PUSH2 0x29E JUMPI PUSH1 0x60 DUP13 DUP13 PUSH1 0x4 SWAP1 DUP1 SWAP3 PUSH2 0x231 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1235 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x23E SWAP2 SWAP1 PUSH2 0xC05 JUMP JUMPDEST DUP3 MLOAD SWAP2 SWAP7 POP SWAP5 POP SWAP1 SWAP2 POP PUSH1 0x1 LT PUSH2 0x267 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0xF68 JUMP JUMPDEST DUP1 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x274 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP8 POP DUP1 PUSH1 0x1 DUP3 MLOAD SUB DUP2 MLOAD DUP2 LT PUSH2 0x28E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP7 POP POP PUSH2 0x579 JUMP JUMPDEST PUSH4 0x2A9DD1DB PUSH1 0xE2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND EQ ISZERO PUSH2 0x314 JUMPI PUSH2 0x2BF PUSH2 0x7F6 JUMP JUMPDEST PUSH1 0x0 DUP14 DUP14 PUSH1 0x4 SWAP1 DUP1 SWAP3 PUSH2 0x2D4 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1235 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2E1 SWAP2 SWAP1 PUSH2 0xE2C JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MLOAD DUP4 MLOAD SWAP1 SWAP13 POP SWAP11 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND SWAP8 POP SWAP2 SWAP4 POP SWAP1 SWAP2 POP PUSH2 0x30B SWAP1 POP DUP3 DUP7 PUSH2 0x737 JUMP JUMPDEST SWAP4 POP POP POP PUSH2 0x579 JUMP JUMPDEST PUSH4 0x75103CB9 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND EQ ISZERO PUSH2 0x447 JUMPI PUSH1 0x60 DUP1 PUSH1 0x0 DUP15 DUP15 PUSH1 0x4 SWAP1 DUP1 SWAP3 PUSH2 0x345 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1235 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x352 SWAP2 SWAP1 PUSH2 0xCA3 JUMP JUMPDEST DUP4 MLOAD SWAP4 SWAP7 POP SWAP1 SWAP5 POP SWAP3 POP POP PUSH2 0x379 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0xF3E JUMP JUMPDEST DUP1 PUSH2 0x396 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x116F JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3A3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD SWAP10 POP DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3BE JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD MLOAD SWAP9 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x43E JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3E4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP8 ADD SWAP7 POP PUSH2 0x432 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x408 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x41C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x737 JUMP JUMPDEST SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 ADD PUSH2 0x3CF JUMP JUMPDEST POP POP POP POP PUSH2 0x579 JUMP JUMPDEST PUSH4 0x357A3CD9 PUSH1 0xE1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND EQ ISZERO PUSH2 0x4B6 JUMPI PUSH1 0x60 DUP13 DUP13 PUSH1 0x4 SWAP1 DUP1 SWAP3 PUSH2 0x475 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1235 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x482 SWAP2 SWAP1 PUSH2 0xD86 JUMP JUMPDEST SWAP9 POP PUSH1 0x1 SWAP8 POP SWAP1 SWAP6 POP SWAP4 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x4A1 JUMPI DUP16 SWAP6 POP JUMPDEST PUSH2 0x4AA DUP2 PUSH2 0x7A5 JUMP JUMPDEST SWAP1 SWAP9 POP SWAP7 POP PUSH2 0x579 SWAP1 POP JUMP JUMPDEST PUSH4 0x7A1EB1B9 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND EQ ISZERO PUSH2 0x4FC JUMPI PUSH2 0x4DC DUP12 PUSH1 0x4 DUP2 DUP16 PUSH2 0x1235 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x4E9 SWAP2 SWAP1 PUSH2 0xAFC JUMP JUMPDEST SWAP4 SWAP11 POP SWAP2 SWAP9 POP SWAP1 SWAP5 POP SWAP1 SWAP3 POP PUSH2 0x579 SWAP1 POP JUMP JUMPDEST PUSH4 0x79D98D9 PUSH1 0xE1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND EQ ISZERO PUSH2 0x561 JUMPI PUSH1 0x60 DUP13 DUP13 PUSH1 0x4 SWAP1 DUP1 SWAP3 PUSH2 0x52A SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1235 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x537 SWAP2 SWAP1 PUSH2 0xC51 JUMP JUMPDEST DUP4 MLOAD SWAP2 SWAP8 POP SWAP6 POP SWAP2 SWAP3 POP POP PUSH1 0x1 LT PUSH2 0x267 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x1047 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0xFCD JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ DUP1 ISZERO SWAP1 PUSH2 0x5C4 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO JUMPDEST PUSH2 0x5E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x10AE JUMP JUMPDEST DUP16 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x611 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x107E JUMP JUMPDEST DUP15 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x642 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x10D9 JUMP JUMPDEST DUP3 ISZERO DUP1 PUSH2 0x660 JUMPI POP DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x67C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0xF9F JUMP JUMPDEST DUP13 DUP3 EQ PUSH2 0x69B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x11B7 JUMP JUMPDEST DUP12 DUP2 LT ISZERO PUSH2 0x6BB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x113A JUMP JUMPDEST PUSH32 0x0 PUSH1 0x0 DUP13 DUP13 DUP3 SWAP3 POP DUP2 DUP2 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP7 SWAP16 POP SWAP5 SWAP14 POP SWAP1 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP SWAP8 POP SWAP8 POP SWAP8 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH1 0x0 EQ DUP1 PUSH2 0x760 JUMPI POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND ISZERO JUMPDEST DUP1 PUSH2 0x769 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x776 JUMPI POP PUSH1 0x0 PUSH2 0x79F JUMP JUMPDEST DUP3 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP3 DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND MUL DUP2 PUSH2 0x79B JUMPI INVALID JUMPDEST DIV SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x2B GT ISZERO PUSH2 0x7CC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x139 SWAP1 PUSH2 0x1010 JUMP JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x17 PUSH1 0x13 NOT SWAP1 SWAP4 ADD DUP4 SWAP1 DIV SWAP1 SWAP3 MUL SWAP1 SWAP3 ADD SWAP1 SWAP2 ADD MLOAD PUSH1 0x60 SWAP2 DUP3 SHR SWAP3 SWAP2 SHR SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x140 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x79F DUP2 PUSH2 0x1269 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x865 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x878 PUSH2 0x873 DUP3 PUSH2 0x1215 JUMP JUMPDEST PUSH2 0x11EE JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x899 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x8C1 JUMPI DUP2 CALLDATALOAD PUSH2 0x8AF DUP2 PUSH2 0x1269 JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x89C JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x8DC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x8EA PUSH2 0x873 DUP3 PUSH2 0x1215 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x90B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x8C1 JUMPI DUP2 CALLDATALOAD PUSH2 0x921 DUP2 PUSH2 0x1281 JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x90E JUMP JUMPDEST DUP1 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x79F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x140 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x956 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x95F DUP2 PUSH2 0x11EE JUMP JUMPDEST SWAP2 POP POP PUSH2 0x96C DUP4 DUP4 PUSH2 0x84A JUMP JUMPDEST DUP2 MSTORE PUSH2 0x97B DUP4 PUSH1 0x20 DUP5 ADD PUSH2 0x84A JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x98D DUP4 PUSH1 0x40 DUP5 ADD PUSH2 0xA0A JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x99F DUP4 PUSH1 0x60 DUP5 ADD PUSH2 0xA0A JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x9B1 DUP4 PUSH1 0x80 DUP5 ADD PUSH2 0x84A JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x9C3 DUP4 PUSH1 0xA0 DUP5 ADD PUSH2 0x84A JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x9D5 DUP4 PUSH1 0xC0 DUP5 ADD PUSH2 0x84A JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 DUP3 ADD CALLDATALOAD PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x9F3 DUP5 DUP3 DUP6 ADD PUSH2 0xA21 JUMP JUMPDEST DUP2 DUP4 ADD MSTORE POP PUSH2 0x120 DUP1 DUP4 ADD CALLDATALOAD DUP2 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x79F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x79F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x79F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0xA62 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0xA6D DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0xA7D DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0xA8D DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0xA9D DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xACC JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0xAD7 DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0xAE7 DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xB13 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0xB1E DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0xB2E DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xC0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0xB66 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0xB71 DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0xB81 DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0xB91 DUP2 PUSH2 0x1269 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xBBB JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP11 ADD DUP12 PUSH1 0x1F DUP3 ADD SLT PUSH2 0xBCC JUMPI DUP4 DUP5 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0xBDC JUMPI DUP4 DUP5 REVERT JUMPDEST DUP12 PUSH1 0x20 DUP5 DUP4 ADD ADD GT ISZERO PUSH2 0xBED JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD SWAP5 POP POP POP DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xC19 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC2F JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xC3B DUP7 DUP3 DUP8 ADD PUSH2 0x855 JUMP JUMPDEST SWAP7 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 SWAP1 SWAP6 ADD CALLDATALOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xC66 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC7C JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0xC88 DUP8 DUP3 DUP9 ADD PUSH2 0x855 JUMP JUMPDEST SWAP8 PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP8 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP7 PUSH1 0x60 ADD CALLDATALOAD SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xCB8 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xCCF JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP8 ADD DUP9 PUSH1 0x1F DUP3 ADD SLT PUSH2 0xCE0 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP PUSH2 0xCF0 PUSH2 0x873 DUP5 PUSH2 0x1215 JUMP JUMPDEST DUP1 DUP5 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP3 POP DUP1 DUP5 ADD PUSH2 0x140 DUP14 DUP4 DUP3 DUP11 MUL DUP9 ADD ADD GT ISZERO PUSH2 0xD13 JUMPI DUP10 DUP11 REVERT JUMPDEST DUP10 SWAP6 POP JUMPDEST DUP8 DUP7 LT ISZERO PUSH2 0xD3F JUMPI PUSH2 0xD29 DUP15 DUP4 PUSH2 0x943 JUMP JUMPDEST DUP6 MSTORE PUSH1 0x1 SWAP6 SWAP1 SWAP6 ADD SWAP5 SWAP4 DUP3 ADD SWAP4 SWAP1 DUP2 ADD SWAP1 PUSH2 0xD17 JUMP JUMPDEST POP SWAP2 SWAP10 POP DUP11 ADD CALLDATALOAD SWAP8 POP POP POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP3 POP POP DUP1 DUP3 GT ISZERO PUSH2 0xD5E JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0xD6B DUP8 DUP3 DUP9 ADD PUSH2 0x8CC JUMP JUMPDEST SWAP3 POP POP PUSH2 0xD7B DUP7 PUSH1 0x60 DUP8 ADD PUSH2 0x933 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xD9B JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xDB2 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP8 ADD DUP9 PUSH1 0x1F DUP3 ADD SLT PUSH2 0xDC3 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0xDD3 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xDE6 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x11EE JUMP JUMPDEST SWAP2 POP DUP3 DUP3 MSTORE DUP9 PUSH1 0x20 DUP5 DUP4 ADD ADD GT ISZERO PUSH2 0xDFC JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xE0D DUP4 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD PUSH2 0x125D JUMP JUMPDEST POP SWAP5 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH2 0xD7B DUP7 PUSH1 0x60 DUP8 ADD PUSH2 0x84A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH2 0x1E0 DUP2 SLT ISZERO PUSH2 0xE42 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xE4C DUP7 DUP7 PUSH2 0x943 JUMP JUMPDEST SWAP4 POP PUSH1 0x80 PUSH2 0x13F NOT DUP3 ADD SLT ISZERO PUSH2 0xE60 JUMPI DUP2 DUP3 REVERT JUMPDEST POP PUSH2 0xE6B PUSH1 0x80 PUSH2 0x11EE JUMP JUMPDEST PUSH2 0xE79 DUP7 PUSH2 0x140 DUP8 ADD PUSH2 0xA39 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xE89 DUP7 PUSH2 0x160 DUP8 ADD PUSH2 0xA39 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x180 DUP6 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x1A0 DUP6 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE SWAP2 POP PUSH2 0x1C0 DUP5 ADD CALLDATALOAD PUSH2 0xEB5 DUP2 PUSH2 0x1281 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 AND DUP3 MSTORE PUSH1 0x20 DUP5 DUP2 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 PUSH1 0x60 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xF15 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x80 ADD MSTORE DUP3 ADD PUSH2 0xEF9 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xF26 JUMPI DUP4 PUSH1 0x80 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x80 ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH16 0x456D70747920524651206F7264657273 PUSH1 0x80 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x556E697377617020746F6B656E207061746820746F6F2073686F727400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x14 SWAP1 DUP3 ADD MSTORE PUSH20 0x135A5CDB585D18DA1959081C9958DA5C1A595B9D PUSH1 0x62 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x23 SWAP1 DUP3 ADD MSTORE PUSH32 0x556E737570706F727465642030784150492066756E6374696F6E2073656C6563 PUSH1 0x40 DUP3 ADD MSTORE PUSH3 0x3A37B9 PUSH1 0xE9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x556E6973776170563320746F6B656E207061746820746F6F2073686F72740000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x4D756C7469686F7020746F6B656E207061746820746F6F2073686F7274000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH22 0x26B4B9B6B0BA31B432B21034B7383ABA103A37B5B2B7 PUSH1 0x51 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x11 SWAP1 DUP3 ADD MSTORE PUSH17 0x115512081B9BDD081CDD5C1C1BDC9D1959 PUSH1 0x7A SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x17 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D69736D617463686564206F757470757420746F6B656E000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH16 0x496E76616C69642063616C6C64617461 PUSH1 0x80 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4D69736D617463686564206F757470757420746F6B656E207175616E74697479 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x28 SWAP1 DUP3 ADD MSTORE PUSH32 0x626174636846696C6C5266714F72646572206D75737420626520616C6C206F72 PUSH1 0x40 DUP3 ADD MSTORE PUSH8 0x206E6F7468696E67 PUSH1 0xC0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x4D69736D61746368656420696E70757420746F6B656E207175616E7469747900 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x120D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x122B JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 GT ISZERO PUSH2 0x1244 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP4 DUP7 GT ISZERO PUSH2 0x1250 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP3 ADD SWAP4 SWAP2 SWAP1 SWAP3 SUB SWAP2 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x127E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x127E JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA6 SELFDESTRUCT EXTCODECOPY NUMBER CALLCODE 0x1E SMOD 0xE3 0xF9 ADDRESS 0xDA 0xB7 0xC7 0xD0 PUSH3 0xD5A0E2 0xD2 DELEGATECALL 0xC1 POP ISZERO 0xD2 0xA7 0xF8 PUSH23 0x62F35963E164736F6C634300060A003300000000000000 ",
              "sourceMap": "837:9701:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2151:38;;;:::i;:::-;;;;;;;;;;;;;;;;2375:35;;;:::i;2233:36::-;;;:::i;3466:5730::-;;;;;;;;;:::i;:::-;;;;;;;;;;2151:38;;;:::o;2375:35::-;;;:::o;2233:36::-;;;:::o;3466:5730::-;3751:7;;3769:12;3751:7;;;;;;4078:1;4062:17;;;4054:46;;;;-1:-1:-1;;;4054:46:0;;;;;;;;;;;;;;;;;4304:2;4321:3;4308:17;4300:26;4287:40;-1:-1:-1;;;;;;4182:271:0;-1:-1:-1;;;4485:22:0;;;:48;;-1:-1:-1;;;;;;;;;;4511:22:0;;;4485:48;4481:4008;;;4713:9;:5;4719:1;4713:5;;:9;;;4702:59;;;;;;;;;4614:147;;-1:-1:-1;4614:147:0;;-1:-1:-1;4614:147:0;-1:-1:-1;4614:147:0;-1:-1:-1;4481:4008:0;;;-1:-1:-1;;;;;;;;;4786:22:0;;;4782:3707;;;4985:9;:5;4991:1;4985:5;;:9;;;4974:77;;;;;;;;;4873:178;;-1:-1:-1;4873:178:0;;-1:-1:-1;4873:178:0;-1:-1:-1;5089:4:0;;-1:-1:-1;4873:178:0;;-1:-1:-1;4873:178:0;;-1:-1:-1;;;;;;;5115:23:0;;5111:101;;5174:19;5162:31;;5111:101;4782:3707;;;-1:-1:-1;;;;;;;;;5236:22:0;;;5232:3257;;;5313:21;5432:5;;5438:1;5432:9;;;;;;;;;;;5421:52;;;;;;;;;5499:11;;5352:121;;-1:-1:-1;5352:121:0;-1:-1:-1;5352:121:0;;-1:-1:-1;5513:1:0;-1:-1:-1;5491:56:0;;;;-1:-1:-1;;;5491:56:0;;;;;;;;;5578:4;5583:1;5578:7;;;;;;;;;;;;;;5565:20;;5617:4;5636:1;5622:4;:11;:15;5617:21;;;;;;;;;;;;;;5603:35;;5232:3257;;;;-1:-1:-1;;;;;;;;;5663:22:0;;;5659:2830;;;5739:21;;:::i;:::-;5778:28;5889:5;;5895:1;5889:9;;;;;;;;;;;5878:53;;;;;;;;;6028:16;;;;6076;;6028;;-1:-1:-1;6076:16:0;-1:-1:-1;;;;;;5968:29:0;;;-1:-1:-1;5824:107:0;;-1:-1:-1;5824:107:0;;-1:-1:-1;6133:51:0;;-1:-1:-1;5824:107:0;5968:29;6133:26;:51::i;:::-;6110:74;;5659:2830;;;;;-1:-1:-1;;;;;;;;;6209:22:0;;;6205:2284;;;6291:24;6333:38;6389:23;6517:5;;6523:1;6517:9;;;;;;;;;;;6506:61;;;;;;;;;6593:13;;6430:137;;-1:-1:-1;6430:137:0;;-1:-1:-1;6430:137:0;-1:-1:-1;;6585:46:0;;;;-1:-1:-1;;;6585:46:0;;;;;;;;;6657:18;6649:71;;;;-1:-1:-1;;;6649:71:0;;;;;;;;;6751:6;6758:1;6751:9;;;;;;;;;;;;;;:20;;;6738:33;;6803:6;6810:1;6803:9;;;;;;;;;;;;;;;;;;:20;;-1:-1:-1;6803:20:0;6841:247;6865:6;:13;6861:1;:17;6841:247;;;6935:21;6957:1;6935:24;;;;;;;;;;;;;;-1:-1:-1;;;;;6927:33:0;6907:53;;;;7006:63;7033:6;7040:1;7033:9;;;;;;;;;;;;;;7044:21;7066:1;7044:24;;;;;;;;;;;;;;-1:-1:-1;;;;;7006:63:0;:26;:63::i;:::-;6982:87;;;;6880:3;;6841:247;;;;6205:2284;;;;;;-1:-1:-1;;;;;;;;;7112:22:0;;;7108:1381;;;7204:24;7344:5;;7350:1;7344:9;;;;;;;;;;;7333:57;;;;;;;;;7246:144;-1:-1:-1;7428:4:0;;-1:-1:-1;7246:144:0;;-1:-1:-1;7246:144:0;-1:-1:-1;7246:144:0;-1:-1:-1;;;;;;7454:23:0;;7450:101;;7513:19;7501:31;;7450:101;7596:50;7634:11;7596:37;:50::i;:::-;7568:78;;-1:-1:-1;7568:78:0;-1:-1:-1;7108:1381:0;;-1:-1:-1;7108:1381:0;;-1:-1:-1;;;;;;;;;7671:22:0;;;7667:822;;;7864:9;:5;7870:1;7864:5;;:9;;;7853:68;;;;;;;;;7766:155;;-1:-1:-1;7766:155:0;;-1:-1:-1;7766:155:0;;-1:-1:-1;7766:155:0;;-1:-1:-1;7667:822:0;;-1:-1:-1;7667:822:0;;-1:-1:-1;;;;;;;;;7946:22:0;;;7942:547;;;8044:23;8166:5;;8172:1;8166:9;;;;;;;;;;;8155:61;;;;;;;;;8242:13;;8085:131;;-1:-1:-1;8085:131:0;-1:-1:-1;8085:131:0;;-1:-1:-1;;8258:1:0;-1:-1:-1;8234:59:0;;;;-1:-1:-1;;;8234:59:0;;;;;;;;7942:547;8429:45;;-1:-1:-1;;;8429:45:0;;;;;;;;7942:547;-1:-1:-1;;;;;;8517:25:0;;1406:42;8517:25;;;;:55;;-1:-1:-1;;;;;;8546:26:0;;1406:42;8546:26;;8517:55;8509:85;;;;-1:-1:-1;;;8509:85:0;;;;;;;;;8626:12;-1:-1:-1;;;;;8612:26:0;:10;-1:-1:-1;;;;;8612:26:0;;8604:61;;;;-1:-1:-1;;;8604:61:0;;;;;;;;;8698:17;-1:-1:-1;;;;;8683:32:0;:11;-1:-1:-1;;;;;8683:32:0;;8675:68;;;;-1:-1:-1;;;8675:68:0;;;;;;;;;8762:17;8761:18;:54;;;;8796:19;-1:-1:-1;;;;;8783:32:0;:9;-1:-1:-1;;;;;8783:32:0;;8761:54;8753:87;;;;-1:-1:-1;;;8753:87:0;;;;;;;;;8878:15;8858:16;:35;8850:79;;;;-1:-1:-1;;;8850:79:0;;;;;;;;;8971:23;8947:20;:47;;8939:92;;;;-1:-1:-1;;;8939:92:0;;;;;;;;;9063:13;9159:1;9174:5;;9042:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9042:147:0;;-1:-1:-1;9042:147:0;;-1:-1:-1;9042:147:0;;-1:-1:-1;;;;;;;;;;;;3466:5730:0;;;;;;;;;;;:::o;9202:387::-;9337:28;9385:5;:17;;;-1:-1:-1;;;;;9385:22:0;9406:1;9385:22;:48;;;-1:-1:-1;9411:17:0;;;;-1:-1:-1;;;;;9411:22:0;;9385:48;:77;;;-1:-1:-1;9437:25:0;;9385:77;9381:116;;;-1:-1:-1;9485:1:0;9478:8;;9381:116;9564:5;:17;;;-1:-1:-1;;;;;9521:60:0;9541:20;9521:5;:17;;;-1:-1:-1;;;;;9521:40:0;;:60;;;;;;9506:76;;9202:387;;;;;:::o;9682:854::-;9898:18;;9814;;;;1807:86;-1:-1:-1;9898:53:0;9890:96;;;;-1:-1:-1;;;9890:96:0;;;;;;;;;-1:-1:-1;;10165:18:0;;10387:2;10370:20;;;10425:8;2041:55;-1:-1:-1;;10165:49:0;;;10164:85;;;10285:43;;;10452:23;;;;;;10511:8;10421:2;10417:17;;;;10503;;;10347:183::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;72:20;;97:33;72:20;97:33;;313:707;;430:3;423:4;415:6;411:17;407:27;397:2;;-1:-1;;438:12;397:2;485:6;472:20;507:80;522:64;579:6;522:64;;;507:80;;;615:21;;;498:89;-1:-1;659:4;672:14;;;;647:17;;;761;;;752:27;;;;749:36;-1:-1;746:2;;;798:1;;788:12;746:2;823:1;808:206;833:6;830:1;827:13;808:206;;;85:6;72:20;97:33;124:5;97:33;;;901:50;;965:14;;;;993;;;;855:1;848:9;808:206;;;812:14;;;;;390:630;;;;;1880:707;;1997:3;1990:4;1982:6;1978:17;1974:27;1964:2;;-1:-1;;2005:12;1964:2;2052:6;2039:20;2074:80;2089:64;2146:6;2089:64;;2074:80;2182:21;;;2065:89;-1:-1;2226:4;2239:14;;;;2214:17;;;2328;;;2319:27;;;;2316:36;-1:-1;2313:2;;;2365:1;;2355:12;2313:2;2390:1;2375:206;2400:6;2397:1;2394:13;2375:206;;;6259:6;6246:20;6271:33;6298:5;6271:33;;;2468:50;;2532:14;;;;2560;;;;2422:1;2415:9;2375:206;;2595:124;2659:20;;27671:13;;27664:21;29150:32;;29140:2;;29196:1;;29186:12;3709:1665;;3822:6;;3810:9;3805:3;3801:19;3797:32;3794:2;;;-1:-1;;3832:12;3794:2;3860:22;3822:6;3860:22;;;3851:31;;;3970:49;4015:3;3991:22;3970:49;;;3952:16;3945:75;4120:49;4165:3;4087:2;4145:9;4141:22;4120:49;;;4087:2;4106:5;4102:16;4095:75;4271:49;4316:3;4238:2;4296:9;4292:22;4271:49;;;4238:2;4257:5;4253:16;4246:75;4422:49;4467:3;4389:2;4447:9;4443:22;4422:49;;;4389:2;4408:5;4404:16;4397:75;4568:49;4613:3;4534;4593:9;4589:22;4568:49;;;4534:3;4554:5;4550:16;4543:75;4714:49;4759:3;4680;4739:9;4735:22;4714:49;;;4680:3;4700:5;4696:16;4689:75;4863:49;4908:3;4829;4888:9;4884:22;4863:49;;;4829:3;4849:5;4845:16;4838:75;4974:3;5033:9;5029:22;2793:20;4974:3;4994:5;4990:16;4983:75;5121:3;5157:48;5201:3;5121;5181:9;5177:22;5157:48;;;5121:3;5141:5;5137:18;5130:76;;5267:3;;5328:9;5324:22;6383:20;5267:3;5287:5;5283:18;5276:77;;3788:1586;;;;;6179:130;6246:20;;-1:-1;;;;;27838:46;;29395:35;;29385:2;;29444:1;;29434:12;6453:128;6519:20;;28175:18;28164:30;;29642:34;;29632:2;;29690:1;;29680:12;6588:126;6653:20;;28277:4;28266:16;;29763:33;;29753:2;;29810:1;;29800:12;6721:933;;;;;;;6942:3;6930:9;6921:7;6917:23;6913:33;6910:2;;;-1:-1;;6949:12;6910:2;230:6;217:20;242:41;277:5;242:41;;;7001:71;-1:-1;7109:2;7156:22;;217:20;242:41;217:20;242:41;;;7117:71;-1:-1;7225:2;7272:22;;217:20;242:41;217:20;242:41;;;7233:71;-1:-1;7341:2;7388:22;;217:20;242:41;217:20;242:41;;;6904:750;;;;-1:-1;6904:750;;7457:3;7497:22;;6383:20;;7566:3;7606:22;;;6383:20;;-1:-1;6904:750;-1:-1;;6904:750;7661:649;;;;;7832:3;7820:9;7811:7;7807:23;7803:33;7800:2;;;-1:-1;;7839:12;7800:2;230:6;217:20;242:41;277:5;242:41;;;7891:71;-1:-1;7999:2;8046:22;;217:20;242:41;217:20;242:41;;;7794:516;;8007:71;;-1:-1;;;;8115:2;8154:22;;6383:20;;8223:2;8262:22;6383:20;;7794:516;8317:775;;;;;;8505:3;8493:9;8484:7;8480:23;8476:33;8473:2;;;-1:-1;;8512:12;8473:2;230:6;217:20;242:41;277:5;242:41;;;8564:71;-1:-1;8672:2;8719:22;;217:20;242:41;217:20;242:41;;;8467:625;;8680:71;;-1:-1;;;;8788:2;8827:22;;6383:20;;8896:2;8935:22;;6383:20;;9004:3;9044:22;;;6383:20;;-1:-1;8467:625;9099:993;;;;;;;;9307:3;9295:9;9286:7;9282:23;9278:33;9275:2;;;-1:-1;;9314:12;9275:2;85:6;72:20;97:33;124:5;97:33;;;9366:63;-1:-1;9466:2;9505:22;;72:20;97:33;72:20;97:33;;;9474:63;-1:-1;9574:2;9613:22;;72:20;97:33;72:20;97:33;;;9582:63;-1:-1;9682:2;9721:22;;6383:20;;-1:-1;9790:3;9830:22;;6383:20;;-1:-1;9927:3;9912:19;;9899:33;9952:18;9941:30;;;9938:2;;;-1:-1;;9974:12;9938:2;10059:6;10048:9;10044:22;2991:3;2984:4;2976:6;2972:17;2968:27;2958:2;;-1:-1;;2999:12;2958:2;3042:6;3029:20;3019:30;;9952:18;3061:6;3058:30;3055:2;;;-1:-1;;3091:12;3055:2;3186:3;9466:2;3166:17;3127:6;3152:32;;3149:41;3146:2;;;-1:-1;;3193:12;3146:2;9466;3127:6;3123:17;10002:74;;;;;;;;9269:823;;;;;;;;;;;10099:627;;;;10262:2;10250:9;10241:7;10237:23;10233:32;10230:2;;;-1:-1;;10268:12;10230:2;10326:17;10313:31;10364:18;10356:6;10353:30;10350:2;;;-1:-1;;10386:12;10350:2;10416:78;10486:7;10477:6;10466:9;10462:22;10416:78;;;10406:88;10531:2;10570:22;;6383:20;;-1:-1;10639:2;10678:22;;;6383:20;;10224:502;-1:-1;;;;10224:502;10733:753;;;;;10913:3;10901:9;10892:7;10888:23;10884:33;10881:2;;;-1:-1;;10920:12;10881:2;10978:17;10965:31;11016:18;11008:6;11005:30;11002:2;;;-1:-1;;11038:12;11002:2;11068:78;11138:7;11129:6;11118:9;11114:22;11068:78;;;11058:88;11183:2;11222:22;;6383:20;;-1:-1;11291:2;11330:22;;6383:20;;11399:2;11438:22;6383:20;;-1:-1;10875:611;-1:-1;;;;10875:611;11493:931;;;;;11719:3;11707:9;11698:7;11694:23;11690:33;11687:2;;;-1:-1;;11726:12;11687:2;11784:17;11771:31;11822:18;;11814:6;11811:30;11808:2;;;-1:-1;;11844:12;11808:2;11959:6;11948:9;11944:22;1212:3;1205:4;1197:6;1193:17;1189:27;1179:2;;-1:-1;;1220:12;1179:2;1267:6;1254:20;1240:34;;1289:104;1304:88;1385:6;1304:88;;1289:104;1399:16;1435:6;1428:5;1421:21;1465:4;;1482:3;1478:14;1471:21;;1465:4;1457:6;1453:17;1579:6;1589:3;1465:4;1579:6;1571;1567:19;1457:6;1558:29;;1555:38;1552:2;;;-1:-1;;1596:12;1552:2;-1:-1;1622:10;;1616:232;1641:6;1638:1;1635:13;1616:232;;;1721:61;1778:3;1766:10;1721:61;;;1709:74;;1663:1;1656:9;;;;;1797:14;;;;1825:16;;;;1616:232;;;-1:-1;11864:112;;-1:-1;12052:22;;6383:20;;-1:-1;;;12149:2;12134:18;;12121:32;;-1:-1;;12162:30;;;12159:2;;;-1:-1;;12195:12;12159:2;;12225:78;12295:7;12286:6;12275:9;12271:22;12225:78;;;12215:88;;;12358:50;12400:7;12340:2;12380:9;12376:22;12358:50;;;12348:60;;11681:743;;;;;;;;12431:737;;;;;12603:3;12591:9;12582:7;12578:23;12574:33;12571:2;;;-1:-1;;12610:12;12571:2;12668:17;12655:31;12706:18;;12698:6;12695:30;12692:2;;;-1:-1;;12728:12;12692:2;12803:6;12792:9;12788:22;3323:3;3316:4;3308:6;3304:17;3300:27;3290:2;;-1:-1;;3331:12;3290:2;3378:6;3365:20;3351:34;;12706:18;26412:6;26409:30;26406:2;;;-1:-1;;26442:12;26406:2;3400:64;26515:9;26496:17;;-1:-1;;26492:33;26583:4;26573:15;3400:64;;;3391:73;;3484:6;3477:5;3470:21;3588:3;26583:4;3579:6;3512;3570:16;;3567:25;3564:2;;;-1:-1;;3595:12;3564:2;3615:41;3649:6;26583:4;3546:5;3542:16;26583:4;3512:6;3508:17;3615:41;;;-1:-1;12748:72;-1:-1;;26583:4;12896:22;;6383:20;;-1:-1;12965:2;13004:22;;6383:20;;-1:-1;13091:61;13144:7;13073:2;13120:22;;13091:61;;13175:592;;;;13350:9;13341:7;13337:23;13362:3;13337:23;13333:33;13330:2;;;-1:-1;;13369:12;13330:2;13431:77;13500:7;13476:22;13431:77;;;13421:87;-1:-1;5535:4;-1:-1;;5514:19;;5510:30;5507:2;;;-1:-1;;5543:12;5507:2;;5571:20;5535:4;5571:20;;;5682:47;5725:3;13545;13614:9;13610:22;5682:47;;;5664:16;5657:73;5821:47;5864:3;5840:22;13614:9;5840:22;5821:47;;;5788:2;5803:16;;5796:73;5981:22;;;2793:20;5927:2;5942:16;;5935:75;6122:22;;;2793:20;6068:2;6083:16;;6076:75;5807:5;-1:-1;13679:3;13719:22;;6246:20;6271:33;6246:20;6271:33;;;13688:63;;;;13324:443;;;;;;18794:222;-1:-1;;;;;27958:54;;;;13845:37;;18921:2;18906:18;;18892:124;19023:528;;27849:34;;27969:42;;;27962:5;27958:54;13852:3;13845:37;19388:2;18775:5;19388:2;19377:9;19373:18;18745:37;19224:2;19425;19414:9;19410:18;19403:48;14036:5;26692:12;26848:6;19224:2;19213:9;19209:18;26836:19;-1:-1;28521:101;28535:6;28532:1;28529:13;28521:101;;;28602:11;;;;;28596:18;28583:11;;;26876:14;28583:11;28576:39;28550:10;;28521:101;;;28637:6;28634:1;28631:13;28628:2;;;-1:-1;26876:14;28693:6;19213:9;28684:16;;28677:27;28628:2;-1:-1;26515:9;28793:14;-1:-1;;28789:28;14193:39;;;;26876:14;14193:39;;19195:356;-1:-1;;;;;19195:356;19558:416;19758:2;19772:47;;;14469:2;19743:18;;;26836:19;-1:-1;;;26876:14;;;14485:39;14543:12;;;19729:245;19981:416;20181:2;20195:47;;;14794:2;20166:18;;;26836:19;14830:30;26876:14;;;14810:51;14880:12;;;20152:245;20404:416;20604:2;20618:47;;;15131:2;20589:18;;;26836:19;-1:-1;;;26876:14;;;15147:43;15209:12;;;20575:245;20827:416;21027:2;21041:47;;;15460:2;21012:18;;;26836:19;15496:34;26876:14;;;15476:55;-1:-1;;;15551:12;;;15544:27;15590:12;;;20998:245;21250:416;21450:2;21464:47;;;15841:2;21435:18;;;26836:19;15877:32;26876:14;;;15857:53;15929:12;;;21421:245;21673:416;21873:2;21887:47;;;16180:2;21858:18;;;26836:19;16216:31;26876:14;;;16196:52;16267:12;;;21844:245;22096:416;22296:2;22310:47;;;16518:2;22281:18;;;26836:19;-1:-1;;;26876:14;;;16534:45;16598:12;;;22267:245;22519:416;22719:2;22733:47;;;16849:2;22704:18;;;26836:19;-1:-1;;;26876:14;;;16865:40;16924:12;;;22690:245;22942:416;23142:2;23156:47;;;17175:2;23127:18;;;26836:19;17211:25;26876:14;;;17191:46;17256:12;;;23113:245;23365:416;23565:2;23579:47;;;17507:2;23550:18;;;26836:19;-1:-1;;;26876:14;;;17523:39;17581:12;;;23536:245;23788:416;23988:2;24002:47;;;23973:18;;;26836:19;17868:34;26876:14;;;17848:55;17922:12;;;23959:245;24211:416;24411:2;24425:47;;;18173:2;24396:18;;;26836:19;18209:34;26876:14;;;18189:55;-1:-1;;;18264:12;;;18257:32;18308:12;;;24382:245;24634:416;24834:2;24848:47;;;18559:2;24819:18;;;26836:19;18595:33;26876:14;;;18575:54;18648:12;;;24805:245;25057:256;25119:2;25113:9;25145:17;;;25220:18;25205:34;;25241:22;;;25202:62;25199:2;;;25277:1;;25267:12;25199:2;25119;25286:22;25097:216;;-1:-1;25097:216;25320:304;;25479:18;25471:6;25468:30;25465:2;;;-1:-1;;25501:12;25465:2;-1:-1;25546:4;25534:17;;;25599:15;;25402:222;27076:318;;;27226:8;27214:10;27211:24;27208:2;;;-1:-1;;27238:12;27208:2;27273:6;27263:8;27260:20;27257:2;;;-1:-1;;27283:12;27257:2;-1:-1;;27315:31;;;27364:25;;;;;-1:-1;27202:192;28295:145;28376:6;28371:3;28366;28353:30;-1:-1;28432:1;28414:16;;28407:27;28346:94;28830:117;-1:-1;;;;;27958:54;;28889:35;;28879:2;;28938:1;;28928:12;28879:2;28873:74;;29336:117;-1:-1;;;;;29423:5;27838:46;29398:5;29395:35;29385:2;;29444:1;;29434:12"
            },
            "methodIdentifiers": {
              "getSpender()": "334fc289",
              "getTradeCalldata(address,address,address,uint256,uint256,bytes)": "e171fcab",
              "wethAddress()": "4f0e0ef3",
              "zeroExAddress()": "2658b4ad"
            }
          }
        }
      }
    },
    "sources": {
      "contracts/protocol/integration/exchange/ZeroExApiAdapter.sol": {
        "ast": {
          "absolutePath": "contracts/protocol/integration/exchange/ZeroExApiAdapter.sol",
          "exportedSymbols": {
            "ZeroExApiAdapter": [
              691
            ]
          },
          "id": 692,
          "license": "Apache License",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "0.6",
                ".10"
              ],
              "nodeType": "PragmaDirective",
              "src": "655:23:0"
            },
            {
              "id": 2,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "679:35:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 3,
                "nodeType": "StructuredDocumentation",
                "src": "716:119:0",
                "text": " @title ZeroExApiAdapter\n @author Set Protocol\n Exchange adapter for 0xAPI that returns data for swaps"
              },
              "fullyImplemented": true,
              "id": 691,
              "linearizedBaseContracts": [
                691
              ],
              "name": "ZeroExApiAdapter",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "ZeroExApiAdapter.RfqOrder",
                  "id": 24,
                  "members": [
                    {
                      "constant": false,
                      "id": 5,
                      "mutability": "mutable",
                      "name": "makerToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24,
                      "src": "896:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "896:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7,
                      "mutability": "mutable",
                      "name": "takerToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24,
                      "src": "924:18:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "924:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 9,
                      "mutability": "mutable",
                      "name": "makerAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24,
                      "src": "952:19:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "typeName": {
                        "id": 8,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "952:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 11,
                      "mutability": "mutable",
                      "name": "takerAmount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24,
                      "src": "981:19:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "typeName": {
                        "id": 10,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "981:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 13,
                      "mutability": "mutable",
                      "name": "maker",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24,
                      "src": "1010:13:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 12,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1010:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 15,
                      "mutability": "mutable",
                      "name": "taker",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24,
                      "src": "1033:13:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1033:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 17,
                      "mutability": "mutable",
                      "name": "txOrigin",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24,
                      "src": "1056:16:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 16,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1056:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 19,
                      "mutability": "mutable",
                      "name": "pool",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24,
                      "src": "1082:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 18,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1082:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 21,
                      "mutability": "mutable",
                      "name": "expiry",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24,
                      "src": "1104:13:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 20,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "1104:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 23,
                      "mutability": "mutable",
                      "name": "salt",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24,
                      "src": "1127:12:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 22,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1127:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "name": "RfqOrder",
                  "nodeType": "StructDefinition",
                  "scope": 691,
                  "src": "870:276:0",
                  "visibility": "public"
                },
                {
                  "canonicalName": "ZeroExApiAdapter.Signature",
                  "id": 33,
                  "members": [
                    {
                      "constant": false,
                      "id": 26,
                      "mutability": "mutable",
                      "name": "signatureType",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 33,
                      "src": "1179:19:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 25,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "1179:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 28,
                      "mutability": "mutable",
                      "name": "v",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 33,
                      "src": "1208:7:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 27,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "1208:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 30,
                      "mutability": "mutable",
                      "name": "r",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 33,
                      "src": "1225:9:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 29,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1225:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 32,
                      "mutability": "mutable",
                      "name": "s",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 33,
                      "src": "1244:9:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 31,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1244:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "name": "Signature",
                  "nodeType": "StructDefinition",
                  "scope": 691,
                  "src": "1152:108:0",
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "id": 36,
                  "mutability": "constant",
                  "name": "ETH_ADDRESS",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 691,
                  "src": "1367:81:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 34,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1367:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "hexValue": "307845656565654565656545654565654565456545656545454565656565456565656565656545456545",
                    "id": 35,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1406:42:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    },
                    "value": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "id": 39,
                  "mutability": "constant",
                  "name": "UNISWAP_V3_PATH_ADDRESS_SIZE",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 691,
                  "src": "1523:58:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 37,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1523:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "hexValue": "3230",
                    "id": 38,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1579:2:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_20_by_1",
                      "typeString": "int_const 20"
                    },
                    "value": "20"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "id": 42,
                  "mutability": "constant",
                  "name": "UNISWAP_V3_PATH_FEE_SIZE",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 691,
                  "src": "1587:53:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 40,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1587:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "hexValue": "33",
                    "id": 41,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1639:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3_by_1",
                      "typeString": "int_const 3"
                    },
                    "value": "3"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "id": 49,
                  "mutability": "constant",
                  "name": "UNISWAP_V3_SINGLE_HOP_PATH_SIZE",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 691,
                  "src": "1748:145:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 43,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1748:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 48,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 46,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 44,
                        "name": "UNISWAP_V3_PATH_ADDRESS_SIZE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 39,
                        "src": "1807:28:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 45,
                        "name": "UNISWAP_V3_PATH_FEE_SIZE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42,
                        "src": "1838:24:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "1807:55:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 47,
                      "name": "UNISWAP_V3_PATH_ADDRESS_SIZE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 39,
                      "src": "1865:28:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1807:86:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "id": 54,
                  "mutability": "constant",
                  "name": "UNISWAP_V3_SINGLE_HOP_OFFSET_SIZE",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 691,
                  "src": "1980:116:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1980:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 53,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 51,
                      "name": "UNISWAP_V3_PATH_ADDRESS_SIZE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 39,
                      "src": "2041:28:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 52,
                      "name": "UNISWAP_V3_PATH_FEE_SIZE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42,
                      "src": "2072:24:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2041:55:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "functionSelector": "2658b4ad",
                  "id": 56,
                  "mutability": "immutable",
                  "name": "zeroExAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 691,
                  "src": "2151:38:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 55,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2151:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "4f0e0ef3",
                  "id": 58,
                  "mutability": "immutable",
                  "name": "wethAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 691,
                  "src": "2233:36:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 57,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2233:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "334fc289",
                  "id": 60,
                  "mutability": "immutable",
                  "name": "getSpender",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 691,
                  "src": "2375:35:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 59,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2375:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 79,
                    "nodeType": "Block",
                    "src": "2531:120:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 69,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 67,
                            "name": "zeroExAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 56,
                            "src": "2541:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 68,
                            "name": "_zeroExAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62,
                            "src": "2557:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2541:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 70,
                        "nodeType": "ExpressionStatement",
                        "src": "2541:30:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 73,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 71,
                            "name": "wethAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 58,
                            "src": "2581:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 72,
                            "name": "_wethAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 64,
                            "src": "2595:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2581:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 74,
                        "nodeType": "ExpressionStatement",
                        "src": "2581:26:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 77,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 75,
                            "name": "getSpender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 60,
                            "src": "2617:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 76,
                            "name": "_zeroExAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62,
                            "src": "2630:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2617:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 78,
                        "nodeType": "ExpressionStatement",
                        "src": "2617:27:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 80,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 65,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 62,
                        "mutability": "mutable",
                        "name": "_zeroExAddress",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 80,
                        "src": "2478:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 61,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2478:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 64,
                        "mutability": "mutable",
                        "name": "_wethAddress",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 80,
                        "src": "2502:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 63,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2502:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2477:46:0"
                  },
                  "returnParameters": {
                    "id": 66,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2531:0:0"
                  },
                  "scope": 691,
                  "src": "2466:185:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 616,
                    "nodeType": "Block",
                    "src": "3787:5409:0",
                    "statements": [
                      {
                        "assignments": [
                          103
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 103,
                            "mutability": "mutable",
                            "name": "inputToken",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 616,
                            "src": "3851:18:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 102,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3851:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 104,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3851:18:0"
                      },
                      {
                        "assignments": [
                          106
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 106,
                            "mutability": "mutable",
                            "name": "outputToken",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 616,
                            "src": "3879:19:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 105,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3879:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 107,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3879:19:0"
                      },
                      {
                        "assignments": [
                          109
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 109,
                            "mutability": "mutable",
                            "name": "recipient",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 616,
                            "src": "3908:17:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 108,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3908:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 110,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3908:17:0"
                      },
                      {
                        "assignments": [
                          112
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 112,
                            "mutability": "mutable",
                            "name": "supportsRecipient",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 616,
                            "src": "3935:22:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 111,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "3935:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 113,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3935:22:0"
                      },
                      {
                        "assignments": [
                          115
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 115,
                            "mutability": "mutable",
                            "name": "inputTokenAmount",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 616,
                            "src": "3967:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 114,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3967:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 116,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3967:24:0"
                      },
                      {
                        "assignments": [
                          118
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 118,
                            "mutability": "mutable",
                            "name": "minOutputTokenAmount",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 616,
                            "src": "4001:28:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 117,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4001:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 119,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4001:28:0"
                      },
                      {
                        "id": 561,
                        "nodeType": "Block",
                        "src": "4040:4459:0",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 124,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 121,
                                      "name": "_data",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 93,
                                      "src": "4062:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes calldata"
                                      }
                                    },
                                    "id": 122,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "4062:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">=",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "34",
                                    "id": 123,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4078:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_4_by_1",
                                      "typeString": "int_const 4"
                                    },
                                    "value": "4"
                                  },
                                  "src": "4062:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "496e76616c69642063616c6c64617461",
                                  "id": 125,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4081:18:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_cdae3791f9cc6fa4e555b0f7716d13fde3c47afe99a801c2893b8f6d7fc72311",
                                    "typeString": "literal_string \"Invalid calldata\""
                                  },
                                  "value": "Invalid calldata"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_cdae3791f9cc6fa4e555b0f7716d13fde3c47afe99a801c2893b8f6d7fc72311",
                                    "typeString": "literal_string \"Invalid calldata\""
                                  }
                                ],
                                "id": 120,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -18,
                                  -18
                                ],
                                "referencedDeclaration": -18,
                                "src": "4054:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 126,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4054:46:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 127,
                            "nodeType": "ExpressionStatement",
                            "src": "4054:46:0"
                          },
                          {
                            "assignments": [
                              129
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 129,
                                "mutability": "mutable",
                                "name": "selector",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 561,
                                "src": "4114:15:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "typeName": {
                                  "id": 128,
                                  "name": "bytes4",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4114:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 130,
                            "initialValue": null,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "4114:15:0"
                          },
                          {
                            "AST": {
                              "nodeType": "YulBlock",
                              "src": "4152:315:0",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "4170:283:0",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4304:2:0",
                                                "type": "",
                                                "value": "36"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "4321:3:0",
                                                    "type": "",
                                                    "value": "164"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "calldataload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4308:12:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "4308:17:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "4300:3:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4300:26:0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "calldataload",
                                          "nodeType": "YulIdentifier",
                                          "src": "4287:12:0"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4287:40:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4369:66:0",
                                        "type": "",
                                        "value": "0xffffffff00000000000000000000000000000000000000000000000000000000"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4182:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4182:271:0"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "selector",
                                      "nodeType": "YulIdentifier",
                                      "src": "4170:8:0"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "istanbul",
                            "externalReferences": [
                              {
                                "declaration": 129,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "4170:8:0",
                                "valueSize": 1
                              }
                            ],
                            "id": 131,
                            "nodeType": "InlineAssembly",
                            "src": "4143:324:0"
                          },
                          {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 138,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 134,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 132,
                                  "name": "selector",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 129,
                                  "src": "4485:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783431353536356230",
                                  "id": 133,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4497:10:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1096115632_by_1",
                                    "typeString": "int_const 1096115632"
                                  },
                                  "value": "0x415565b0"
                                },
                                "src": "4485:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 137,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 135,
                                  "name": "selector",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 129,
                                  "src": "4511:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783831383262363166",
                                  "id": 136,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4523:10:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2172827167_by_1",
                                    "typeString": "int_const 2172827167"
                                  },
                                  "value": "0x8182b61f"
                                },
                                "src": "4511:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "4485:48:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                "id": 164,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 162,
                                  "name": "selector",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 129,
                                  "src": "4786:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30786637666364333834",
                                  "id": 163,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4798:10:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4160541572_by_1",
                                    "typeString": "int_const 4160541572"
                                  },
                                  "value": "0xf7fcd384"
                                },
                                "src": "4786:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "id": 211,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 209,
                                    "name": "selector",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 129,
                                    "src": "5236:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30786439363237616134",
                                    "id": 210,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5248:10:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_3647109796_by_1",
                                      "typeString": "int_const 3647109796"
                                    },
                                    "value": "0xd9627aa4"
                                  },
                                  "src": "5236:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseBody": {
                                  "condition": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    },
                                    "id": 264,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 262,
                                      "name": "selector",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 129,
                                      "src": "5663:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30786161373734373663",
                                      "id": 263,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "5675:10:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2859943788_by_1",
                                        "typeString": "int_const 2859943788"
                                      },
                                      "value": "0xaa77476c"
                                    },
                                    "src": "5663:22:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseBody": {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      },
                                      "id": 314,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 312,
                                        "name": "selector",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 129,
                                        "src": "6209:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30783735313033636239",
                                        "id": 313,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6221:10:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1963998393_by_1",
                                          "typeString": "int_const 1963998393"
                                        },
                                        "value": "0x75103cb9"
                                      },
                                      "src": "6209:22:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": {
                                      "condition": {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        },
                                        "id": 414,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 412,
                                          "name": "selector",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 129,
                                          "src": "7112:8:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "30783661663437396232",
                                          "id": 413,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "7124:10:0",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1794406834_by_1",
                                            "typeString": "int_const 1794406834"
                                          },
                                          "value": "0x6af479b2"
                                        },
                                        "src": "7112:22:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "falseBody": {
                                        "condition": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                          },
                                          "id": 467,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "id": 465,
                                            "name": "selector",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 129,
                                            "src": "7671:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes4",
                                              "typeString": "bytes4"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "==",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "30783761316562316239",
                                            "id": 466,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "7683:10:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_2048831929_by_1",
                                              "typeString": "int_const 2048831929"
                                            },
                                            "value": "0x7a1eb1b9"
                                          },
                                          "src": "7671:22:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "falseBody": {
                                          "condition": {
                                            "argumentTypes": null,
                                            "commonType": {
                                              "typeIdentifier": "t_bytes4",
                                              "typeString": "bytes4"
                                            },
                                            "id": 495,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "argumentTypes": null,
                                              "id": 493,
                                              "name": "selector",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 129,
                                              "src": "7946:8:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "==",
                                            "rightExpression": {
                                              "argumentTypes": null,
                                              "hexValue": "30783066336233316232",
                                              "id": 494,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "7958:10:0",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_255537586_by_1",
                                                "typeString": "int_const 255537586"
                                              },
                                              "value": "0x0f3b31b2"
                                            },
                                            "src": "7946:22:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            }
                                          },
                                          "falseBody": {
                                            "id": 552,
                                            "nodeType": "Block",
                                            "src": "8411:78:0",
                                            "statements": [
                                              {
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "arguments": [
                                                    {
                                                      "argumentTypes": null,
                                                      "hexValue": "556e737570706f727465642030784150492066756e6374696f6e2073656c6563746f72",
                                                      "id": 549,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "kind": "string",
                                                      "lValueRequested": false,
                                                      "nodeType": "Literal",
                                                      "src": "8436:37:0",
                                                      "subdenomination": null,
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_stringliteral_3696fb1968f43604385ee73f7c7aec4c371746ba04c42574a391eca03db46754",
                                                        "typeString": "literal_string \"Unsupported 0xAPI function selector\""
                                                      },
                                                      "value": "Unsupported 0xAPI function selector"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_stringliteral_3696fb1968f43604385ee73f7c7aec4c371746ba04c42574a391eca03db46754",
                                                        "typeString": "literal_string \"Unsupported 0xAPI function selector\""
                                                      }
                                                    ],
                                                    "id": 548,
                                                    "name": "revert",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [
                                                      -19,
                                                      -19
                                                    ],
                                                    "referencedDeclaration": -19,
                                                    "src": "8429:6:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                      "typeString": "function (string memory) pure"
                                                    }
                                                  },
                                                  "id": 550,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "kind": "functionCall",
                                                  "lValueRequested": false,
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "8429:45:0",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                  }
                                                },
                                                "id": 551,
                                                "nodeType": "ExpressionStatement",
                                                "src": "8429:45:0"
                                              }
                                            ]
                                          },
                                          "id": 553,
                                          "nodeType": "IfStatement",
                                          "src": "7942:547:0",
                                          "trueBody": {
                                            "id": 547,
                                            "nodeType": "Block",
                                            "src": "7970:435:0",
                                            "statements": [
                                              {
                                                "assignments": [
                                                  500
                                                ],
                                                "declarations": [
                                                  {
                                                    "constant": false,
                                                    "id": 500,
                                                    "mutability": "mutable",
                                                    "name": "tokens",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 547,
                                                    "src": "8044:23:0",
                                                    "stateVariable": false,
                                                    "storageLocation": "memory",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                                      "typeString": "address[]"
                                                    },
                                                    "typeName": {
                                                      "baseType": {
                                                        "id": 498,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "8044:7:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_address",
                                                          "typeString": "address"
                                                        }
                                                      },
                                                      "id": 499,
                                                      "length": null,
                                                      "nodeType": "ArrayTypeName",
                                                      "src": "8044:9:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                                        "typeString": "address[]"
                                                      }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                  }
                                                ],
                                                "id": 501,
                                                "initialValue": null,
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "8044:23:0"
                                              },
                                              {
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 522,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                      {
                                                        "argumentTypes": null,
                                                        "id": 502,
                                                        "name": "tokens",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 500,
                                                        "src": "8086:6:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                                          "typeString": "address[] memory"
                                                        }
                                                      },
                                                      null,
                                                      {
                                                        "argumentTypes": null,
                                                        "id": 503,
                                                        "name": "inputTokenAmount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 115,
                                                        "src": "8096:16:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      {
                                                        "argumentTypes": null,
                                                        "id": 504,
                                                        "name": "minOutputTokenAmount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 118,
                                                        "src": "8114:20:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      }
                                                    ],
                                                    "id": 505,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "8085:50:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_tuple$_t_array$_t_address_$dyn_memory_ptr_$__$_t_uint256_$_t_uint256_$",
                                                      "typeString": "tuple(address[] memory,,uint256,uint256)"
                                                    }
                                                  },
                                                  "nodeType": "Assignment",
                                                  "operator": "=",
                                                  "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                      {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                          "argumentTypes": null,
                                                          "id": 508,
                                                          "name": "_data",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 93,
                                                          "src": "8166:5:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                          }
                                                        },
                                                        "endExpression": null,
                                                        "id": 510,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexRangeAccess",
                                                        "src": "8166:9:0",
                                                        "startExpression": {
                                                          "argumentTypes": null,
                                                          "hexValue": "34",
                                                          "id": 509,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "kind": "number",
                                                          "lValueRequested": false,
                                                          "nodeType": "Literal",
                                                          "src": "8172:1:0",
                                                          "subdenomination": null,
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_4_by_1",
                                                            "typeString": "int_const 4"
                                                          },
                                                          "value": "4"
                                                        },
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                                          "typeString": "bytes calldata slice"
                                                        }
                                                      },
                                                      {
                                                        "argumentTypes": null,
                                                        "components": [
                                                          {
                                                            "argumentTypes": null,
                                                            "baseExpression": {
                                                              "argumentTypes": null,
                                                              "id": 512,
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": true,
                                                              "lValueRequested": false,
                                                              "nodeType": "ElementaryTypeNameExpression",
                                                              "src": "8178:7:0",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_address_$",
                                                                "typeString": "type(address)"
                                                              },
                                                              "typeName": {
                                                                "id": 511,
                                                                "name": "address",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "8178:7:0",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": null,
                                                                  "typeString": null
                                                                }
                                                              }
                                                            },
                                                            "id": 513,
                                                            "indexExpression": null,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "8178:9:0",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_type$_t_array$_t_address_$dyn_memory_ptr_$",
                                                              "typeString": "type(address[] memory)"
                                                            }
                                                          },
                                                          {
                                                            "argumentTypes": null,
                                                            "id": 515,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "8189:7:0",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_type$_t_uint256_$",
                                                              "typeString": "type(uint256)"
                                                            },
                                                            "typeName": {
                                                              "id": 514,
                                                              "name": "uint256",
                                                              "nodeType": "ElementaryTypeName",
                                                              "src": "8189:7:0",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                              }
                                                            }
                                                          },
                                                          {
                                                            "argumentTypes": null,
                                                            "id": 517,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "8198:7:0",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_type$_t_uint256_$",
                                                              "typeString": "type(uint256)"
                                                            },
                                                            "typeName": {
                                                              "id": 516,
                                                              "name": "uint256",
                                                              "nodeType": "ElementaryTypeName",
                                                              "src": "8198:7:0",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                              }
                                                            }
                                                          },
                                                          {
                                                            "argumentTypes": null,
                                                            "id": 519,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "8207:7:0",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_type$_t_uint256_$",
                                                              "typeString": "type(uint256)"
                                                            },
                                                            "typeName": {
                                                              "id": 518,
                                                              "name": "uint256",
                                                              "nodeType": "ElementaryTypeName",
                                                              "src": "8207:7:0",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                              }
                                                            }
                                                          }
                                                        ],
                                                        "id": 520,
                                                        "isConstant": false,
                                                        "isInlineArray": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "TupleExpression",
                                                        "src": "8177:38:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_tuple$_t_type$_t_array$_t_address_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                                                          "typeString": "tuple(type(address[] memory),type(uint256),type(uint256),type(uint256))"
                                                        }
                                                      }
                                                    ],
                                                    "expression": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                                          "typeString": "bytes calldata slice"
                                                        },
                                                        {
                                                          "typeIdentifier": "t_tuple$_t_type$_t_array$_t_address_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                                                          "typeString": "tuple(type(address[] memory),type(uint256),type(uint256),type(uint256))"
                                                        }
                                                      ],
                                                      "expression": {
                                                        "argumentTypes": null,
                                                        "id": 506,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -1,
                                                        "src": "8155:3:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_magic_abi",
                                                          "typeString": "abi"
                                                        }
                                                      },
                                                      "id": 507,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "memberName": "decode",
                                                      "nodeType": "MemberAccess",
                                                      "referencedDeclaration": null,
                                                      "src": "8155:10:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                        "typeString": "function () pure"
                                                      }
                                                    },
                                                    "id": 521,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "8155:61:0",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                                      "typeString": "tuple(address[] memory,uint256,uint256,uint256)"
                                                    }
                                                  },
                                                  "src": "8085:131:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                  }
                                                },
                                                "id": 523,
                                                "nodeType": "ExpressionStatement",
                                                "src": "8085:131:0"
                                              },
                                              {
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "arguments": [
                                                    {
                                                      "argumentTypes": null,
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "id": 528,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "leftExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                          "argumentTypes": null,
                                                          "id": 525,
                                                          "name": "tokens",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 500,
                                                          "src": "8242:6:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                                            "typeString": "address[] memory"
                                                          }
                                                        },
                                                        "id": 526,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "length",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "8242:13:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "nodeType": "BinaryOperation",
                                                      "operator": ">",
                                                      "rightExpression": {
                                                        "argumentTypes": null,
                                                        "hexValue": "31",
                                                        "id": 527,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "8258:1:0",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_rational_1_by_1",
                                                          "typeString": "int_const 1"
                                                        },
                                                        "value": "1"
                                                      },
                                                      "src": "8242:17:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                      }
                                                    },
                                                    {
                                                      "argumentTypes": null,
                                                      "hexValue": "4d756c7469686f7020746f6b656e207061746820746f6f2073686f7274",
                                                      "id": 529,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "kind": "string",
                                                      "lValueRequested": false,
                                                      "nodeType": "Literal",
                                                      "src": "8261:31:0",
                                                      "subdenomination": null,
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_stringliteral_4c98cec1907b575d6239ce27afd6603a21696f91f4e23cad961d7391ffa6a269",
                                                        "typeString": "literal_string \"Multihop token path too short\""
                                                      },
                                                      "value": "Multihop token path too short"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                      },
                                                      {
                                                        "typeIdentifier": "t_stringliteral_4c98cec1907b575d6239ce27afd6603a21696f91f4e23cad961d7391ffa6a269",
                                                        "typeString": "literal_string \"Multihop token path too short\""
                                                      }
                                                    ],
                                                    "id": 524,
                                                    "name": "require",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [
                                                      -18,
                                                      -18
                                                    ],
                                                    "referencedDeclaration": -18,
                                                    "src": "8234:7:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                      "typeString": "function (bool,string memory) pure"
                                                    }
                                                  },
                                                  "id": 530,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "kind": "functionCall",
                                                  "lValueRequested": false,
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "8234:59:0",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                  }
                                                },
                                                "id": 531,
                                                "nodeType": "ExpressionStatement",
                                                "src": "8234:59:0"
                                              },
                                              {
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 536,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "id": 532,
                                                    "name": "inputToken",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 103,
                                                    "src": "8311:10:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  },
                                                  "nodeType": "Assignment",
                                                  "operator": "=",
                                                  "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                      "argumentTypes": null,
                                                      "id": 533,
                                                      "name": "tokens",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 500,
                                                      "src": "8324:6:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                                        "typeString": "address[] memory"
                                                      }
                                                    },
                                                    "id": 535,
                                                    "indexExpression": {
                                                      "argumentTypes": null,
                                                      "hexValue": "30",
                                                      "id": 534,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "kind": "number",
                                                      "lValueRequested": false,
                                                      "nodeType": "Literal",
                                                      "src": "8331:1:0",
                                                      "subdenomination": null,
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                      },
                                                      "value": "0"
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "8324:9:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  },
                                                  "src": "8311:22:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                },
                                                "id": 537,
                                                "nodeType": "ExpressionStatement",
                                                "src": "8311:22:0"
                                              },
                                              {
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 545,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "id": 538,
                                                    "name": "outputToken",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 106,
                                                    "src": "8351:11:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  },
                                                  "nodeType": "Assignment",
                                                  "operator": "=",
                                                  "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                      "argumentTypes": null,
                                                      "id": 539,
                                                      "name": "tokens",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 500,
                                                      "src": "8365:6:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                                        "typeString": "address[] memory"
                                                      }
                                                    },
                                                    "id": 544,
                                                    "indexExpression": {
                                                      "argumentTypes": null,
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "id": 543,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "leftExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                          "argumentTypes": null,
                                                          "id": 540,
                                                          "name": "tokens",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 500,
                                                          "src": "8372:6:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                                            "typeString": "address[] memory"
                                                          }
                                                        },
                                                        "id": 541,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "length",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "8372:13:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "nodeType": "BinaryOperation",
                                                      "operator": "-",
                                                      "rightExpression": {
                                                        "argumentTypes": null,
                                                        "hexValue": "31",
                                                        "id": 542,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "8388:1:0",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_rational_1_by_1",
                                                          "typeString": "int_const 1"
                                                        },
                                                        "value": "1"
                                                      },
                                                      "src": "8372:17:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "8365:25:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  },
                                                  "src": "8351:39:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                },
                                                "id": 546,
                                                "nodeType": "ExpressionStatement",
                                                "src": "8351:39:0"
                                              }
                                            ]
                                          }
                                        },
                                        "id": 554,
                                        "nodeType": "IfStatement",
                                        "src": "7667:822:0",
                                        "trueBody": {
                                          "id": 492,
                                          "nodeType": "Block",
                                          "src": "7695:241:0",
                                          "statements": [
                                            {
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 490,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                  "argumentTypes": null,
                                                  "components": [
                                                    {
                                                      "argumentTypes": null,
                                                      "id": 468,
                                                      "name": "inputToken",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 103,
                                                      "src": "7767:10:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                      }
                                                    },
                                                    {
                                                      "argumentTypes": null,
                                                      "id": 469,
                                                      "name": "outputToken",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 106,
                                                      "src": "7779:11:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                      }
                                                    },
                                                    null,
                                                    {
                                                      "argumentTypes": null,
                                                      "id": 470,
                                                      "name": "inputTokenAmount",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 115,
                                                      "src": "7794:16:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    },
                                                    {
                                                      "argumentTypes": null,
                                                      "id": 471,
                                                      "name": "minOutputTokenAmount",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 118,
                                                      "src": "7812:20:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    }
                                                  ],
                                                  "id": 472,
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": true,
                                                  "nodeType": "TupleExpression",
                                                  "src": "7766:67:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$_t_address_$_t_address_$__$_t_uint256_$_t_uint256_$",
                                                    "typeString": "tuple(address,address,,uint256,uint256)"
                                                  }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                  "argumentTypes": null,
                                                  "arguments": [
                                                    {
                                                      "argumentTypes": null,
                                                      "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 475,
                                                        "name": "_data",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 93,
                                                        "src": "7864:5:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_bytes_calldata_ptr",
                                                          "typeString": "bytes calldata"
                                                        }
                                                      },
                                                      "endExpression": null,
                                                      "id": 477,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "nodeType": "IndexRangeAccess",
                                                      "src": "7864:9:0",
                                                      "startExpression": {
                                                        "argumentTypes": null,
                                                        "hexValue": "34",
                                                        "id": 476,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "7870:1:0",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_rational_4_by_1",
                                                          "typeString": "int_const 4"
                                                        },
                                                        "value": "4"
                                                      },
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                                        "typeString": "bytes calldata slice"
                                                      }
                                                    },
                                                    {
                                                      "argumentTypes": null,
                                                      "components": [
                                                        {
                                                          "argumentTypes": null,
                                                          "id": 479,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "nodeType": "ElementaryTypeNameExpression",
                                                          "src": "7876:7:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                          },
                                                          "typeName": {
                                                            "id": 478,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "7876:7:0",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": null,
                                                              "typeString": null
                                                            }
                                                          }
                                                        },
                                                        {
                                                          "argumentTypes": null,
                                                          "id": 481,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "nodeType": "ElementaryTypeNameExpression",
                                                          "src": "7885:7:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                          },
                                                          "typeName": {
                                                            "id": 480,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "7885:7:0",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": null,
                                                              "typeString": null
                                                            }
                                                          }
                                                        },
                                                        {
                                                          "argumentTypes": null,
                                                          "id": 483,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "nodeType": "ElementaryTypeNameExpression",
                                                          "src": "7894:7:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                          },
                                                          "typeName": {
                                                            "id": 482,
                                                            "name": "uint256",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "7894:7:0",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": null,
                                                              "typeString": null
                                                            }
                                                          }
                                                        },
                                                        {
                                                          "argumentTypes": null,
                                                          "id": 485,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "nodeType": "ElementaryTypeNameExpression",
                                                          "src": "7903:7:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                          },
                                                          "typeName": {
                                                            "id": 484,
                                                            "name": "uint256",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "7903:7:0",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": null,
                                                              "typeString": null
                                                            }
                                                          }
                                                        },
                                                        {
                                                          "argumentTypes": null,
                                                          "id": 487,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "nodeType": "ElementaryTypeNameExpression",
                                                          "src": "7912:7:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                          },
                                                          "typeName": {
                                                            "id": 486,
                                                            "name": "uint256",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "7912:7:0",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": null,
                                                              "typeString": null
                                                            }
                                                          }
                                                        }
                                                      ],
                                                      "id": 488,
                                                      "isConstant": false,
                                                      "isInlineArray": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "nodeType": "TupleExpression",
                                                      "src": "7875:45:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                                                        "typeString": "tuple(type(address),type(address),type(uint256),type(uint256),type(uint256))"
                                                      }
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                                        "typeString": "bytes calldata slice"
                                                      },
                                                      {
                                                        "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                                                        "typeString": "tuple(type(address),type(address),type(uint256),type(uint256),type(uint256))"
                                                      }
                                                    ],
                                                    "expression": {
                                                      "argumentTypes": null,
                                                      "id": 473,
                                                      "name": "abi",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": -1,
                                                      "src": "7853:3:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_abi",
                                                        "typeString": "abi"
                                                      }
                                                    },
                                                    "id": 474,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "decode",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "7853:10:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                      "typeString": "function () pure"
                                                    }
                                                  },
                                                  "id": 489,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "kind": "functionCall",
                                                  "lValueRequested": false,
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "7853:68:0",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$_t_address_payable_$_t_address_payable_$_t_uint256_$_t_uint256_$_t_uint256_$",
                                                    "typeString": "tuple(address payable,address payable,uint256,uint256,uint256)"
                                                  }
                                                },
                                                "src": "7766:155:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_tuple$__$",
                                                  "typeString": "tuple()"
                                                }
                                              },
                                              "id": 491,
                                              "nodeType": "ExpressionStatement",
                                              "src": "7766:155:0"
                                            }
                                          ]
                                        }
                                      },
                                      "id": 555,
                                      "nodeType": "IfStatement",
                                      "src": "7108:1381:0",
                                      "trueBody": {
                                        "id": 464,
                                        "nodeType": "Block",
                                        "src": "7136:525:0",
                                        "statements": [
                                          {
                                            "assignments": [
                                              416
                                            ],
                                            "declarations": [
                                              {
                                                "constant": false,
                                                "id": 416,
                                                "mutability": "mutable",
                                                "name": "encodedPath",
                                                "nodeType": "VariableDeclaration",
                                                "overrides": null,
                                                "scope": 464,
                                                "src": "7204:24:0",
                                                "stateVariable": false,
                                                "storageLocation": "memory",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes_memory_ptr",
                                                  "typeString": "bytes"
                                                },
                                                "typeName": {
                                                  "id": 415,
                                                  "name": "bytes",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "7204:5:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                  }
                                                },
                                                "value": null,
                                                "visibility": "internal"
                                              }
                                            ],
                                            "id": 417,
                                            "initialValue": null,
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "7204:24:0"
                                          },
                                          {
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 438,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftHandSide": {
                                                "argumentTypes": null,
                                                "components": [
                                                  {
                                                    "argumentTypes": null,
                                                    "id": 418,
                                                    "name": "encodedPath",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 416,
                                                    "src": "7247:11:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_bytes_memory_ptr",
                                                      "typeString": "bytes memory"
                                                    }
                                                  },
                                                  {
                                                    "argumentTypes": null,
                                                    "id": 419,
                                                    "name": "inputTokenAmount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 115,
                                                    "src": "7260:16:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  {
                                                    "argumentTypes": null,
                                                    "id": 420,
                                                    "name": "minOutputTokenAmount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 118,
                                                    "src": "7278:20:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  {
                                                    "argumentTypes": null,
                                                    "id": 421,
                                                    "name": "recipient",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 109,
                                                    "src": "7300:9:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  }
                                                ],
                                                "id": 422,
                                                "isConstant": false,
                                                "isInlineArray": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": true,
                                                "nodeType": "TupleExpression",
                                                "src": "7246:64:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_address_$",
                                                  "typeString": "tuple(bytes memory,uint256,uint256,address)"
                                                }
                                              },
                                              "nodeType": "Assignment",
                                              "operator": "=",
                                              "rightHandSide": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                  {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                      "argumentTypes": null,
                                                      "id": 425,
                                                      "name": "_data",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 93,
                                                      "src": "7344:5:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                      }
                                                    },
                                                    "endExpression": null,
                                                    "id": 427,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexRangeAccess",
                                                    "src": "7344:9:0",
                                                    "startExpression": {
                                                      "argumentTypes": null,
                                                      "hexValue": "34",
                                                      "id": 426,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "kind": "number",
                                                      "lValueRequested": false,
                                                      "nodeType": "Literal",
                                                      "src": "7350:1:0",
                                                      "subdenomination": null,
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_4_by_1",
                                                        "typeString": "int_const 4"
                                                      },
                                                      "value": "4"
                                                    },
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                                      "typeString": "bytes calldata slice"
                                                    }
                                                  },
                                                  {
                                                    "argumentTypes": null,
                                                    "components": [
                                                      {
                                                        "argumentTypes": null,
                                                        "id": 429,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "7356:5:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                          "typeString": "type(bytes storage pointer)"
                                                        },
                                                        "typeName": {
                                                          "id": 428,
                                                          "name": "bytes",
                                                          "nodeType": "ElementaryTypeName",
                                                          "src": "7356:5:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                          }
                                                        }
                                                      },
                                                      {
                                                        "argumentTypes": null,
                                                        "id": 431,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "7363:7:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_type$_t_uint256_$",
                                                          "typeString": "type(uint256)"
                                                        },
                                                        "typeName": {
                                                          "id": 430,
                                                          "name": "uint256",
                                                          "nodeType": "ElementaryTypeName",
                                                          "src": "7363:7:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                          }
                                                        }
                                                      },
                                                      {
                                                        "argumentTypes": null,
                                                        "id": 433,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "7372:7:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_type$_t_uint256_$",
                                                          "typeString": "type(uint256)"
                                                        },
                                                        "typeName": {
                                                          "id": 432,
                                                          "name": "uint256",
                                                          "nodeType": "ElementaryTypeName",
                                                          "src": "7372:7:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                          }
                                                        }
                                                      },
                                                      {
                                                        "argumentTypes": null,
                                                        "id": 435,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "7381:7:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_type$_t_address_$",
                                                          "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                          "id": 434,
                                                          "name": "address",
                                                          "nodeType": "ElementaryTypeName",
                                                          "src": "7381:7:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                          }
                                                        }
                                                      }
                                                    ],
                                                    "id": 436,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "7355:34:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_tuple$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_address_$_$",
                                                      "typeString": "tuple(type(bytes storage pointer),type(uint256),type(uint256),type(address))"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                                      "typeString": "bytes calldata slice"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_tuple$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_address_$_$",
                                                      "typeString": "tuple(type(bytes storage pointer),type(uint256),type(uint256),type(address))"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": null,
                                                    "id": 423,
                                                    "name": "abi",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -1,
                                                    "src": "7333:3:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_magic_abi",
                                                      "typeString": "abi"
                                                    }
                                                  },
                                                  "id": 424,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "memberName": "decode",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": null,
                                                  "src": "7333:10:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                    "typeString": "function () pure"
                                                  }
                                                },
                                                "id": 437,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "7333:57:0",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_address_payable_$",
                                                  "typeString": "tuple(bytes memory,uint256,uint256,address payable)"
                                                }
                                              },
                                              "src": "7246:144:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$__$",
                                                "typeString": "tuple()"
                                              }
                                            },
                                            "id": 439,
                                            "nodeType": "ExpressionStatement",
                                            "src": "7246:144:0"
                                          },
                                          {
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 442,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftHandSide": {
                                                "argumentTypes": null,
                                                "id": 440,
                                                "name": "supportsRecipient",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 112,
                                                "src": "7408:17:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                }
                                              },
                                              "nodeType": "Assignment",
                                              "operator": "=",
                                              "rightHandSide": {
                                                "argumentTypes": null,
                                                "hexValue": "74727565",
                                                "id": 441,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "bool",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7428:4:0",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                },
                                                "value": "true"
                                              },
                                              "src": "7408:24:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                              }
                                            },
                                            "id": 443,
                                            "nodeType": "ExpressionStatement",
                                            "src": "7408:24:0"
                                          },
                                          {
                                            "condition": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              },
                                              "id": 449,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "argumentTypes": null,
                                                "id": 444,
                                                "name": "recipient",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 109,
                                                "src": "7454:9:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "==",
                                              "rightExpression": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                  {
                                                    "argumentTypes": null,
                                                    "hexValue": "30",
                                                    "id": 447,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "7475:1:0",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_0_by_1",
                                                      "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_rational_0_by_1",
                                                      "typeString": "int_const 0"
                                                    }
                                                  ],
                                                  "id": 446,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "nodeType": "ElementaryTypeNameExpression",
                                                  "src": "7467:7:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_address_$",
                                                    "typeString": "type(address)"
                                                  },
                                                  "typeName": {
                                                    "id": 445,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "7467:7:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": null,
                                                      "typeString": null
                                                    }
                                                  }
                                                },
                                                "id": 448,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "7467:10:0",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address_payable",
                                                  "typeString": "address payable"
                                                }
                                              },
                                              "src": "7454:23:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                              }
                                            },
                                            "falseBody": null,
                                            "id": 455,
                                            "nodeType": "IfStatement",
                                            "src": "7450:101:0",
                                            "trueBody": {
                                              "id": 454,
                                              "nodeType": "Block",
                                              "src": "7479:72:0",
                                              "statements": [
                                                {
                                                  "expression": {
                                                    "argumentTypes": null,
                                                    "id": 452,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                      "argumentTypes": null,
                                                      "id": 450,
                                                      "name": "recipient",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 109,
                                                      "src": "7501:9:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                      }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                      "argumentTypes": null,
                                                      "id": 451,
                                                      "name": "_destinationAddress",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 87,
                                                      "src": "7513:19:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                      }
                                                    },
                                                    "src": "7501:31:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  },
                                                  "id": 453,
                                                  "nodeType": "ExpressionStatement",
                                                  "src": "7501:31:0"
                                                }
                                              ]
                                            }
                                          },
                                          {
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 462,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftHandSide": {
                                                "argumentTypes": null,
                                                "components": [
                                                  {
                                                    "argumentTypes": null,
                                                    "id": 456,
                                                    "name": "inputToken",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 103,
                                                    "src": "7569:10:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  },
                                                  {
                                                    "argumentTypes": null,
                                                    "id": 457,
                                                    "name": "outputToken",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 106,
                                                    "src": "7581:11:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  }
                                                ],
                                                "id": 458,
                                                "isConstant": false,
                                                "isInlineArray": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": true,
                                                "nodeType": "TupleExpression",
                                                "src": "7568:25:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                                                  "typeString": "tuple(address,address)"
                                                }
                                              },
                                              "nodeType": "Assignment",
                                              "operator": "=",
                                              "rightHandSide": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                  {
                                                    "argumentTypes": null,
                                                    "id": 460,
                                                    "name": "encodedPath",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 416,
                                                    "src": "7634:11:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_bytes_memory_ptr",
                                                      "typeString": "bytes memory"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_bytes_memory_ptr",
                                                      "typeString": "bytes memory"
                                                    }
                                                  ],
                                                  "id": 459,
                                                  "name": "_decodeTokensFromUniswapV3EncodedPath",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 690,
                                                  "src": "7596:37:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$_t_address_$",
                                                    "typeString": "function (bytes memory) pure returns (address,address)"
                                                  }
                                                },
                                                "id": 461,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "7596:50:0",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                                                  "typeString": "tuple(address,address)"
                                                }
                                              },
                                              "src": "7568:78:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$__$",
                                                "typeString": "tuple()"
                                              }
                                            },
                                            "id": 463,
                                            "nodeType": "ExpressionStatement",
                                            "src": "7568:78:0"
                                          }
                                        ]
                                      }
                                    },
                                    "id": 556,
                                    "nodeType": "IfStatement",
                                    "src": "6205:2284:0",
                                    "trueBody": {
                                      "id": 411,
                                      "nodeType": "Block",
                                      "src": "6233:869:0",
                                      "statements": [
                                        {
                                          "assignments": [
                                            318
                                          ],
                                          "declarations": [
                                            {
                                              "constant": false,
                                              "id": 318,
                                              "mutability": "mutable",
                                              "name": "orders",
                                              "nodeType": "VariableDeclaration",
                                              "overrides": null,
                                              "scope": 411,
                                              "src": "6291:24:0",
                                              "stateVariable": false,
                                              "storageLocation": "memory",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_RfqOrder_$24_memory_ptr_$dyn_memory_ptr",
                                                "typeString": "struct ZeroExApiAdapter.RfqOrder[]"
                                              },
                                              "typeName": {
                                                "baseType": {
                                                  "contractScope": null,
                                                  "id": 316,
                                                  "name": "RfqOrder",
                                                  "nodeType": "UserDefinedTypeName",
                                                  "referencedDeclaration": 24,
                                                  "src": "6291:8:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RfqOrder_$24_storage_ptr",
                                                    "typeString": "struct ZeroExApiAdapter.RfqOrder"
                                                  }
                                                },
                                                "id": 317,
                                                "length": null,
                                                "nodeType": "ArrayTypeName",
                                                "src": "6291:10:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_array$_t_struct$_RfqOrder_$24_storage_$dyn_storage_ptr",
                                                  "typeString": "struct ZeroExApiAdapter.RfqOrder[]"
                                                }
                                              },
                                              "value": null,
                                              "visibility": "internal"
                                            }
                                          ],
                                          "id": 319,
                                          "initialValue": null,
                                          "nodeType": "VariableDeclarationStatement",
                                          "src": "6291:24:0"
                                        },
                                        {
                                          "assignments": [
                                            324
                                          ],
                                          "declarations": [
                                            {
                                              "constant": false,
                                              "id": 324,
                                              "mutability": "mutable",
                                              "name": "takerTokenFillAmounts",
                                              "nodeType": "VariableDeclaration",
                                              "overrides": null,
                                              "scope": 411,
                                              "src": "6333:38:0",
                                              "stateVariable": false,
                                              "storageLocation": "memory",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                                "typeString": "uint128[]"
                                              },
                                              "typeName": {
                                                "baseType": {
                                                  "id": 322,
                                                  "name": "uint128",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "6333:7:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint128",
                                                    "typeString": "uint128"
                                                  }
                                                },
                                                "id": 323,
                                                "length": null,
                                                "nodeType": "ArrayTypeName",
                                                "src": "6333:9:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                                                  "typeString": "uint128[]"
                                                }
                                              },
                                              "value": null,
                                              "visibility": "internal"
                                            }
                                          ],
                                          "id": 325,
                                          "initialValue": null,
                                          "nodeType": "VariableDeclarationStatement",
                                          "src": "6333:38:0"
                                        },
                                        {
                                          "assignments": [
                                            327
                                          ],
                                          "declarations": [
                                            {
                                              "constant": false,
                                              "id": 327,
                                              "mutability": "mutable",
                                              "name": "revertIfIncomplete",
                                              "nodeType": "VariableDeclaration",
                                              "overrides": null,
                                              "scope": 411,
                                              "src": "6389:23:0",
                                              "stateVariable": false,
                                              "storageLocation": "default",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                              },
                                              "typeName": {
                                                "id": 326,
                                                "name": "bool",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "6389:4:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                }
                                              },
                                              "value": null,
                                              "visibility": "internal"
                                            }
                                          ],
                                          "id": 328,
                                          "initialValue": null,
                                          "nodeType": "VariableDeclarationStatement",
                                          "src": "6389:23:0"
                                        },
                                        {
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 349,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftHandSide": {
                                              "argumentTypes": null,
                                              "components": [
                                                {
                                                  "argumentTypes": null,
                                                  "id": 329,
                                                  "name": "orders",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 318,
                                                  "src": "6431:6:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_struct$_RfqOrder_$24_memory_ptr_$dyn_memory_ptr",
                                                    "typeString": "struct ZeroExApiAdapter.RfqOrder memory[] memory"
                                                  }
                                                },
                                                null,
                                                {
                                                  "argumentTypes": null,
                                                  "id": 330,
                                                  "name": "takerTokenFillAmounts",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 324,
                                                  "src": "6441:21:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                                    "typeString": "uint128[] memory"
                                                  }
                                                },
                                                {
                                                  "argumentTypes": null,
                                                  "id": 331,
                                                  "name": "revertIfIncomplete",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 327,
                                                  "src": "6464:18:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                  }
                                                }
                                              ],
                                              "id": 332,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": true,
                                              "nodeType": "TupleExpression",
                                              "src": "6430:53:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_array$_t_struct$_RfqOrder_$24_memory_ptr_$dyn_memory_ptr_$__$_t_array$_t_uint128_$dyn_memory_ptr_$_t_bool_$",
                                                "typeString": "tuple(struct ZeroExApiAdapter.RfqOrder memory[] memory,,uint128[] memory,bool)"
                                              }
                                            },
                                            "nodeType": "Assignment",
                                            "operator": "=",
                                            "rightHandSide": {
                                              "argumentTypes": null,
                                              "arguments": [
                                                {
                                                  "argumentTypes": null,
                                                  "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 335,
                                                    "name": "_data",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 93,
                                                    "src": "6517:5:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                                      "typeString": "bytes calldata"
                                                    }
                                                  },
                                                  "endExpression": null,
                                                  "id": 337,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "nodeType": "IndexRangeAccess",
                                                  "src": "6517:9:0",
                                                  "startExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "34",
                                                    "id": 336,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "6523:1:0",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_4_by_1",
                                                      "typeString": "int_const 4"
                                                    },
                                                    "value": "4"
                                                  },
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                                    "typeString": "bytes calldata slice"
                                                  }
                                                },
                                                {
                                                  "argumentTypes": null,
                                                  "components": [
                                                    {
                                                      "argumentTypes": null,
                                                      "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 338,
                                                        "name": "RfqOrder",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 24,
                                                        "src": "6529:8:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_type$_t_struct$_RfqOrder_$24_storage_ptr_$",
                                                          "typeString": "type(struct ZeroExApiAdapter.RfqOrder storage pointer)"
                                                        }
                                                      },
                                                      "id": 339,
                                                      "indexExpression": null,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "nodeType": "IndexAccess",
                                                      "src": "6529:10:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_array$_t_struct$_RfqOrder_$24_memory_ptr_$dyn_memory_ptr_$",
                                                        "typeString": "type(struct ZeroExApiAdapter.RfqOrder memory[] memory)"
                                                      }
                                                    },
                                                    {
                                                      "argumentTypes": null,
                                                      "id": 341,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "nodeType": "ElementaryTypeNameExpression",
                                                      "src": "6541:7:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_uint256_$",
                                                        "typeString": "type(uint256)"
                                                      },
                                                      "typeName": {
                                                        "id": 340,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "6541:7:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": null,
                                                          "typeString": null
                                                        }
                                                      }
                                                    },
                                                    {
                                                      "argumentTypes": null,
                                                      "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 343,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "6550:7:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_type$_t_uint128_$",
                                                          "typeString": "type(uint128)"
                                                        },
                                                        "typeName": {
                                                          "id": 342,
                                                          "name": "uint128",
                                                          "nodeType": "ElementaryTypeName",
                                                          "src": "6550:7:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                          }
                                                        }
                                                      },
                                                      "id": 344,
                                                      "indexExpression": null,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "nodeType": "IndexAccess",
                                                      "src": "6550:9:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_array$_t_uint128_$dyn_memory_ptr_$",
                                                        "typeString": "type(uint128[] memory)"
                                                      }
                                                    },
                                                    {
                                                      "argumentTypes": null,
                                                      "id": 346,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "nodeType": "ElementaryTypeNameExpression",
                                                      "src": "6561:4:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_bool_$",
                                                        "typeString": "type(bool)"
                                                      },
                                                      "typeName": {
                                                        "id": 345,
                                                        "name": "bool",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "6561:4:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": null,
                                                          "typeString": null
                                                        }
                                                      }
                                                    }
                                                  ],
                                                  "id": 347,
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "nodeType": "TupleExpression",
                                                  "src": "6528:38:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$_t_type$_t_array$_t_struct$_RfqOrder_$24_memory_ptr_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint128_$dyn_memory_ptr_$_$_t_type$_t_bool_$_$",
                                                    "typeString": "tuple(type(struct ZeroExApiAdapter.RfqOrder memory[] memory),type(uint256),type(uint128[] memory),type(bool))"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                                    "typeString": "bytes calldata slice"
                                                  },
                                                  {
                                                    "typeIdentifier": "t_tuple$_t_type$_t_array$_t_struct$_RfqOrder_$24_memory_ptr_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint128_$dyn_memory_ptr_$_$_t_type$_t_bool_$_$",
                                                    "typeString": "tuple(type(struct ZeroExApiAdapter.RfqOrder memory[] memory),type(uint256),type(uint128[] memory),type(bool))"
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 333,
                                                  "name": "abi",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": -1,
                                                  "src": "6506:3:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                  }
                                                },
                                                "id": 334,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "decode",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "6506:10:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                  "typeString": "function () pure"
                                                }
                                              },
                                              "id": 348,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "6506:61:0",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_array$_t_struct$_RfqOrder_$24_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_array$_t_uint128_$dyn_memory_ptr_$_t_bool_$",
                                                "typeString": "tuple(struct ZeroExApiAdapter.RfqOrder memory[] memory,uint256,uint128[] memory,bool)"
                                              }
                                            },
                                            "src": "6430:137:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_tuple$__$",
                                              "typeString": "tuple()"
                                            }
                                          },
                                          "id": 350,
                                          "nodeType": "ExpressionStatement",
                                          "src": "6430:137:0"
                                        },
                                        {
                                          "expression": {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "commonType": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "id": 355,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "argumentTypes": null,
                                                  "expression": {
                                                    "argumentTypes": null,
                                                    "id": 352,
                                                    "name": "orders",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 318,
                                                    "src": "6593:6:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_array$_t_struct$_RfqOrder_$24_memory_ptr_$dyn_memory_ptr",
                                                      "typeString": "struct ZeroExApiAdapter.RfqOrder memory[] memory"
                                                    }
                                                  },
                                                  "id": 353,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberName": "length",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": null,
                                                  "src": "6593:13:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                  "argumentTypes": null,
                                                  "hexValue": "30",
                                                  "id": 354,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "6609:1:0",
                                                  "subdenomination": null,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                  },
                                                  "value": "0"
                                                },
                                                "src": "6593:17:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                }
                                              },
                                              {
                                                "argumentTypes": null,
                                                "hexValue": "456d70747920524651206f7264657273",
                                                "id": 356,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6612:18:0",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_stringliteral_0ba0367e45d06cde2f0f13e22abc39a201b6dd4fb3fa3c71b2be81c0cfb60125",
                                                  "typeString": "literal_string \"Empty RFQ orders\""
                                                },
                                                "value": "Empty RFQ orders"
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                },
                                                {
                                                  "typeIdentifier": "t_stringliteral_0ba0367e45d06cde2f0f13e22abc39a201b6dd4fb3fa3c71b2be81c0cfb60125",
                                                  "typeString": "literal_string \"Empty RFQ orders\""
                                                }
                                              ],
                                              "id": 351,
                                              "name": "require",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [
                                                -18,
                                                -18
                                              ],
                                              "referencedDeclaration": -18,
                                              "src": "6585:7:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                              }
                                            },
                                            "id": 357,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "6585:46:0",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_tuple$__$",
                                              "typeString": "tuple()"
                                            }
                                          },
                                          "id": 358,
                                          "nodeType": "ExpressionStatement",
                                          "src": "6585:46:0"
                                        },
                                        {
                                          "expression": {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "id": 360,
                                                "name": "revertIfIncomplete",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 327,
                                                "src": "6657:18:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                }
                                              },
                                              {
                                                "argumentTypes": null,
                                                "hexValue": "626174636846696c6c5266714f72646572206d75737420626520616c6c206f72206e6f7468696e67",
                                                "id": 361,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6677:42:0",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_stringliteral_e0c3b3633b2a8d22c3996245e0ba638713485c9ad7f19874c3faae4e5380e22b",
                                                  "typeString": "literal_string \"batchFillRfqOrder must be all or nothing\""
                                                },
                                                "value": "batchFillRfqOrder must be all or nothing"
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                },
                                                {
                                                  "typeIdentifier": "t_stringliteral_e0c3b3633b2a8d22c3996245e0ba638713485c9ad7f19874c3faae4e5380e22b",
                                                  "typeString": "literal_string \"batchFillRfqOrder must be all or nothing\""
                                                }
                                              ],
                                              "id": 359,
                                              "name": "require",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [
                                                -18,
                                                -18
                                              ],
                                              "referencedDeclaration": -18,
                                              "src": "6649:7:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                              }
                                            },
                                            "id": 362,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "6649:71:0",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_tuple$__$",
                                              "typeString": "tuple()"
                                            }
                                          },
                                          "id": 363,
                                          "nodeType": "ExpressionStatement",
                                          "src": "6649:71:0"
                                        },
                                        {
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 369,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftHandSide": {
                                              "argumentTypes": null,
                                              "id": 364,
                                              "name": "inputToken",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 103,
                                              "src": "6738:10:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            "nodeType": "Assignment",
                                            "operator": "=",
                                            "rightHandSide": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                  "argumentTypes": null,
                                                  "id": 365,
                                                  "name": "orders",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 318,
                                                  "src": "6751:6:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_struct$_RfqOrder_$24_memory_ptr_$dyn_memory_ptr",
                                                    "typeString": "struct ZeroExApiAdapter.RfqOrder memory[] memory"
                                                  }
                                                },
                                                "id": 367,
                                                "indexExpression": {
                                                  "argumentTypes": null,
                                                  "hexValue": "30",
                                                  "id": 366,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "6758:1:0",
                                                  "subdenomination": null,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                  },
                                                  "value": "0"
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "6751:9:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_RfqOrder_$24_memory_ptr",
                                                  "typeString": "struct ZeroExApiAdapter.RfqOrder memory"
                                                }
                                              },
                                              "id": 368,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "takerToken",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 7,
                                              "src": "6751:20:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            "src": "6738:33:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "id": 370,
                                          "nodeType": "ExpressionStatement",
                                          "src": "6738:33:0"
                                        },
                                        {
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 376,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftHandSide": {
                                              "argumentTypes": null,
                                              "id": 371,
                                              "name": "outputToken",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 106,
                                              "src": "6789:11:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            "nodeType": "Assignment",
                                            "operator": "=",
                                            "rightHandSide": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                  "argumentTypes": null,
                                                  "id": 372,
                                                  "name": "orders",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 318,
                                                  "src": "6803:6:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_struct$_RfqOrder_$24_memory_ptr_$dyn_memory_ptr",
                                                    "typeString": "struct ZeroExApiAdapter.RfqOrder memory[] memory"
                                                  }
                                                },
                                                "id": 374,
                                                "indexExpression": {
                                                  "argumentTypes": null,
                                                  "hexValue": "30",
                                                  "id": 373,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "6810:1:0",
                                                  "subdenomination": null,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                  },
                                                  "value": "0"
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "6803:9:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_RfqOrder_$24_memory_ptr",
                                                  "typeString": "struct ZeroExApiAdapter.RfqOrder memory"
                                                }
                                              },
                                              "id": 375,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "makerToken",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 5,
                                              "src": "6803:20:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            "src": "6789:34:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "id": 377,
                                          "nodeType": "ExpressionStatement",
                                          "src": "6789:34:0"
                                        },
                                        {
                                          "body": {
                                            "id": 409,
                                            "nodeType": "Block",
                                            "src": "6885:203:0",
                                            "statements": [
                                              {
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 396,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "id": 389,
                                                    "name": "inputTokenAmount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 115,
                                                    "src": "6907:16:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "nodeType": "Assignment",
                                                  "operator": "+=",
                                                  "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                      {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                          "argumentTypes": null,
                                                          "id": 392,
                                                          "name": "takerTokenFillAmounts",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 324,
                                                          "src": "6935:21:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                                            "typeString": "uint128[] memory"
                                                          }
                                                        },
                                                        "id": 394,
                                                        "indexExpression": {
                                                          "argumentTypes": null,
                                                          "id": 393,
                                                          "name": "i",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 379,
                                                          "src": "6957:1:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "6935:24:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint128",
                                                          "typeString": "uint128"
                                                        }
                                                      }
                                                    ],
                                                    "expression": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_uint128",
                                                          "typeString": "uint128"
                                                        }
                                                      ],
                                                      "id": 391,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "nodeType": "ElementaryTypeNameExpression",
                                                      "src": "6927:7:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_uint256_$",
                                                        "typeString": "type(uint256)"
                                                      },
                                                      "typeName": {
                                                        "id": 390,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "6927:7:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": null,
                                                          "typeString": null
                                                        }
                                                      }
                                                    },
                                                    "id": 395,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "6927:33:0",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "src": "6907:53:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "id": 397,
                                                "nodeType": "ExpressionStatement",
                                                "src": "6907:53:0"
                                              },
                                              {
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 407,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "id": 398,
                                                    "name": "minOutputTokenAmount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 118,
                                                    "src": "6982:20:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "nodeType": "Assignment",
                                                  "operator": "+=",
                                                  "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                      {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                          "argumentTypes": null,
                                                          "id": 400,
                                                          "name": "orders",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 318,
                                                          "src": "7033:6:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_array$_t_struct$_RfqOrder_$24_memory_ptr_$dyn_memory_ptr",
                                                            "typeString": "struct ZeroExApiAdapter.RfqOrder memory[] memory"
                                                          }
                                                        },
                                                        "id": 402,
                                                        "indexExpression": {
                                                          "argumentTypes": null,
                                                          "id": 401,
                                                          "name": "i",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 379,
                                                          "src": "7040:1:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "7033:9:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_struct$_RfqOrder_$24_memory_ptr",
                                                          "typeString": "struct ZeroExApiAdapter.RfqOrder memory"
                                                        }
                                                      },
                                                      {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                          "argumentTypes": null,
                                                          "id": 403,
                                                          "name": "takerTokenFillAmounts",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 324,
                                                          "src": "7044:21:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                                            "typeString": "uint128[] memory"
                                                          }
                                                        },
                                                        "id": 405,
                                                        "indexExpression": {
                                                          "argumentTypes": null,
                                                          "id": 404,
                                                          "name": "i",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 379,
                                                          "src": "7066:1:0",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "7044:24:0",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint128",
                                                          "typeString": "uint128"
                                                        }
                                                      }
                                                    ],
                                                    "expression": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_struct$_RfqOrder_$24_memory_ptr",
                                                          "typeString": "struct ZeroExApiAdapter.RfqOrder memory"
                                                        },
                                                        {
                                                          "typeIdentifier": "t_uint128",
                                                          "typeString": "uint128"
                                                        }
                                                      ],
                                                      "id": 399,
                                                      "name": "getRfqOrderMakerFillAmount",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 655,
                                                      "src": "7006:26:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_pure$_t_struct$_RfqOrder_$24_memory_ptr_$_t_uint256_$returns$_t_uint256_$",
                                                        "typeString": "function (struct ZeroExApiAdapter.RfqOrder memory,uint256) pure returns (uint256)"
                                                      }
                                                    },
                                                    "id": 406,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "7006:63:0",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "src": "6982:87:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "id": 408,
                                                "nodeType": "ExpressionStatement",
                                                "src": "6982:87:0"
                                              }
                                            ]
                                          },
                                          "condition": {
                                            "argumentTypes": null,
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 385,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "argumentTypes": null,
                                              "id": 382,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 379,
                                              "src": "6861:1:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "<",
                                            "rightExpression": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 383,
                                                "name": "orders",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 318,
                                                "src": "6865:6:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_array$_t_struct$_RfqOrder_$24_memory_ptr_$dyn_memory_ptr",
                                                  "typeString": "struct ZeroExApiAdapter.RfqOrder memory[] memory"
                                                }
                                              },
                                              "id": 384,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "length",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": null,
                                              "src": "6865:13:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "6861:17:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            }
                                          },
                                          "id": 410,
                                          "initializationExpression": {
                                            "assignments": [
                                              379
                                            ],
                                            "declarations": [
                                              {
                                                "constant": false,
                                                "id": 379,
                                                "mutability": "mutable",
                                                "name": "i",
                                                "nodeType": "VariableDeclaration",
                                                "overrides": null,
                                                "scope": 410,
                                                "src": "6846:9:0",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "typeName": {
                                                  "id": 378,
                                                  "name": "uint256",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "6846:7:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "value": null,
                                                "visibility": "internal"
                                              }
                                            ],
                                            "id": 381,
                                            "initialValue": {
                                              "argumentTypes": null,
                                              "hexValue": "30",
                                              "id": 380,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "6858:1:0",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                              },
                                              "value": "0"
                                            },
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "6846:13:0"
                                          },
                                          "loopExpression": {
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 387,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "UnaryOperation",
                                              "operator": "++",
                                              "prefix": true,
                                              "src": "6880:3:0",
                                              "subExpression": {
                                                "argumentTypes": null,
                                                "id": 386,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 379,
                                                "src": "6882:1:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "id": 388,
                                            "nodeType": "ExpressionStatement",
                                            "src": "6880:3:0"
                                          },
                                          "nodeType": "ForStatement",
                                          "src": "6841:247:0"
                                        }
                                      ]
                                    }
                                  },
                                  "id": 557,
                                  "nodeType": "IfStatement",
                                  "src": "5659:2830:0",
                                  "trueBody": {
                                    "id": 311,
                                    "nodeType": "Block",
                                    "src": "5687:512:0",
                                    "statements": [
                                      {
                                        "assignments": [
                                          266
                                        ],
                                        "declarations": [
                                          {
                                            "constant": false,
                                            "id": 266,
                                            "mutability": "mutable",
                                            "name": "order",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 311,
                                            "src": "5739:21:0",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_RfqOrder_$24_memory_ptr",
                                              "typeString": "struct ZeroExApiAdapter.RfqOrder"
                                            },
                                            "typeName": {
                                              "contractScope": null,
                                              "id": 265,
                                              "name": "RfqOrder",
                                              "nodeType": "UserDefinedTypeName",
                                              "referencedDeclaration": 24,
                                              "src": "5739:8:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RfqOrder_$24_storage_ptr",
                                                "typeString": "struct ZeroExApiAdapter.RfqOrder"
                                              }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                          }
                                        ],
                                        "id": 267,
                                        "initialValue": null,
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "5739:21:0"
                                      },
                                      {
                                        "assignments": [
                                          269
                                        ],
                                        "declarations": [
                                          {
                                            "constant": false,
                                            "id": 269,
                                            "mutability": "mutable",
                                            "name": "takerTokenFillAmount",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 311,
                                            "src": "5778:28:0",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint128",
                                              "typeString": "uint128"
                                            },
                                            "typeName": {
                                              "id": 268,
                                              "name": "uint128",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "5778:7:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint128",
                                                "typeString": "uint128"
                                              }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                          }
                                        ],
                                        "id": 270,
                                        "initialValue": null,
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "5778:28:0"
                                      },
                                      {
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 285,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "argumentTypes": null,
                                            "components": [
                                              {
                                                "argumentTypes": null,
                                                "id": 271,
                                                "name": "order",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 266,
                                                "src": "5825:5:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_RfqOrder_$24_memory_ptr",
                                                  "typeString": "struct ZeroExApiAdapter.RfqOrder memory"
                                                }
                                              },
                                              null,
                                              {
                                                "argumentTypes": null,
                                                "id": 272,
                                                "name": "takerTokenFillAmount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 269,
                                                "src": "5834:20:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint128",
                                                  "typeString": "uint128"
                                                }
                                              }
                                            ],
                                            "id": 273,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "TupleExpression",
                                            "src": "5824:31:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_tuple$_t_struct$_RfqOrder_$24_memory_ptr_$__$_t_uint128_$",
                                              "typeString": "tuple(struct ZeroExApiAdapter.RfqOrder memory,,uint128)"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                  "argumentTypes": null,
                                                  "id": 276,
                                                  "name": "_data",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 93,
                                                  "src": "5889:5:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                  }
                                                },
                                                "endExpression": null,
                                                "id": 278,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexRangeAccess",
                                                "src": "5889:9:0",
                                                "startExpression": {
                                                  "argumentTypes": null,
                                                  "hexValue": "34",
                                                  "id": 277,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "5895:1:0",
                                                  "subdenomination": null,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_4_by_1",
                                                    "typeString": "int_const 4"
                                                  },
                                                  "value": "4"
                                                },
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                                  "typeString": "bytes calldata slice"
                                                }
                                              },
                                              {
                                                "argumentTypes": null,
                                                "components": [
                                                  {
                                                    "argumentTypes": null,
                                                    "id": 279,
                                                    "name": "RfqOrder",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 24,
                                                    "src": "5901:8:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_struct$_RfqOrder_$24_storage_ptr_$",
                                                      "typeString": "type(struct ZeroExApiAdapter.RfqOrder storage pointer)"
                                                    }
                                                  },
                                                  {
                                                    "argumentTypes": null,
                                                    "id": 280,
                                                    "name": "Signature",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 33,
                                                    "src": "5911:9:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_struct$_Signature_$33_storage_ptr_$",
                                                      "typeString": "type(struct ZeroExApiAdapter.Signature storage pointer)"
                                                    }
                                                  },
                                                  {
                                                    "argumentTypes": null,
                                                    "id": 282,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "5922:7:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_uint128_$",
                                                      "typeString": "type(uint128)"
                                                    },
                                                    "typeName": {
                                                      "id": 281,
                                                      "name": "uint128",
                                                      "nodeType": "ElementaryTypeName",
                                                      "src": "5922:7:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": null,
                                                        "typeString": null
                                                      }
                                                    }
                                                  }
                                                ],
                                                "id": 283,
                                                "isConstant": false,
                                                "isInlineArray": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "TupleExpression",
                                                "src": "5900:30:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_tuple$_t_type$_t_struct$_RfqOrder_$24_storage_ptr_$_$_t_type$_t_struct$_Signature_$33_storage_ptr_$_$_t_type$_t_uint128_$_$",
                                                  "typeString": "tuple(type(struct ZeroExApiAdapter.RfqOrder storage pointer),type(struct ZeroExApiAdapter.Signature storage pointer),type(uint128))"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                                  "typeString": "bytes calldata slice"
                                                },
                                                {
                                                  "typeIdentifier": "t_tuple$_t_type$_t_struct$_RfqOrder_$24_storage_ptr_$_$_t_type$_t_struct$_Signature_$33_storage_ptr_$_$_t_type$_t_uint128_$_$",
                                                  "typeString": "tuple(type(struct ZeroExApiAdapter.RfqOrder storage pointer),type(struct ZeroExApiAdapter.Signature storage pointer),type(uint128))"
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 274,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -1,
                                                "src": "5878:3:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_magic_abi",
                                                  "typeString": "abi"
                                                }
                                              },
                                              "id": 275,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "memberName": "decode",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": null,
                                              "src": "5878:10:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                "typeString": "function () pure"
                                              }
                                            },
                                            "id": 284,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "5878:53:0",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_tuple$_t_struct$_RfqOrder_$24_memory_ptr_$_t_struct$_Signature_$33_memory_ptr_$_t_uint128_$",
                                              "typeString": "tuple(struct ZeroExApiAdapter.RfqOrder memory,struct ZeroExApiAdapter.Signature memory,uint128)"
                                            }
                                          },
                                          "src": "5824:107:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                          }
                                        },
                                        "id": 286,
                                        "nodeType": "ExpressionStatement",
                                        "src": "5824:107:0"
                                      },
                                      {
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 292,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 287,
                                            "name": "inputTokenAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 115,
                                            "src": "5949:16:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "id": 290,
                                                "name": "takerTokenFillAmount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 269,
                                                "src": "5976:20:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint128",
                                                  "typeString": "uint128"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint128",
                                                  "typeString": "uint128"
                                                }
                                              ],
                                              "id": 289,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "5968:7:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_uint256_$",
                                                "typeString": "type(uint256)"
                                              },
                                              "typeName": {
                                                "id": 288,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5968:7:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": null,
                                                  "typeString": null
                                                }
                                              }
                                            },
                                            "id": 291,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "5968:29:0",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "5949:48:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 293,
                                        "nodeType": "ExpressionStatement",
                                        "src": "5949:48:0"
                                      },
                                      {
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 297,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 294,
                                            "name": "inputToken",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 103,
                                            "src": "6015:10:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 295,
                                              "name": "order",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 266,
                                              "src": "6028:5:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RfqOrder_$24_memory_ptr",
                                                "typeString": "struct ZeroExApiAdapter.RfqOrder memory"
                                              }
                                            },
                                            "id": 296,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "takerToken",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 7,
                                            "src": "6028:16:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "src": "6015:29:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "id": 298,
                                        "nodeType": "ExpressionStatement",
                                        "src": "6015:29:0"
                                      },
                                      {
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 302,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 299,
                                            "name": "outputToken",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 106,
                                            "src": "6062:11:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 300,
                                              "name": "order",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 266,
                                              "src": "6076:5:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RfqOrder_$24_memory_ptr",
                                                "typeString": "struct ZeroExApiAdapter.RfqOrder memory"
                                              }
                                            },
                                            "id": 301,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "makerToken",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5,
                                            "src": "6076:16:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "src": "6062:30:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "id": 303,
                                        "nodeType": "ExpressionStatement",
                                        "src": "6062:30:0"
                                      },
                                      {
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 309,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 304,
                                            "name": "minOutputTokenAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 118,
                                            "src": "6110:20:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "id": 306,
                                                "name": "order",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 266,
                                                "src": "6160:5:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_RfqOrder_$24_memory_ptr",
                                                  "typeString": "struct ZeroExApiAdapter.RfqOrder memory"
                                                }
                                              },
                                              {
                                                "argumentTypes": null,
                                                "id": 307,
                                                "name": "inputTokenAmount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 115,
                                                "src": "6167:16:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_struct$_RfqOrder_$24_memory_ptr",
                                                  "typeString": "struct ZeroExApiAdapter.RfqOrder memory"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "id": 305,
                                              "name": "getRfqOrderMakerFillAmount",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 655,
                                              "src": "6133:26:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_struct$_RfqOrder_$24_memory_ptr_$_t_uint256_$returns$_t_uint256_$",
                                                "typeString": "function (struct ZeroExApiAdapter.RfqOrder memory,uint256) pure returns (uint256)"
                                              }
                                            },
                                            "id": 308,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "6133:51:0",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "6110:74:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 310,
                                        "nodeType": "ExpressionStatement",
                                        "src": "6110:74:0"
                                      }
                                    ]
                                  }
                                },
                                "id": 558,
                                "nodeType": "IfStatement",
                                "src": "5232:3257:0",
                                "trueBody": {
                                  "id": 261,
                                  "nodeType": "Block",
                                  "src": "5260:393:0",
                                  "statements": [
                                    {
                                      "assignments": [
                                        216
                                      ],
                                      "declarations": [
                                        {
                                          "constant": false,
                                          "id": 216,
                                          "mutability": "mutable",
                                          "name": "path",
                                          "nodeType": "VariableDeclaration",
                                          "overrides": null,
                                          "scope": 261,
                                          "src": "5313:21:0",
                                          "stateVariable": false,
                                          "storageLocation": "memory",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                            "typeString": "address[]"
                                          },
                                          "typeName": {
                                            "baseType": {
                                              "id": 214,
                                              "name": "address",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "5313:7:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            "id": 215,
                                            "length": null,
                                            "nodeType": "ArrayTypeName",
                                            "src": "5313:9:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                              "typeString": "address[]"
                                            }
                                          },
                                          "value": null,
                                          "visibility": "internal"
                                        }
                                      ],
                                      "id": 217,
                                      "initialValue": null,
                                      "nodeType": "VariableDeclarationStatement",
                                      "src": "5313:21:0"
                                    },
                                    {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 236,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "argumentTypes": null,
                                          "components": [
                                            {
                                              "argumentTypes": null,
                                              "id": 218,
                                              "name": "path",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 216,
                                              "src": "5353:4:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                                "typeString": "address[] memory"
                                              }
                                            },
                                            {
                                              "argumentTypes": null,
                                              "id": 219,
                                              "name": "inputTokenAmount",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 115,
                                              "src": "5359:16:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            {
                                              "argumentTypes": null,
                                              "id": 220,
                                              "name": "minOutputTokenAmount",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 118,
                                              "src": "5377:20:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "id": 221,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": true,
                                          "nodeType": "TupleExpression",
                                          "src": "5352:46:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$",
                                            "typeString": "tuple(address[] memory,uint256,uint256)"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 224,
                                                "name": "_data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 93,
                                                "src": "5432:5:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                                  "typeString": "bytes calldata"
                                                }
                                              },
                                              "endExpression": null,
                                              "id": 226,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexRangeAccess",
                                              "src": "5432:9:0",
                                              "startExpression": {
                                                "argumentTypes": null,
                                                "hexValue": "34",
                                                "id": 225,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5438:1:0",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_4_by_1",
                                                  "typeString": "int_const 4"
                                                },
                                                "value": "4"
                                              },
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                                "typeString": "bytes calldata slice"
                                              }
                                            },
                                            {
                                              "argumentTypes": null,
                                              "components": [
                                                {
                                                  "argumentTypes": null,
                                                  "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 228,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "5444:7:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_address_$",
                                                      "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                      "id": 227,
                                                      "name": "address",
                                                      "nodeType": "ElementaryTypeName",
                                                      "src": "5444:7:0",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": null,
                                                        "typeString": null
                                                      }
                                                    }
                                                  },
                                                  "id": 229,
                                                  "indexExpression": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "nodeType": "IndexAccess",
                                                  "src": "5444:9:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_array$_t_address_$dyn_memory_ptr_$",
                                                    "typeString": "type(address[] memory)"
                                                  }
                                                },
                                                {
                                                  "argumentTypes": null,
                                                  "id": 231,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "nodeType": "ElementaryTypeNameExpression",
                                                  "src": "5455:7:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_uint256_$",
                                                    "typeString": "type(uint256)"
                                                  },
                                                  "typeName": {
                                                    "id": 230,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "5455:7:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": null,
                                                      "typeString": null
                                                    }
                                                  }
                                                },
                                                {
                                                  "argumentTypes": null,
                                                  "id": 233,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "nodeType": "ElementaryTypeNameExpression",
                                                  "src": "5464:7:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_uint256_$",
                                                    "typeString": "type(uint256)"
                                                  },
                                                  "typeName": {
                                                    "id": 232,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "5464:7:0",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": null,
                                                      "typeString": null
                                                    }
                                                  }
                                                }
                                              ],
                                              "id": 234,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "5443:29:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_type$_t_array$_t_address_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                                                "typeString": "tuple(type(address[] memory),type(uint256),type(uint256))"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                                "typeString": "bytes calldata slice"
                                              },
                                              {
                                                "typeIdentifier": "t_tuple$_t_type$_t_array$_t_address_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                                                "typeString": "tuple(type(address[] memory),type(uint256),type(uint256))"
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 222,
                                              "name": "abi",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -1,
                                              "src": "5421:3:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_abi",
                                                "typeString": "abi"
                                              }
                                            },
                                            "id": 223,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "decode",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "5421:10:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                              "typeString": "function () pure"
                                            }
                                          },
                                          "id": 235,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "5421:52:0",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$",
                                            "typeString": "tuple(address[] memory,uint256,uint256)"
                                          }
                                        },
                                        "src": "5352:121:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$__$",
                                          "typeString": "tuple()"
                                        }
                                      },
                                      "id": 237,
                                      "nodeType": "ExpressionStatement",
                                      "src": "5352:121:0"
                                    },
                                    {
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 242,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 239,
                                                "name": "path",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 216,
                                                "src": "5499:4:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                                  "typeString": "address[] memory"
                                                }
                                              },
                                              "id": 240,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "length",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": null,
                                              "src": "5499:11:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": ">",
                                            "rightExpression": {
                                              "argumentTypes": null,
                                              "hexValue": "31",
                                              "id": 241,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "5513:1:0",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "src": "5499:15:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "hexValue": "556e697377617020746f6b656e207061746820746f6f2073686f7274",
                                            "id": 243,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "string",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "5516:30:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_stringliteral_0f66dc227bf86d275fe4baea9593da0faadd57b8623e87430896e2f30bd8ec33",
                                              "typeString": "literal_string \"Uniswap token path too short\""
                                            },
                                            "value": "Uniswap token path too short"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            },
                                            {
                                              "typeIdentifier": "t_stringliteral_0f66dc227bf86d275fe4baea9593da0faadd57b8623e87430896e2f30bd8ec33",
                                              "typeString": "literal_string \"Uniswap token path too short\""
                                            }
                                          ],
                                          "id": 238,
                                          "name": "require",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [
                                            -18,
                                            -18
                                          ],
                                          "referencedDeclaration": -18,
                                          "src": "5491:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                            "typeString": "function (bool,string memory) pure"
                                          }
                                        },
                                        "id": 244,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5491:56:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$__$",
                                          "typeString": "tuple()"
                                        }
                                      },
                                      "id": 245,
                                      "nodeType": "ExpressionStatement",
                                      "src": "5491:56:0"
                                    },
                                    {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 250,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "argumentTypes": null,
                                          "id": 246,
                                          "name": "inputToken",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 103,
                                          "src": "5565:10:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 247,
                                            "name": "path",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 216,
                                            "src": "5578:4:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                              "typeString": "address[] memory"
                                            }
                                          },
                                          "id": 249,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "30",
                                            "id": 248,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "5583:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "5578:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "src": "5565:20:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "id": 251,
                                      "nodeType": "ExpressionStatement",
                                      "src": "5565:20:0"
                                    },
                                    {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 259,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "argumentTypes": null,
                                          "id": 252,
                                          "name": "outputToken",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 106,
                                          "src": "5603:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 253,
                                            "name": "path",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 216,
                                            "src": "5617:4:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                              "typeString": "address[] memory"
                                            }
                                          },
                                          "id": 258,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 257,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 254,
                                                "name": "path",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 216,
                                                "src": "5622:4:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                                  "typeString": "address[] memory"
                                                }
                                              },
                                              "id": 255,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "length",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": null,
                                              "src": "5622:11:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "-",
                                            "rightExpression": {
                                              "argumentTypes": null,
                                              "hexValue": "31",
                                              "id": 256,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "5636:1:0",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "src": "5622:15:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "5617:21:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "src": "5603:35:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "id": 260,
                                      "nodeType": "ExpressionStatement",
                                      "src": "5603:35:0"
                                    }
                                  ]
                                }
                              },
                              "id": 559,
                              "nodeType": "IfStatement",
                              "src": "4782:3707:0",
                              "trueBody": {
                                "id": 208,
                                "nodeType": "Block",
                                "src": "4810:416:0",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 190,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "components": [
                                          {
                                            "argumentTypes": null,
                                            "id": 165,
                                            "name": "inputToken",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 103,
                                            "src": "4874:10:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 166,
                                            "name": "outputToken",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 106,
                                            "src": "4886:11:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          null,
                                          {
                                            "argumentTypes": null,
                                            "id": 167,
                                            "name": "recipient",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 109,
                                            "src": "4901:9:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 168,
                                            "name": "inputTokenAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 115,
                                            "src": "4912:16:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 169,
                                            "name": "minOutputTokenAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 118,
                                            "src": "4930:20:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "id": 170,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "TupleExpression",
                                        "src": "4873:78:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$_t_address_$_t_address_$__$_t_address_$_t_uint256_$_t_uint256_$",
                                          "typeString": "tuple(address,address,,address,uint256,uint256)"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 173,
                                              "name": "_data",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 93,
                                              "src": "4985:5:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_calldata_ptr",
                                                "typeString": "bytes calldata"
                                              }
                                            },
                                            "endExpression": null,
                                            "id": 175,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexRangeAccess",
                                            "src": "4985:9:0",
                                            "startExpression": {
                                              "argumentTypes": null,
                                              "hexValue": "34",
                                              "id": 174,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "4991:1:0",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_4_by_1",
                                                "typeString": "int_const 4"
                                              },
                                              "value": "4"
                                            },
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                              "typeString": "bytes calldata slice"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "components": [
                                              {
                                                "argumentTypes": null,
                                                "id": 177,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "4997:7:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_address_$",
                                                  "typeString": "type(address)"
                                                },
                                                "typeName": {
                                                  "id": 176,
                                                  "name": "address",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "4997:7:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": null,
                                                    "typeString": null
                                                  }
                                                }
                                              },
                                              {
                                                "argumentTypes": null,
                                                "id": 179,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "5006:7:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_address_$",
                                                  "typeString": "type(address)"
                                                },
                                                "typeName": {
                                                  "id": 178,
                                                  "name": "address",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "5006:7:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": null,
                                                    "typeString": null
                                                  }
                                                }
                                              },
                                              {
                                                "argumentTypes": null,
                                                "id": 181,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "5015:7:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_address_$",
                                                  "typeString": "type(address)"
                                                },
                                                "typeName": {
                                                  "id": 180,
                                                  "name": "address",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "5015:7:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": null,
                                                    "typeString": null
                                                  }
                                                }
                                              },
                                              {
                                                "argumentTypes": null,
                                                "id": 183,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "5024:7:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_address_$",
                                                  "typeString": "type(address)"
                                                },
                                                "typeName": {
                                                  "id": 182,
                                                  "name": "address",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "5024:7:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": null,
                                                    "typeString": null
                                                  }
                                                }
                                              },
                                              {
                                                "argumentTypes": null,
                                                "id": 185,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "5033:7:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_uint256_$",
                                                  "typeString": "type(uint256)"
                                                },
                                                "typeName": {
                                                  "id": 184,
                                                  "name": "uint256",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "5033:7:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": null,
                                                    "typeString": null
                                                  }
                                                }
                                              },
                                              {
                                                "argumentTypes": null,
                                                "id": 187,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "5042:7:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_uint256_$",
                                                  "typeString": "type(uint256)"
                                                },
                                                "typeName": {
                                                  "id": 186,
                                                  "name": "uint256",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "5042:7:0",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": null,
                                                    "typeString": null
                                                  }
                                                }
                                              }
                                            ],
                                            "id": 188,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "TupleExpression",
                                            "src": "4996:54:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                                              "typeString": "tuple(type(address),type(address),type(address),type(address),type(uint256),type(uint256))"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                              "typeString": "bytes calldata slice"
                                            },
                                            {
                                              "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                                              "typeString": "tuple(type(address),type(address),type(address),type(address),type(uint256),type(uint256))"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 171,
                                            "name": "abi",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -1,
                                            "src": "4974:3:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_abi",
                                              "typeString": "abi"
                                            }
                                          },
                                          "id": 172,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "decode",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": null,
                                          "src": "4974:10:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                            "typeString": "function () pure"
                                          }
                                        },
                                        "id": 189,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4974:77:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$_t_address_payable_$_t_address_payable_$_t_address_payable_$_t_address_payable_$_t_uint256_$_t_uint256_$",
                                          "typeString": "tuple(address payable,address payable,address payable,address payable,uint256,uint256)"
                                        }
                                      },
                                      "src": "4873:178:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 191,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4873:178:0"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 194,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 192,
                                        "name": "supportsRecipient",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 112,
                                        "src": "5069:17:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "74727565",
                                        "id": 193,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5089:4:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        "value": "true"
                                      },
                                      "src": "5069:24:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 195,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5069:24:0"
                                  },
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      "id": 201,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 196,
                                        "name": "recipient",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 109,
                                        "src": "5115:9:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "hexValue": "30",
                                            "id": 199,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "5136:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            }
                                          ],
                                          "id": 198,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "5128:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": {
                                            "id": 197,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "5128:7:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": null,
                                              "typeString": null
                                            }
                                          }
                                        },
                                        "id": 200,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5128:10:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      },
                                      "src": "5115:23:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 207,
                                    "nodeType": "IfStatement",
                                    "src": "5111:101:0",
                                    "trueBody": {
                                      "id": 206,
                                      "nodeType": "Block",
                                      "src": "5140:72:0",
                                      "statements": [
                                        {
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 204,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftHandSide": {
                                              "argumentTypes": null,
                                              "id": 202,
                                              "name": "recipient",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 109,
                                              "src": "5162:9:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            "nodeType": "Assignment",
                                            "operator": "=",
                                            "rightHandSide": {
                                              "argumentTypes": null,
                                              "id": 203,
                                              "name": "_destinationAddress",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 87,
                                              "src": "5174:19:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            "src": "5162:31:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "id": 205,
                                          "nodeType": "ExpressionStatement",
                                          "src": "5162:31:0"
                                        }
                                      ]
                                    }
                                  }
                                ]
                              }
                            },
                            "id": 560,
                            "nodeType": "IfStatement",
                            "src": "4481:4008:0",
                            "trueBody": {
                              "id": 161,
                              "nodeType": "Block",
                              "src": "4535:241:0",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 159,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "id": 139,
                                          "name": "inputToken",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 103,
                                          "src": "4615:10:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 140,
                                          "name": "outputToken",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 106,
                                          "src": "4627:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 141,
                                          "name": "inputTokenAmount",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 115,
                                          "src": "4640:16:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 142,
                                          "name": "minOutputTokenAmount",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 118,
                                          "src": "4658:20:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 143,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "TupleExpression",
                                      "src": "4614:65:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint256_$_t_uint256_$",
                                        "typeString": "tuple(address,address,uint256,uint256)"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 146,
                                            "name": "_data",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 93,
                                            "src": "4713:5:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_calldata_ptr",
                                              "typeString": "bytes calldata"
                                            }
                                          },
                                          "endExpression": null,
                                          "id": 148,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexRangeAccess",
                                          "src": "4713:9:0",
                                          "startExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "34",
                                            "id": 147,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "4719:1:0",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_4_by_1",
                                              "typeString": "int_const 4"
                                            },
                                            "value": "4"
                                          },
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                            "typeString": "bytes calldata slice"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "components": [
                                            {
                                              "argumentTypes": null,
                                              "id": 150,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "4725:7:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_address_$",
                                                "typeString": "type(address)"
                                              },
                                              "typeName": {
                                                "id": 149,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4725:7:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": null,
                                                  "typeString": null
                                                }
                                              }
                                            },
                                            {
                                              "argumentTypes": null,
                                              "id": 152,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "4734:7:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_address_$",
                                                "typeString": "type(address)"
                                              },
                                              "typeName": {
                                                "id": 151,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4734:7:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": null,
                                                  "typeString": null
                                                }
                                              }
                                            },
                                            {
                                              "argumentTypes": null,
                                              "id": 154,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "4743:7:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_uint256_$",
                                                "typeString": "type(uint256)"
                                              },
                                              "typeName": {
                                                "id": 153,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4743:7:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": null,
                                                  "typeString": null
                                                }
                                              }
                                            },
                                            {
                                              "argumentTypes": null,
                                              "id": 156,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "4752:7:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_uint256_$",
                                                "typeString": "type(uint256)"
                                              },
                                              "typeName": {
                                                "id": 155,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4752:7:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": null,
                                                  "typeString": null
                                                }
                                              }
                                            }
                                          ],
                                          "id": 157,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "4724:36:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                                            "typeString": "tuple(type(address),type(address),type(uint256),type(uint256))"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                            "typeString": "bytes calldata slice"
                                          },
                                          {
                                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                                            "typeString": "tuple(type(address),type(address),type(uint256),type(uint256))"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 144,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -1,
                                          "src": "4702:3:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 145,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberName": "decode",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "4702:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 158,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4702:59:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_address_payable_$_t_address_payable_$_t_uint256_$_t_uint256_$",
                                        "typeString": "tuple(address payable,address payable,uint256,uint256)"
                                      }
                                    },
                                    "src": "4614:147:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 160,
                                  "nodeType": "ExpressionStatement",
                                  "src": "4614:147:0"
                                }
                              ]
                            }
                          }
                        ]
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 569,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 565,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 563,
                                  "name": "inputToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 103,
                                  "src": "8517:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 564,
                                  "name": "ETH_ADDRESS",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 36,
                                  "src": "8531:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "8517:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 568,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 566,
                                  "name": "outputToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 106,
                                  "src": "8546:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 567,
                                  "name": "ETH_ADDRESS",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 36,
                                  "src": "8561:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "8546:26:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "8517:55:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "455448206e6f7420737570706f72746564",
                              "id": 570,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8574:19:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9d30b9cb3dbec6ac7a1342d613d3a72e366093233be813950c84004db17f9eab",
                                "typeString": "literal_string \"ETH not supported\""
                              },
                              "value": "ETH not supported"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9d30b9cb3dbec6ac7a1342d613d3a72e366093233be813950c84004db17f9eab",
                                "typeString": "literal_string \"ETH not supported\""
                              }
                            ],
                            "id": 562,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8509:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 571,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8509:85:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 572,
                        "nodeType": "ExpressionStatement",
                        "src": "8509:85:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 576,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 574,
                                "name": "inputToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 103,
                                "src": "8612:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 575,
                                "name": "_sourceToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 83,
                                "src": "8626:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "8612:26:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4d69736d61746368656420696e70757420746f6b656e",
                              "id": 577,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8640:24:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6aec6f0d6f6a09114a53915e8af336f6c5432030d13f1591c4a58948894214b0",
                                "typeString": "literal_string \"Mismatched input token\""
                              },
                              "value": "Mismatched input token"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6aec6f0d6f6a09114a53915e8af336f6c5432030d13f1591c4a58948894214b0",
                                "typeString": "literal_string \"Mismatched input token\""
                              }
                            ],
                            "id": 573,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8604:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 578,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8604:61:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 579,
                        "nodeType": "ExpressionStatement",
                        "src": "8604:61:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 583,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 581,
                                "name": "outputToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 106,
                                "src": "8683:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 582,
                                "name": "_destinationToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 85,
                                "src": "8698:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "8683:32:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4d69736d617463686564206f757470757420746f6b656e",
                              "id": 584,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8717:25:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c37b7025620d3ed93486bb2cd40c8ff114177df85e70ae1edd7332ce506829ae",
                                "typeString": "literal_string \"Mismatched output token\""
                              },
                              "value": "Mismatched output token"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c37b7025620d3ed93486bb2cd40c8ff114177df85e70ae1edd7332ce506829ae",
                                "typeString": "literal_string \"Mismatched output token\""
                              }
                            ],
                            "id": 580,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8675:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 585,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8675:68:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 586,
                        "nodeType": "ExpressionStatement",
                        "src": "8675:68:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 593,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 589,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "!",
                                "prefix": true,
                                "src": "8761:18:0",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 588,
                                  "name": "supportsRecipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 112,
                                  "src": "8762:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 592,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 590,
                                  "name": "recipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 109,
                                  "src": "8783:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 591,
                                  "name": "_destinationAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 87,
                                  "src": "8796:19:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "8783:32:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "8761:54:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4d69736d61746368656420726563697069656e74",
                              "id": 594,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8817:22:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_14e1b31db4a32517277befe48d6769a5146d5e64d232d40b49944c215853ce2d",
                                "typeString": "literal_string \"Mismatched recipient\""
                              },
                              "value": "Mismatched recipient"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_14e1b31db4a32517277befe48d6769a5146d5e64d232d40b49944c215853ce2d",
                                "typeString": "literal_string \"Mismatched recipient\""
                              }
                            ],
                            "id": 587,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8753:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 595,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8753:87:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 596,
                        "nodeType": "ExpressionStatement",
                        "src": "8753:87:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 600,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 598,
                                "name": "inputTokenAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 115,
                                "src": "8858:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 599,
                                "name": "_sourceQuantity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 89,
                                "src": "8878:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "8858:35:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4d69736d61746368656420696e70757420746f6b656e207175616e74697479",
                              "id": 601,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8895:33:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f499829c7f44979226e009a0584439b81fc6e7938639df950c4c6db75364e5f7",
                                "typeString": "literal_string \"Mismatched input token quantity\""
                              },
                              "value": "Mismatched input token quantity"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f499829c7f44979226e009a0584439b81fc6e7938639df950c4c6db75364e5f7",
                                "typeString": "literal_string \"Mismatched input token quantity\""
                              }
                            ],
                            "id": 597,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8850:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8850:79:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 603,
                        "nodeType": "ExpressionStatement",
                        "src": "8850:79:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 607,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 605,
                                "name": "minOutputTokenAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 118,
                                "src": "8947:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 606,
                                "name": "_minDestinationQuantity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 91,
                                "src": "8971:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "8947:47:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4d69736d617463686564206f757470757420746f6b656e207175616e74697479",
                              "id": 608,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8996:34:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_db6ff7d4f6ee3ae51d75fd64f2b4e56be3290a2303cb7d6aeecd223ce23a8160",
                                "typeString": "literal_string \"Mismatched output token quantity\""
                              },
                              "value": "Mismatched output token quantity"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_db6ff7d4f6ee3ae51d75fd64f2b4e56be3290a2303cb7d6aeecd223ce23a8160",
                                "typeString": "literal_string \"Mismatched output token quantity\""
                              }
                            ],
                            "id": 604,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8939:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8939:92:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 610,
                        "nodeType": "ExpressionStatement",
                        "src": "8939:92:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 611,
                              "name": "zeroExAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 56,
                              "src": "9063:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 612,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9159:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "id": 613,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 93,
                              "src": "9174:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "id": 614,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "9049:140:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_rational_0_by_1_$_t_bytes_calldata_ptr_$",
                            "typeString": "tuple(address,int_const 0,bytes calldata)"
                          }
                        },
                        "functionReturnParameters": 101,
                        "id": 615,
                        "nodeType": "Return",
                        "src": "9042:147:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 81,
                    "nodeType": "StructuredDocumentation",
                    "src": "2721:740:0",
                    "text": " Return 0xAPI calldata which is already generated from 0xAPI\n @param  _sourceToken              Address of source token to be sold\n @param  _destinationToken         Address of destination token to buy\n @param  _destinationAddress       Address that assets should be transferred to\n @param  _sourceQuantity           Amount of source token to sell\n @param  _minDestinationQuantity   Min amount of destination token to buy\n @param  _data                     Arbitrage bytes containing trade call data\n @return address                   Target contract address\n @return uint256                   Call value\n @return bytes                     Trade calldata"
                  },
                  "functionSelector": "e171fcab",
                  "id": 617,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTradeCalldata",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 94,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 83,
                        "mutability": "mutable",
                        "name": "_sourceToken",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 617,
                        "src": "3501:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 82,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3501:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 85,
                        "mutability": "mutable",
                        "name": "_destinationToken",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 617,
                        "src": "3531:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 84,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3531:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 87,
                        "mutability": "mutable",
                        "name": "_destinationAddress",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 617,
                        "src": "3566:27:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 86,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3566:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 89,
                        "mutability": "mutable",
                        "name": "_sourceQuantity",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 617,
                        "src": "3603:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 88,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3603:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 91,
                        "mutability": "mutable",
                        "name": "_minDestinationQuantity",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 617,
                        "src": "3636:31:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 90,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3636:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 93,
                        "mutability": "mutable",
                        "name": "_data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 617,
                        "src": "3677:20:0",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 92,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3677:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3491:212:0"
                  },
                  "returnParameters": {
                    "id": 101,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 96,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 617,
                        "src": "3751:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 95,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3751:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 98,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 617,
                        "src": "3760:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 97,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3760:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 100,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 617,
                        "src": "3769:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 99,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3769:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3750:32:0"
                  },
                  "scope": 691,
                  "src": "3466:5730:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 654,
                    "nodeType": "Block",
                    "src": "9371:218:0",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 638,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 634,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "id": 629,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 626,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 619,
                                  "src": "9385:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RfqOrder_$24_memory_ptr",
                                    "typeString": "struct ZeroExApiAdapter.RfqOrder memory"
                                  }
                                },
                                "id": 627,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "takerAmount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 11,
                                "src": "9385:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 628,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9406:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "9385:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "||",
                            "rightExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "id": 633,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 630,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 619,
                                  "src": "9411:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RfqOrder_$24_memory_ptr",
                                    "typeString": "struct ZeroExApiAdapter.RfqOrder memory"
                                  }
                                },
                                "id": 631,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "makerAmount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9,
                                "src": "9411:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 632,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9432:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "9411:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "9385:48:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 637,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 635,
                              "name": "takerTokenFillAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 621,
                              "src": "9437:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 636,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9461:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "9437:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "9385:77:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 642,
                        "nodeType": "IfStatement",
                        "src": "9381:116:0",
                        "trueBody": {
                          "id": 641,
                          "nodeType": "Block",
                          "src": "9464:33:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 639,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9485:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 625,
                              "id": 640,
                              "nodeType": "Return",
                              "src": "9478:8:0"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 648,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 645,
                                    "name": "order",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 619,
                                    "src": "9521:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RfqOrder_$24_memory_ptr",
                                      "typeString": "struct ZeroExApiAdapter.RfqOrder memory"
                                    }
                                  },
                                  "id": 646,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "makerAmount",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9,
                                  "src": "9521:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 647,
                                  "name": "takerTokenFillAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 621,
                                  "src": "9541:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "9521:40:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 649,
                                  "name": "order",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 619,
                                  "src": "9564:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RfqOrder_$24_memory_ptr",
                                    "typeString": "struct ZeroExApiAdapter.RfqOrder memory"
                                  }
                                },
                                "id": 650,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "takerAmount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 11,
                                "src": "9564:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "src": "9521:60:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 644,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9513:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 643,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9513:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 652,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9513:69:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 625,
                        "id": 653,
                        "nodeType": "Return",
                        "src": "9506:76:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 655,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getRfqOrderMakerFillAmount",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 622,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 619,
                        "mutability": "mutable",
                        "name": "order",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 655,
                        "src": "9238:21:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RfqOrder_$24_memory_ptr",
                          "typeString": "struct ZeroExApiAdapter.RfqOrder"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 618,
                          "name": "RfqOrder",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 24,
                          "src": "9238:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RfqOrder_$24_storage_ptr",
                            "typeString": "struct ZeroExApiAdapter.RfqOrder"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 621,
                        "mutability": "mutable",
                        "name": "takerTokenFillAmount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 655,
                        "src": "9261:28:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 620,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9261:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9237:53:0"
                  },
                  "returnParameters": {
                    "id": 625,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 624,
                        "mutability": "mutable",
                        "name": "makerTokenFillAmount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 655,
                        "src": "9337:28:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 623,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9337:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9336:30:0"
                  },
                  "scope": 691,
                  "src": "9202:387:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 689,
                    "nodeType": "Block",
                    "src": "9880:656:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 668,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 665,
                                  "name": "encodedPath",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 657,
                                  "src": "9898:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 666,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "9898:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 667,
                                "name": "UNISWAP_V3_SINGLE_HOP_PATH_SIZE",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 49,
                                "src": "9920:31:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "9898:53:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "556e6973776170563320746f6b656e207061746820746f6f2073686f7274",
                              "id": 669,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9953:32:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3fe32c62cf5972b307560574465e371f8f8ecca51f190340b0bf18411f5cf78b",
                                "typeString": "literal_string \"UniswapV3 token path too short\""
                              },
                              "value": "UniswapV3 token path too short"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3fe32c62cf5972b307560574465e371f8f8ecca51f190340b0bf18411f5cf78b",
                                "typeString": "literal_string \"UniswapV3 token path too short\""
                              }
                            ],
                            "id": 664,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9890:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 670,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9890:96:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 671,
                        "nodeType": "ExpressionStatement",
                        "src": "9890:96:0"
                      },
                      {
                        "assignments": [
                          673
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 673,
                            "mutability": "mutable",
                            "name": "numHops",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 689,
                            "src": "10146:15:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 672,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10146:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 681,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 680,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 677,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 674,
                                    "name": "encodedPath",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 657,
                                    "src": "10165:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 675,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "10165:18:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 676,
                                  "name": "UNISWAP_V3_PATH_ADDRESS_SIZE",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 39,
                                  "src": "10186:28:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10165:49:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 678,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "10164:51:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 679,
                            "name": "UNISWAP_V3_SINGLE_HOP_OFFSET_SIZE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54,
                            "src": "10216:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10164:85:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10146:103:0"
                      },
                      {
                        "assignments": [
                          683
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 683,
                            "mutability": "mutable",
                            "name": "lastTokenOffset",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 689,
                            "src": "10259:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 682,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10259:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 687,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 686,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 684,
                            "name": "numHops",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 673,
                            "src": "10285:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 685,
                            "name": "UNISWAP_V3_SINGLE_HOP_OFFSET_SIZE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54,
                            "src": "10295:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10285:43:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10259:69:0"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "10347:183:0",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10361:29:0",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "encodedPath",
                                    "nodeType": "YulIdentifier",
                                    "src": "10374:11:0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10387:2:0",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10370:3:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10370:20:0"
                              },
                              "variables": [
                                {
                                  "name": "p",
                                  "nodeType": "YulTypedName",
                                  "src": "10365:1:0",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10403:31:0",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10421:2:0",
                                    "type": "",
                                    "value": "96"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "p",
                                        "nodeType": "YulIdentifier",
                                        "src": "10431:1:0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "10425:5:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10425:8:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "10417:3:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10417:17:0"
                              },
                              "variableNames": [
                                {
                                  "name": "inputToken",
                                  "nodeType": "YulIdentifier",
                                  "src": "10403:10:0"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10447:28:0",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "p",
                                    "nodeType": "YulIdentifier",
                                    "src": "10456:1:0"
                                  },
                                  {
                                    "name": "lastTokenOffset",
                                    "nodeType": "YulIdentifier",
                                    "src": "10459:15:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10452:3:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10452:23:0"
                              },
                              "variableNames": [
                                {
                                  "name": "p",
                                  "nodeType": "YulIdentifier",
                                  "src": "10447:1:0"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10488:32:0",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10507:2:0",
                                    "type": "",
                                    "value": "96"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "p",
                                        "nodeType": "YulIdentifier",
                                        "src": "10517:1:0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "10511:5:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10511:8:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "10503:3:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10503:17:0"
                              },
                              "variableNames": [
                                {
                                  "name": "outputToken",
                                  "nodeType": "YulIdentifier",
                                  "src": "10488:11:0"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 657,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10374:11:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 660,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10403:10:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 683,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10459:15:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 662,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10488:11:0",
                            "valueSize": 1
                          }
                        ],
                        "id": 688,
                        "nodeType": "InlineAssembly",
                        "src": "10338:192:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 690,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_decodeTokensFromUniswapV3EncodedPath",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 658,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 657,
                        "mutability": "mutable",
                        "name": "encodedPath",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 690,
                        "src": "9729:24:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 656,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "9729:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9728:26:0"
                  },
                  "returnParameters": {
                    "id": 663,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 660,
                        "mutability": "mutable",
                        "name": "inputToken",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 690,
                        "src": "9814:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 659,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9814:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 662,
                        "mutability": "mutable",
                        "name": "outputToken",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 690,
                        "src": "9846:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 661,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9846:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9800:75:0"
                  },
                  "scope": 691,
                  "src": "9682:854:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 692,
              "src": "837:9701:0"
            }
          ],
          "src": "655:9884:0"
        },
        "id": 0
      }
    }
  }
}
