{
    "contractName": "RelayHub",
    "abi": [
        {
            "inputs": [
                {
                    "internalType": "contract IStakeManager",
                    "name": "_stakeManager",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_penalizer",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_maxWorkerCount",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_gasReserve",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_postOverhead",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_gasOverhead",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_maximumRecipientDeposit",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_minimumUnstakeDelay",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_minimumStake",
                    "type": "uint256"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "paymaster",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "Deposited",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "baseRelayFee",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "pctRelayFee",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "relayUrl",
                    "type": "string"
                }
            ],
            "name": "RelayServerRegistered",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address[]",
                    "name": "newRelayWorkers",
                    "type": "address[]"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "workersCount",
                    "type": "uint256"
                }
            ],
            "name": "RelayWorkersAdded",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "paymaster",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "relayWorker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bytes4",
                    "name": "selector",
                    "type": "bytes4"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "innerGasUsed",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "reason",
                    "type": "bytes"
                }
            ],
            "name": "TransactionRejectedByPaymaster",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayWorker",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "paymaster",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bytes4",
                    "name": "selector",
                    "type": "bytes4"
                },
                {
                    "indexed": false,
                    "internalType": "enum IRelayHub.RelayCallStatus",
                    "name": "status",
                    "type": "uint8"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "charge",
                    "type": "uint256"
                }
            ],
            "name": "TransactionRelayed",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "enum IRelayHub.RelayCallStatus",
                    "name": "status",
                    "type": "uint8"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "returnValue",
                    "type": "bytes"
                }
            ],
            "name": "TransactionResult",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "dest",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "Withdrawn",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "gasOverhead",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "gasReserve",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "maxWorkerCount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "maximumRecipientDeposit",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "minimumStake",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "minimumUnstakeDelay",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "penalizer",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "postOverhead",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "stakeManager",
            "outputs": [
                {
                    "internalType": "contract IStakeManager",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "versionHub",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "workerCount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "workerToManager",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "baseRelayFee",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "pctRelayFee",
                    "type": "uint256"
                },
                {
                    "internalType": "string",
                    "name": "url",
                    "type": "string"
                }
            ],
            "name": "registerRelayServer",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "newRelayWorkers",
                    "type": "address[]"
                }
            ],
            "name": "addRelayWorkers",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                }
            ],
            "name": "depositFor",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "address payable",
                    "name": "dest",
                    "type": "address"
                }
            ],
            "name": "withdraw",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "paymasterMaxAcceptanceBudget",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "from",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "to",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "value",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "gas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "nonce",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "data",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct IForwarder.ForwardRequest",
                            "name": "request",
                            "type": "tuple"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "uint256",
                                    "name": "gasPrice",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "pctRelayFee",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "baseRelayFee",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "relayWorker",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "paymaster",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "paymasterData",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "clientId",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "forwarder",
                                    "type": "address"
                                }
                            ],
                            "internalType": "struct GsnTypes.RelayData",
                            "name": "relayData",
                            "type": "tuple"
                        }
                    ],
                    "internalType": "struct GsnTypes.RelayRequest",
                    "name": "relayRequest",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes",
                    "name": "signature",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "approvalData",
                    "type": "bytes"
                },
                {
                    "internalType": "uint256",
                    "name": "externalGasLimit",
                    "type": "uint256"
                }
            ],
            "name": "relayCall",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "paymasterAccepted",
                    "type": "bool"
                },
                {
                    "internalType": "bytes",
                    "name": "returnValue",
                    "type": "bytes"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "from",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "to",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "value",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "gas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "nonce",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "data",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct IForwarder.ForwardRequest",
                            "name": "request",
                            "type": "tuple"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "uint256",
                                    "name": "gasPrice",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "pctRelayFee",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "baseRelayFee",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "relayWorker",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "paymaster",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "paymasterData",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "clientId",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "forwarder",
                                    "type": "address"
                                }
                            ],
                            "internalType": "struct GsnTypes.RelayData",
                            "name": "relayData",
                            "type": "tuple"
                        }
                    ],
                    "internalType": "struct GsnTypes.RelayRequest",
                    "name": "relayRequest",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes",
                    "name": "signature",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "approvalData",
                    "type": "bytes"
                },
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "acceptanceBudget",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "preRelayedCallGasLimit",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "postRelayedCallGasLimit",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct IPaymaster.GasLimits",
                    "name": "gasLimits",
                    "type": "tuple"
                },
                {
                    "internalType": "uint256",
                    "name": "totalInitialGas",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "maxPossibleGas",
                    "type": "uint256"
                }
            ],
            "name": "innerRelayCall",
            "outputs": [
                {
                    "internalType": "enum IRelayHub.RelayCallStatus",
                    "name": "",
                    "type": "uint8"
                },
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "gasUsed",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "gasPrice",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "pctRelayFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "baseRelayFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "relayWorker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "paymaster",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "paymasterData",
                            "type": "bytes"
                        },
                        {
                            "internalType": "uint256",
                            "name": "clientId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "forwarder",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct GsnTypes.RelayData",
                    "name": "relayData",
                    "type": "tuple"
                }
            ],
            "name": "calculateCharge",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "isRelayManagerStaked",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayWorker",
                    "type": "address"
                },
                {
                    "internalType": "address payable",
                    "name": "beneficiary",
                    "type": "address"
                }
            ],
            "name": "penalize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IStakeManager\",\"name\":\"_stakeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_penalizer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxWorkerCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_postOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maximumRecipientDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minimumUnstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minimumStake\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseRelayFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pctRelayFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"relayUrl\",\"type\":\"string\"}],\"name\":\"RelayServerRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"newRelayWorkers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"workersCount\",\"type\":\"uint256\"}],\"name\":\"RelayWorkersAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"innerGasUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"TransactionRejectedByPaymaster\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"enum IRelayHub.RelayCallStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"charge\",\"type\":\"uint256\"}],\"name\":\"TransactionRelayed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum IRelayHub.RelayCallStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnValue\",\"type\":\"bytes\"}],\"name\":\"TransactionResult\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dest\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"newRelayWorkers\",\"type\":\"address[]\"}],\"name\":\"addRelayWorkers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pctRelayFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseRelayFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"internalType\":\"struct GsnTypes.RelayData\",\"name\":\"relayData\",\"type\":\"tuple\"}],\"name\":\"calculateCharge\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"depositFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct IForwarder.ForwardRequest\",\"name\":\"request\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pctRelayFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseRelayFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"internalType\":\"struct GsnTypes.RelayData\",\"name\":\"relayData\",\"type\":\"tuple\"}],\"internalType\":\"struct GsnTypes.RelayRequest\",\"name\":\"relayRequest\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"approvalData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"acceptanceBudget\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preRelayedCallGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postRelayedCallGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct IPaymaster.GasLimits\",\"name\":\"gasLimits\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"totalInitialGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPossibleGas\",\"type\":\"uint256\"}],\"name\":\"innerRelayCall\",\"outputs\":[{\"internalType\":\"enum IRelayHub.RelayCallStatus\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"isRelayManagerStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxWorkerCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumRecipientDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumUnstakeDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"penalize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"penalizer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"baseRelayFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pctRelayFee\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"}],\"name\":\"registerRelayServer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"paymasterMaxAcceptanceBudget\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct IForwarder.ForwardRequest\",\"name\":\"request\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pctRelayFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseRelayFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"internalType\":\"struct GsnTypes.RelayData\",\"name\":\"relayData\",\"type\":\"tuple\"}],\"internalType\":\"struct GsnTypes.RelayRequest\",\"name\":\"relayRequest\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"approvalData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"externalGasLimit\",\"type\":\"uint256\"}],\"name\":\"relayCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paymasterAccepted\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnValue\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeManager\",\"outputs\":[{\"internalType\":\"contract IStakeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"versionHub\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"dest\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workerCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workerToManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/dror/IdeaProjects/gsn/contracts/RelayHub.sol\":\"RelayHub\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/dror/IdeaProjects/gsn/contracts/RelayHub.sol\":{\"keccak256\":\"0x5b3e7b3a5945c82f0f31ede524344e3d0544c2c08c2b3a331cbc3c7d2f5e280b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://82b106ab8cb6de23d08da21d08f93dcfafd970bbce3e6aced92581b8a3cbcf0f\",\"dweb:/ipfs/QmZWLs71abaK1PyGAu7aWfBKtemEWP3pCfdkpL3sZYVVs9\"]},\"/Users/dror/IdeaProjects/gsn/contracts/forwarder/IForwarder.sol\":{\"keccak256\":\"0x253fd0f17ff0a73a96d83570b9d6bdc027b64e3ff0aca19d6c0b621bd5156aee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd3169e07849f996eb281bf4700cea430e45eda54a80169f0a360362cc2a8e84\",\"dweb:/ipfs/QmXa1x3UpA9tAa26Fwf4b4MkVqeEfEFgDPhNfRMtwJuoms\"]},\"/Users/dror/IdeaProjects/gsn/contracts/interfaces/GsnTypes.sol\":{\"keccak256\":\"0xedcb9a8dfeed8c622844c604c5ebdb3a9fb92f859a1530b9327fb85476206062\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5fba2e08a6793d60d41c49c817a8837f7fdec6706950e804f79bac0a88b9bad0\",\"dweb:/ipfs/QmPnrUNzGvshVLrSmgBN4kB2Z2NXTzCyWuegjHo15292uD\"]},\"/Users/dror/IdeaProjects/gsn/contracts/interfaces/IPaymaster.sol\":{\"keccak256\":\"0x29ce667767ec535da1172bebf6924f24bc254c587fd2c1954a575b3bc06d9dbf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c243806f0ff756488f7212c7ee652d163b4c59e766274fbf8deb1fa5020b2a28\",\"dweb:/ipfs/QmZREaXLpsMnzYJjJhvo2T5vRXtinefqy1TwYeuHesaxY8\"]},\"/Users/dror/IdeaProjects/gsn/contracts/interfaces/IRelayHub.sol\":{\"keccak256\":\"0xea80327e2ca933cc697857c5546702c56ad84c4a3ffd92c7a90c980eedf4f79e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ebdd033b54c1e4701be43e0c12ca163564304c498eab2097d0326cb645ea81c\",\"dweb:/ipfs/QmWVLAaDmqAiB2EADZBuVojgzjYfX2gYk2o7wBqHm42Tpr\"]},\"/Users/dror/IdeaProjects/gsn/contracts/interfaces/IRelayRecipient.sol\":{\"keccak256\":\"0xbb9d970a466d0155113acc87f0ea403df413e070e0a1ddce66439f2f82ac6d01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a7d40ca09005a8a4598edc292c079be77fa0ba05f3a93514fcbe9349e8a265d\",\"dweb:/ipfs/QmbY3DJ6jf18Kprx24oadvMqrjguYUHhf2tBVd3kvCVtJc\"]},\"/Users/dror/IdeaProjects/gsn/contracts/interfaces/IStakeManager.sol\":{\"keccak256\":\"0xef5e2a00a9aa741faa94cf828dc060b05566dc87e32f2b41577e7d3a97f2cd8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99cc978b676db13da12ef5da9cc509715c3f24896b98cbac1af0f9d2d0ede554\",\"dweb:/ipfs/QmWBxE1Uxru5j26xBJ9tFzivCtdy5Fe6mZuC8mgLsmubyX\"]},\"/Users/dror/IdeaProjects/gsn/contracts/utils/GsnEip712Library.sol\":{\"keccak256\":\"0x9c380dd0a60ee6a26fb52acdbdd0fce4c9273a33c0e06b57989264820291d863\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cda18d10adb9f83c113a9184a881e34a7a5e3e7b06cf760c908b7507cac52d9f\",\"dweb:/ipfs/QmWQjHFmx2QYJzyTig6kzWPG34MQzVNqK2uibAvejuxywJ\"]},\"/Users/dror/IdeaProjects/gsn/contracts/utils/GsnUtils.sol\":{\"keccak256\":\"0x8f13a7751fe2d62056aafcd2492bac22defb01f05aee34e6b7827db66c6578ec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://28710b609b3066f482cdcbedd4f14255f4363b89dc6052d8da78ecfab4ef1681\",\"dweb:/ipfs/QmU7v21Qtm1wppx16nxdoh3VMSoaK66vyFYMezMXEZ15Db\"]},\"/Users/dror/IdeaProjects/gsn/contracts/utils/MinLibBytes.sol\":{\"keccak256\":\"0x96c2ad0c80e0db9a849d8f8c9ea865dface3b11983435fcfbd02cd05037293f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://643018a775e0d9df91ac9d28c9b5afc586f322eb14cb4cb9bcb0154a9bbf14e6\",\"dweb:/ipfs/QmPTAEP4VminSwttSwhvT2svenkLkjKsRtXiLpLAPc6ajC\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x9a9cf02622cd7a64261b10534fc3260449da25c98c9e96d1b4ae8110a20e5806\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2df142592d1dc267d9549049ee3317fa190d2f87eaa565f86ab05ec83f7ab8f5\",\"dweb:/ipfs/QmSkJtcfWo7c42KnL5hho6GFxK6HRNV91XABx1P7xDtfLV\"]}},\"version\":1}",
    "bytecode": "0x60c0604052601b60808190527f322e302e302b6f70656e67736e2e6875622e6972656c6179687562000000000060a0908152620000409160009190620000c5565b503480156200004e57600080fd5b50604051620032d3380380620032d383398101604081905262000071916200016a565b600880546001600160a01b039a8b166001600160a01b0319918216179091556009805499909a1698169790971790975560079490945560069290925560055560045560035560029190915560015562000205565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200010857805160ff191683800117855562000138565b8280016001018555821562000138579182015b82811115620001385782518255916020019190600101906200011b565b50620001469291506200014a565b5090565b6200016791905b8082111562000146576000815560010162000151565b90565b60008060008060008060008060006101208a8c03121562000189578485fd5b89516200019681620001ec565b60208b0151909950620001a981620001ec565b8098505060408a0151965060608a0151955060808a0151945060a08a0151935060c08a0151925060e08a015191506101008a015190509295985092959850929598565b6001600160a01b03811681146200020257600080fd5b50565b6130be80620002156000396000f3fe6080604052600436106101345760003560e01c8063aa67c919116100ab578063d904c7321161006f578063d904c7321461032a578063e5fad9781461034c578063ebcd31ac14610361578063ec5ffac214610381578063eea7570e14610396578063fbb44607146103ab57610134565b8063aa67c919146102ad578063ba3ecc5b146102c0578063c2da0786146102d5578063c4775a68146102f5578063ca998f561461030a57610134565b806370a08231116100fd57806370a082311461020157806371116320146102215780637542ff951461023657806383b718711461025857806383fea4ef1461027857806386a16f8f1461028d57610134565b8062f714ce14610139578063194ac3071461015b57806327b4256a146101915780632ad311b5146101bf5780633a3e83ac146101ec575b600080fd5b34801561014557600080fd5b5061015961015436600461220b565b6103d9565b005b34801561016757600080fd5b5061017b610176366004611f33565b6104d5565b60405161018891906127e3565b60405180910390f35b34801561019d57600080fd5b506101b16101ac36600461227d565b6104e7565b6040516101889291906127c0565b3480156101cb57600080fd5b506101df6101da366004611f33565b610b3f565b60405161018891906127b5565b3480156101f857600080fd5b5061017b610bd2565b34801561020d57600080fd5b5061017b61021c366004611f33565b610bd8565b34801561022d57600080fd5b5061017b610bf3565b34801561024257600080fd5b5061024b610bf9565b604051610188919061266a565b34801561026457600080fd5b50610159610273366004612320565b610c08565b34801561028457600080fd5b5061017b610cb1565b34801561029957600080fd5b5061017b6102a836600461222f565b610cb7565b6101596102bb366004611f33565b610d1b565b3480156102cc57600080fd5b5061017b610dc4565b3480156102e157600080fd5b506101596102f0366004611f87565b610dca565b34801561030157600080fd5b5061024b610f4b565b34801561031657600080fd5b5061024b610325366004611f33565b610f5a565b34801561033657600080fd5b5061033f610f75565b60405161018891906128b6565b34801561035857600080fd5b5061017b611003565b34801561036d57600080fd5b5061015961037c366004611f4f565b611009565b34801561038d57600080fd5b5061017b611187565b3480156103a257600080fd5b5061017b61118d565b3480156103b757600080fd5b506103cb6103c6366004612100565b611193565b604051610188929190612895565b336000818152600c60205260409020548311156104115760405162461bcd60e51b815260040161040890612bc1565b60405180910390fd5b6001600160a01b0381166000908152600c602052604090205461043a908463ffffffff61151316565b6001600160a01b038083166000908152600c60205260408082209390935591519084169185156108fc02918691818181858888f19350505050158015610484573d6000803e3d6000fd5b50816001600160a01b0316816001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb856040516104c891906127e3565b60405180910390a3505050565b600b6020526000908152604090205481565b600060606104f3611d28565b6105486105008a80612e7f565b61050e9060a0810190612e38565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611555915050565b6001600160e01b03191660208201523332146105765760405162461bcd60e51b815260040161040890612abe565b336000908152600a60205260409020546001600160a01b03166105ab5760405162461bcd60e51b815260040161040890612c87565b336105b960208b018b612e94565b6105ca906080810190606001611f33565b6001600160a01b0316146105f05760405162461bcd60e51b815260040161040890612bed565b336000908152600a6020526040902054610612906001600160a01b0316610b3f565b61062e5760405162461bcd60e51b815260040161040890612a87565b3a61063c60208b018b612e94565b35111561065b5760405162461bcd60e51b8152600401610408906129ac565b4584111561067b5760405162461bcd60e51b8152600401610408906128c9565b6106868a8a8661158e565b60e0830152608082015260065460009060405a603f02816106a357fe5b040390505a8261010001818152505060006005546004548784010101905060006060306001600160a01b03168463fbb4460760e01b8f8f8f8f8f8c608001515a8c038e60e00151604051602401610701989796959493929190612d58565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161073f9190612545565b60006040518083038160008787f1925050503d806000811461077d576040519150601f19603f3d011682016040523d82523d6000602084013e610782565b606091505b50811515875290925090505a6101008601510360c086015280516107af90820160209081019083016120a3565b8660a001876060018290528260068111156107c657fe5b60068111156107d157fe5b9052505060608501515115610822577fa1478a4242848419db824250a0dddc645dca0d6a9b12ab1fd79b00145a0ba98e8560a001518660600151604051610819929190612895565b60405180910390a15b5050505080600001516109625760808101515160c0820151108015610889575060028160a00151600681111561085457fe5b148061086f575060038160a00151600681111561086d57fe5b145b80610889575060048160a00151600681111561088757fe5b145b15610962576000925061089c8980612e7f565b6108aa906020810190611f33565b6001600160a01b03166108c060208b018b612e94565b6108d19060a0810190608001611f33565b336000908152600a60205260409020546001600160a01b0391821691167fddb88484d11f800b80fe63aa67488ec56ee001d85896d528912c5d850cbcd06a6109198d80612e7f565b61092a906040810190602001611f33565b3386602001518760c00151886060015160405161094b95949392919061267e565b60405180910390a460600151600092509050610b33565b60006004545a86030190506000610980826102a860208e018e612e94565b90506109d181600c60008e806020019061099a9190612e94565b6109ab9060a0810190608001611f33565b6001600160a01b031681526020810191909152604001600020549063ffffffff61151316565b600c60006109e260208f018f612e94565b6109f39060a0810190608001611f33565b6001600160a01b0390811682526020808301939093526040918201600090812094909455338452600a835281842054168352600c909152902054610a3d908263ffffffff61172e16565b336000908152600a60209081526040808320546001600160a01b03168352600c909152902055610a6d8b80612e7f565b610a7b906020810190611f33565b336000818152600a60205260409020546001600160a01b0392831692167fc9aa709786a3d5fe2cc947abc1ba8cbb0f6decb57aa74b84eb7f558125fee454610ac38f80612e7f565b610ad4906040810190602001611f33565b8f8060200190610ae49190612e94565b610af59060a0810190608001611f33565b88602001518960a0015188604051610b119594939291906126f0565b60405180910390a4600160405180602001604052806000815250945094505050505b97509795505050505050565b600854600154600254604051636de8dd4160e01b81526000936001600160a01b031692636de8dd4192610b7a92879230929091600401612736565b60206040518083038186803b158015610b9257600080fd5b505afa158015610ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bca9190611ff3565b90505b919050565b60035481565b6001600160a01b03166000908152600c602052604090205490565b60025481565b6008546001600160a01b031681565b33610c1281610b3f565b610c2e5760405162461bcd60e51b815260040161040890612a87565b6001600160a01b0381166000908152600b6020526040902054610c635760405162461bcd60e51b815260040161040890612b05565b806001600160a01b03167f77f2d8afec4b9d82ffa0dea525320620292bd1067f575964994d5c4501479aed86868686604051610ca29493929190612e18565b60405180910390a25050505050565b60045481565b6000610d12610d016064610cf5610cd860208701358363ffffffff61172e16565b610ce988883563ffffffff61175316565b9063ffffffff61175316565b9063ffffffff61178d16565b60408401359063ffffffff61172e16565b90505b92915050565b6003543490811115610d3f5760405162461bcd60e51b815260040161040890612a5e565b6001600160a01b0382166000908152600c6020526040902054610d68908263ffffffff61172e16565b6001600160a01b0383166000818152600c6020526040908190209290925590513391907f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a790610db89085906127e3565b60405180910390a35050565b60055481565b336000818152600b6020526040902080548301908190556007541015610e025760405162461bcd60e51b815260040161040890612b97565b610e0b81610b3f565b610e275760405162461bcd60e51b815260040161040890612a87565b60005b82811015610ef1576000600a81868685818110610e4357fe5b9050602002016020810190610e589190611f33565b6001600160a01b0390811682526020820192909252604001600020541614610e925760405162461bcd60e51b8152600401610408906128f7565b81600a6000868685818110610ea357fe5b9050602002016020810190610eb89190611f33565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b03191692909116919091179055600101610e2a565b506001600160a01b0381166000818152600b6020526040908190205490517febf4a9bffb39f7c5dbf3f65540183b9381ae226ac3d0a45b4cad484713bd4a2891610f3e918791879161275f565b60405180910390a2505050565b6009546001600160a01b031681565b600a602052600090815260409020546001600160a01b031681565b6000805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ffb5780601f10610fd057610100808354040283529160200191610ffb565b820191906000526020600020905b815481529060010190602001808311610fde57829003601f168201915b505050505081565b60075481565b6009546001600160a01b031633146110335760405162461bcd60e51b815260040161040890612b2f565b6001600160a01b038083166000908152600a6020526040902054168061106b5760405162461bcd60e51b815260040161040890612c87565b61107481610b3f565b6110905760405162461bcd60e51b815260040161040890612a87565b611098611d8d565b60085460405163c345315360e01b81526001600160a01b039091169063c3453153906110c890859060040161266a565b60806040518083038186803b1580156110e057600080fd5b505afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111891906121be565b600854815160405163026822bd60e21b81529293506001600160a01b03909116916309a08af49161114f91869188916004016126cc565b600060405180830381600087803b15801561116957600080fd5b505af115801561117d573d6000803e3d6000fd5b5050505050505050565b60015481565b60065481565b6000606061119f611dbe565b3330146111be5760405162461bcd60e51b81526004016104089061292e565b600c60006111cf60208e018e612e94565b6111e09060a0810190608001611f33565b6001600160a01b0316815260208101919091526040908101600020548252516372e0922360e11b90611220908d908d908d908d908d908b90602401612dca565b60408051601f19818403018152919052602080820180516001600160e01b03166001600160e01b03199094169390931790925260a083015260009060609061126a908e018e612e94565b61127b9060a0810190608001611f33565b6001600160a01b031688602001358460a0015160405161129b9190612545565b60006040518083038160008787f1925050503d80600081146112d9576040519150601f19603f3d011682016040523d82523d6000602084013e6112de565b606091505b509092509050816112fd576112f2816117cf565b6112fd6002826117de565b80806020019051810190611311919061205e565b151560c08501526080840152506000905061132d8c8c8c611817565b60608501521515604084015290508061134f5761134f600383606001516117de565b8160c00151801561136257508160400151155b1561137657611376600483606001516117de565b50638e9483b060e01b816080015182604001515a88038e806020019061139c9190612e94565b6040516024016113af9493929190612862565b60408051601f19818403018152919052602080820180516001600160e01b03166001600160e01b03199094169390931790925260a08301526000906060906113f9908e018e612e94565b61140a9060a0810190608001611f33565b6001600160a01b031688604001358460a0015160405161142a9190612545565b60006040518083038160008787f1925050503d8060008114611468576040519150601f19603f3d011682016040523d82523d6000602084013e61146d565b606091505b509150915081611482576114826005826117de565b50508051600c600061149760208f018f612e94565b6114a89060a0810190608001611f33565b6001600160a01b03166001600160a01b031681526020019081526020016000205410156114e9576114e96006604051806020016040528060008152506117de565b80604001516114f95760016114fc565b60005b816060015192509250509850989650505050505050565b6000610d1283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a00565b6000816004018351101561157b5760405162461bcd60e51b815260040161040890612c50565b5001602001516001600160e01b03191690565b611596611df9565b60006115a56020850185612e94565b6115b69060a0810190608001611f33565b6001600160a01b0316635ea54eee61c3506040518263ffffffff1660e01b815260040160606040518083038187803b1580156115f157600080fd5b5086fa158015611605573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061162a91906120c3565b805190925085101561164e5760405162461bcd60e51b8152600401610408906129d7565b61168c61165b8580612e7f565b606001356116808460400151611680866020015160045461172e90919063ffffffff16565b9063ffffffff61172e16565b9050808310156116ae5760405162461bcd60e51b815260040161040890612a0c565b60006116c1826102a86020880188612e94565b9050600c60006116d46020880188612e94565b6116e59060a0810190608001611f33565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156117255760405162461bcd60e51b815260040161040890612c19565b50935093915050565b600082820183811015610d125760405162461bcd60e51b815260040161040890612975565b60008261176257506000610d15565b8282028284828161176f57fe5b0414610d125760405162461bcd60e51b815260040161040890612b56565b6000610d1283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611a2c565b6117db81610400611a63565b50565b606082826040516020016117f3929190612895565b604051602081830303815290604052905061180d816117cf565b8051602082018181fd5b6000806060611824611e1a565b606061182f88611a74565b9092509050600061185d61184660208b018b612e94565b6118589061010081019060e001611f33565b611b9e565b905061186c60208a018a612e94565b61187e9061010081019060e001611f33565b6001600160a01b031663cdf5735a60e01b84836040518060400160405280600c81526020016b14995b185e54995c5d595cdd60a21b8152506040518060800160405280604a815260200161303f604a91396040518060e0016040528060a18152602001612f9e60a191396040516020016118f891906125c4565b60408051601f1981840301815290829052611917939291602001612561565b60405160208183030381529060405280519060200120868d8d60405160240161194596959493929190612cb5565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516119839190612545565b6000604051808303816000865af19150503d80600081146119c0576040519150601f19603f3d011682016040523d82523d6000602084013e6119c5565b606091505b50909650935085156119eb57838060200190518101906119e5919061200f565b90955093505b6119f4846117cf565b50505093509350939050565b60008184841115611a245760405162461bcd60e51b815260040161040891906128b6565b505050900390565b60008183611a4d5760405162461bcd60e51b815260040161040891906128b6565b506000838581611a5957fe5b0495945050505050565b8082511115611a70578082525b5050565b611a7c611e1a565b6040805160c0810190915260609080611a958580612e7f565b611aa3906020810190611f33565b6001600160a01b03168152602001611abb8580612e7f565b611acc906040810190602001611f33565b6001600160a01b03168152602001611ae48580612e7f565b604001358152602001611af78580612e7f565b606001358152602001611b0a8580612e7f565b608001358152602001611b1d8580612e7f565b611b2b9060a0810190612e38565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509150611b78611b736020850185612e94565b611c1e565b604051602001611b8891906127e3565b6040516020818303038152906040529050915091565b6040805160c0810182526017608082019081527f47534e2052656c61796564205472616e73616374696f6e00000000000000000060a083015281528151808301835260018152601960f91b602082810191909152820152600091610bca91908101611c07611cd8565b8152602001846001600160a01b0316815250611cdc565b60006040518060e0016040528060a18152602001612f9e60a191398051602091820120908335908401356040850135611c5d6080870160608801611f33565b611c6d60a0880160808901611f33565b611c7e610100890160e08a01611f33565b611c8b60a08a018a612e38565b604051611c99929190612535565b604051908190038120611cbb989796959493929160c08c013590602001612818565b604051602081830303815290604052805190602001209050919050565b4690565b6000604051611cea90612600565b604051809103902082600001518051906020012083602001518051906020012084604001518560600151604051602001611cbb9594939291906127ec565b60405180610140016040528060001515815260200160006001600160e01b03191681526020016060815260200160608152602001611d64611df9565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b604051806080016040528060008152602001600081526020016000815260200160006001600160a01b031681525090565b6040805160e08101825260008082526020820181905291810182905260608082018190526080820181905260a082015260c081019190915290565b60405180606001604052806000815260200160008152602001600081525090565b6040518060c0016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001606081525090565b8035610d1581612f7a565b60008083601f840112611e7e578182fd5b50813567ffffffffffffffff811115611e95578182fd5b602083019150836020828501011115611ead57600080fd5b9250929050565b600082601f830112611ec4578081fd5b815167ffffffffffffffff811115611eda578182fd5b611eed601f8201601f1916602001612ea9565b9150808252836020828501011115611f0457600080fd5b611f15816020840160208601612f4a565b5092915050565b600060408284031215611f2d578081fd5b50919050565b600060208284031215611f44578081fd5b8135610d1281612f7a565b60008060408385031215611f61578081fd5b8235611f6c81612f7a565b91506020830135611f7c81612f7a565b809150509250929050565b60008060208385031215611f99578182fd5b823567ffffffffffffffff80821115611fb0578384fd5b81850186601f820112611fc1578485fd5b8035925081831115611fd1578485fd5b8660208085028301011115611fe4578485fd5b60200196919550909350505050565b600060208284031215612004578081fd5b8151610d1281612f8f565b60008060408385031215612021578182fd5b825161202c81612f8f565b602084015190925067ffffffffffffffff811115612048578182fd5b61205485828601611eb4565b9150509250929050565b60008060408385031215612070578182fd5b825167ffffffffffffffff811115612086578283fd5b61209285828601611eb4565b9250506020830151611f7c81612f8f565b600080604083850312156120b5578182fd5b82516007811061202c578283fd5b6000606082840312156120d4578081fd5b6120de6060612ea9565b8251815260208301516020820152604083015160408201528091505092915050565b600080600080600080600080888a0361010081121561211d578485fd5b893567ffffffffffffffff80821115612134578687fd5b6121408d838e01611f1c565b9a5060208c0135915080821115612155578687fd5b6121618d838e01611e6d565b909a50985060408c0135915080821115612179578687fd5b506121868c828d01611e6d565b9097509550506060605f198201121561219d578384fd5b5096999598509396929550909360608301935060c08301359260e001359150565b6000608082840312156121cf578081fd5b6121d96080612ea9565b82518152602083015160208201526040830151604082015260608301516121ff81612f7a565b60608201529392505050565b6000806040838503121561221d578182fd5b823591506020830135611f7c81612f7a565b60008060408385031215612241578182fd5b82359150602083013567ffffffffffffffff81111561225e578182fd5b8084016101008187031215612271578283fd5b80925050509250929050565b600080600080600080600060a0888a031215612297578081fd5b87359650602088013567ffffffffffffffff808211156122b5578283fd5b6122c18b838c01611f1c565b975060408a01359150808211156122d6578283fd5b6122e28b838c01611e6d565b909750955060608a01359150808211156122fa578283fd5b506123078a828b01611e6d565b989b979a50959894979596608090950135949350505050565b60008060008060608587031215612335578182fd5b8435935060208501359250604085013567ffffffffffffffff811115612359578283fd5b61236587828801611e6d565b95989497509550505050565b6001600160a01b03169052565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526123c0816020860160208601612f4a565b601f01601f19169290920160200192915050565b600061010082358452602083013560208501526040830135604085015260608301356123ff81612f7a565b6001600160a01b03908116606086015260808401359061241e82612f7a565b16608085015261243160a0840184612ed0565b8260a0870152612444838701828461237e565b60c086013560c088015260e0860135935061245e84612f7a565b61246b60e0880185612371565b9695505050505050565b6000813560be1983360301811261248a578182fd5b60408452820180359061249c82612f7a565b6001600160a01b03918216604086810191909152810191806124c18460208501611e62565b1660608701525081356080860152606081013560a0860152608081013560c08601526124f060a0820182612ed0565b925060c060e08701526125086101008701848361237e565b9150506125186020850185612f15565b9150848103602086015261252c81836123d4565b95945050505050565b6000828483379101908152919050565b60008251612557818460208701612f4a565b9190910192915050565b60008451612573818460208901612f4a565b808301600560fb1b815285519150612592826001830160208901612f4a565b818101600b60fa1b6001820152855192506125b4836002830160208901612f4a565b9091016002019695505050505050565b60007352656c6179446174612072656c6179446174612960601b825282516125f3816014850160208701612f4a565b9190910160140192915050565b7f454950373132446f6d61696e28737472696e67206e616d652c737472696e672081527f76657273696f6e2c75696e7432353620636861696e49642c6164647265737320602082015271766572696679696e67436f6e74726163742960701b604082015260520190565b6001600160a01b0391909116815260200190565b6001600160a01b038681168252851660208201526001600160e01b0319841660408201526060810183905260a0608082018190526000906126c1908301846123a8565b979650505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b038681168252851660208201526001600160e01b03198416604082015260a0810161272184612f3f565b60608301528260808301529695505050505050565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b6040808252810183905260008460608301825b868110156127a2576020833561278781612f7a565b6001600160a01b031683529283019290910190600101612772565b5060209390930193909352509392505050565b901515815260200190565b60008315158252604060208301526127db60408301846123a8565b949350505050565b90815260200190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b9889526020890197909752604088019590955260608701939093526001600160a01b039182166080870152811660a08601521660c084015260e08301526101008201526101200190565b60006080825261287560808301876123a8565b851515602084015284604084015282810360608401526126c181856123d4565b60006128a084612f3f565b8252604060208301526127db60408301846123a8565b600060208252610d1260208301846123a8565b602080825260149082015273125b5c1bdcdcda589b194819d85cc81b1a5b5a5d60621b604082015260600190565b60208082526019908201527f7468697320776f726b6572206861732061206d616e6167657200000000000000604082015260600190565b60208082526027908201527f4f6e6c792052656c61794875622073686f756c642063616c6c207468697320666040820152663ab731ba34b7b760c91b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b602080825260119082015270496e76616c69642067617320707269636560781b604082015260600190565b6020808252818101527f756e6578706563746564206869676820616363657074616e6365427564676574604082015260600190565b60208082526032908201527f4e6f7420656e6f75676820676173206c65667420666f7220696e6e657252656c604082015271617943616c6c20746f20636f6d706c65746560701b606082015260800190565b6020808252600f908201526e6465706f73697420746f6f2062696760881b604082015260600190565b60208082526018908201527f72656c6179206d616e61676572206e6f74207374616b65640000000000000000604082015260600190565b60208082526027908201527f72656c617920776f726b65722063616e6e6f74206265206120736d61727420636040820152661bdb9d1c9858dd60ca1b606082015260800190565b60208082526010908201526f6e6f2072656c617920776f726b65727360801b604082015260600190565b6020808252600d908201526c2737ba103832b730b634bd32b960991b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526010908201526f746f6f206d616e7920776f726b65727360801b604082015260600190565b602080825260129082015271696e73756666696369656e742066756e647360701b604082015260600190565b6020808252601290820152712737ba1030903934b3b43a103bb7b935b2b960711b604082015260600190565b60208082526019908201527f5061796d61737465722062616c616e636520746f6f206c6f7700000000000000604082015260600190565b6020808252601a908201527f726561644279746573343a206461746120746f6f2073686f7274000000000000604082015260600190565b6020808252601490820152732ab735b737bbb7103932b630bc903bb7b935b2b960611b604082015260600190565b600060a08252612cc58851612f33565b60a083015260018060a01b0360208901511660c0830152604088015160e08301526060880151610100830152608088015161012083015260a088015160c0610140840152612d176101608401826123a8565b8860208501528760408501528381036060850152612d3581886123a8565b9150508281036080840152612d4b81858761237e565b9998505050505050505050565b6000610100808352612d6c8184018c612475565b8381036020850152612d7f818b8d61237e565b9150508281036040840152612d9581888a61237e565b865160608501526020870151608085015260409096015160a0840152505060c081019290925260e09091015295945050505050565b600060808252612ddd6080830189612475565b8281036020840152612df081888a61237e565b8381036040850152612e0381878961237e565b92505050826060830152979650505050505050565b60008582528460208301526060604083015261246b60608301848661237e565b6000808335601e19843603018112612e4e578283fd5b8084018035925067ffffffffffffffff831115612e69578384fd5b60200192505036819003821315611ead57600080fd5b6000823560be19833603018112612557578182fd5b6000823560fe19833603018112612557578182fd5b60405181810167ffffffffffffffff81118282101715612ec857600080fd5b604052919050565b6000808335601e19843603018112612ee6578283fd5b830160208101925035905067ffffffffffffffff811115612f0657600080fd5b803603831315611ead57600080fd5b6000823560fe19833603018112612f2a578182fd5b90910192915050565b6001600160a01b031690565b8060078110610bcd57fe5b60005b83811015612f65578181015183820152602001612f4d565b83811115612f74576000848401525b50505050565b6001600160a01b03811681146117db57600080fd5b80151581146117db57600080fdfe52656c6179446174612875696e743235362067617350726963652c75696e743235362070637452656c61794665652c75696e74323536206261736552656c61794665652c616464726573732072656c6179576f726b65722c61646472657373207061796d61737465722c6164647265737320666f727761726465722c6279746573207061796d6173746572446174612c75696e7432353620636c69656e74496429616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c62797465732064617461a26469706673582212203aed185c4945a69a47b1d120bd0f8314c05a4653672f2c271eae76e1d161c6fd64736f6c634300060a0033",
    "deployedBytecode": "0x6080604052600436106101345760003560e01c8063aa67c919116100ab578063d904c7321161006f578063d904c7321461032a578063e5fad9781461034c578063ebcd31ac14610361578063ec5ffac214610381578063eea7570e14610396578063fbb44607146103ab57610134565b8063aa67c919146102ad578063ba3ecc5b146102c0578063c2da0786146102d5578063c4775a68146102f5578063ca998f561461030a57610134565b806370a08231116100fd57806370a082311461020157806371116320146102215780637542ff951461023657806383b718711461025857806383fea4ef1461027857806386a16f8f1461028d57610134565b8062f714ce14610139578063194ac3071461015b57806327b4256a146101915780632ad311b5146101bf5780633a3e83ac146101ec575b600080fd5b34801561014557600080fd5b5061015961015436600461220b565b6103d9565b005b34801561016757600080fd5b5061017b610176366004611f33565b6104d5565b60405161018891906127e3565b60405180910390f35b34801561019d57600080fd5b506101b16101ac36600461227d565b6104e7565b6040516101889291906127c0565b3480156101cb57600080fd5b506101df6101da366004611f33565b610b3f565b60405161018891906127b5565b3480156101f857600080fd5b5061017b610bd2565b34801561020d57600080fd5b5061017b61021c366004611f33565b610bd8565b34801561022d57600080fd5b5061017b610bf3565b34801561024257600080fd5b5061024b610bf9565b604051610188919061266a565b34801561026457600080fd5b50610159610273366004612320565b610c08565b34801561028457600080fd5b5061017b610cb1565b34801561029957600080fd5b5061017b6102a836600461222f565b610cb7565b6101596102bb366004611f33565b610d1b565b3480156102cc57600080fd5b5061017b610dc4565b3480156102e157600080fd5b506101596102f0366004611f87565b610dca565b34801561030157600080fd5b5061024b610f4b565b34801561031657600080fd5b5061024b610325366004611f33565b610f5a565b34801561033657600080fd5b5061033f610f75565b60405161018891906128b6565b34801561035857600080fd5b5061017b611003565b34801561036d57600080fd5b5061015961037c366004611f4f565b611009565b34801561038d57600080fd5b5061017b611187565b3480156103a257600080fd5b5061017b61118d565b3480156103b757600080fd5b506103cb6103c6366004612100565b611193565b604051610188929190612895565b336000818152600c60205260409020548311156104115760405162461bcd60e51b815260040161040890612bc1565b60405180910390fd5b6001600160a01b0381166000908152600c602052604090205461043a908463ffffffff61151316565b6001600160a01b038083166000908152600c60205260408082209390935591519084169185156108fc02918691818181858888f19350505050158015610484573d6000803e3d6000fd5b50816001600160a01b0316816001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb856040516104c891906127e3565b60405180910390a3505050565b600b6020526000908152604090205481565b600060606104f3611d28565b6105486105008a80612e7f565b61050e9060a0810190612e38565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611555915050565b6001600160e01b03191660208201523332146105765760405162461bcd60e51b815260040161040890612abe565b336000908152600a60205260409020546001600160a01b03166105ab5760405162461bcd60e51b815260040161040890612c87565b336105b960208b018b612e94565b6105ca906080810190606001611f33565b6001600160a01b0316146105f05760405162461bcd60e51b815260040161040890612bed565b336000908152600a6020526040902054610612906001600160a01b0316610b3f565b61062e5760405162461bcd60e51b815260040161040890612a87565b3a61063c60208b018b612e94565b35111561065b5760405162461bcd60e51b8152600401610408906129ac565b4584111561067b5760405162461bcd60e51b8152600401610408906128c9565b6106868a8a8661158e565b60e0830152608082015260065460009060405a603f02816106a357fe5b040390505a8261010001818152505060006005546004548784010101905060006060306001600160a01b03168463fbb4460760e01b8f8f8f8f8f8c608001515a8c038e60e00151604051602401610701989796959493929190612d58565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161073f9190612545565b60006040518083038160008787f1925050503d806000811461077d576040519150601f19603f3d011682016040523d82523d6000602084013e610782565b606091505b50811515875290925090505a6101008601510360c086015280516107af90820160209081019083016120a3565b8660a001876060018290528260068111156107c657fe5b60068111156107d157fe5b9052505060608501515115610822577fa1478a4242848419db824250a0dddc645dca0d6a9b12ab1fd79b00145a0ba98e8560a001518660600151604051610819929190612895565b60405180910390a15b5050505080600001516109625760808101515160c0820151108015610889575060028160a00151600681111561085457fe5b148061086f575060038160a00151600681111561086d57fe5b145b80610889575060048160a00151600681111561088757fe5b145b15610962576000925061089c8980612e7f565b6108aa906020810190611f33565b6001600160a01b03166108c060208b018b612e94565b6108d19060a0810190608001611f33565b336000908152600a60205260409020546001600160a01b0391821691167fddb88484d11f800b80fe63aa67488ec56ee001d85896d528912c5d850cbcd06a6109198d80612e7f565b61092a906040810190602001611f33565b3386602001518760c00151886060015160405161094b95949392919061267e565b60405180910390a460600151600092509050610b33565b60006004545a86030190506000610980826102a860208e018e612e94565b90506109d181600c60008e806020019061099a9190612e94565b6109ab9060a0810190608001611f33565b6001600160a01b031681526020810191909152604001600020549063ffffffff61151316565b600c60006109e260208f018f612e94565b6109f39060a0810190608001611f33565b6001600160a01b0390811682526020808301939093526040918201600090812094909455338452600a835281842054168352600c909152902054610a3d908263ffffffff61172e16565b336000908152600a60209081526040808320546001600160a01b03168352600c909152902055610a6d8b80612e7f565b610a7b906020810190611f33565b336000818152600a60205260409020546001600160a01b0392831692167fc9aa709786a3d5fe2cc947abc1ba8cbb0f6decb57aa74b84eb7f558125fee454610ac38f80612e7f565b610ad4906040810190602001611f33565b8f8060200190610ae49190612e94565b610af59060a0810190608001611f33565b88602001518960a0015188604051610b119594939291906126f0565b60405180910390a4600160405180602001604052806000815250945094505050505b97509795505050505050565b600854600154600254604051636de8dd4160e01b81526000936001600160a01b031692636de8dd4192610b7a92879230929091600401612736565b60206040518083038186803b158015610b9257600080fd5b505afa158015610ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bca9190611ff3565b90505b919050565b60035481565b6001600160a01b03166000908152600c602052604090205490565b60025481565b6008546001600160a01b031681565b33610c1281610b3f565b610c2e5760405162461bcd60e51b815260040161040890612a87565b6001600160a01b0381166000908152600b6020526040902054610c635760405162461bcd60e51b815260040161040890612b05565b806001600160a01b03167f77f2d8afec4b9d82ffa0dea525320620292bd1067f575964994d5c4501479aed86868686604051610ca29493929190612e18565b60405180910390a25050505050565b60045481565b6000610d12610d016064610cf5610cd860208701358363ffffffff61172e16565b610ce988883563ffffffff61175316565b9063ffffffff61175316565b9063ffffffff61178d16565b60408401359063ffffffff61172e16565b90505b92915050565b6003543490811115610d3f5760405162461bcd60e51b815260040161040890612a5e565b6001600160a01b0382166000908152600c6020526040902054610d68908263ffffffff61172e16565b6001600160a01b0383166000818152600c6020526040908190209290925590513391907f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a790610db89085906127e3565b60405180910390a35050565b60055481565b336000818152600b6020526040902080548301908190556007541015610e025760405162461bcd60e51b815260040161040890612b97565b610e0b81610b3f565b610e275760405162461bcd60e51b815260040161040890612a87565b60005b82811015610ef1576000600a81868685818110610e4357fe5b9050602002016020810190610e589190611f33565b6001600160a01b0390811682526020820192909252604001600020541614610e925760405162461bcd60e51b8152600401610408906128f7565b81600a6000868685818110610ea357fe5b9050602002016020810190610eb89190611f33565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b03191692909116919091179055600101610e2a565b506001600160a01b0381166000818152600b6020526040908190205490517febf4a9bffb39f7c5dbf3f65540183b9381ae226ac3d0a45b4cad484713bd4a2891610f3e918791879161275f565b60405180910390a2505050565b6009546001600160a01b031681565b600a602052600090815260409020546001600160a01b031681565b6000805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ffb5780601f10610fd057610100808354040283529160200191610ffb565b820191906000526020600020905b815481529060010190602001808311610fde57829003601f168201915b505050505081565b60075481565b6009546001600160a01b031633146110335760405162461bcd60e51b815260040161040890612b2f565b6001600160a01b038083166000908152600a6020526040902054168061106b5760405162461bcd60e51b815260040161040890612c87565b61107481610b3f565b6110905760405162461bcd60e51b815260040161040890612a87565b611098611d8d565b60085460405163c345315360e01b81526001600160a01b039091169063c3453153906110c890859060040161266a565b60806040518083038186803b1580156110e057600080fd5b505afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111891906121be565b600854815160405163026822bd60e21b81529293506001600160a01b03909116916309a08af49161114f91869188916004016126cc565b600060405180830381600087803b15801561116957600080fd5b505af115801561117d573d6000803e3d6000fd5b5050505050505050565b60015481565b60065481565b6000606061119f611dbe565b3330146111be5760405162461bcd60e51b81526004016104089061292e565b600c60006111cf60208e018e612e94565b6111e09060a0810190608001611f33565b6001600160a01b0316815260208101919091526040908101600020548252516372e0922360e11b90611220908d908d908d908d908d908b90602401612dca565b60408051601f19818403018152919052602080820180516001600160e01b03166001600160e01b03199094169390931790925260a083015260009060609061126a908e018e612e94565b61127b9060a0810190608001611f33565b6001600160a01b031688602001358460a0015160405161129b9190612545565b60006040518083038160008787f1925050503d80600081146112d9576040519150601f19603f3d011682016040523d82523d6000602084013e6112de565b606091505b509092509050816112fd576112f2816117cf565b6112fd6002826117de565b80806020019051810190611311919061205e565b151560c08501526080840152506000905061132d8c8c8c611817565b60608501521515604084015290508061134f5761134f600383606001516117de565b8160c00151801561136257508160400151155b1561137657611376600483606001516117de565b50638e9483b060e01b816080015182604001515a88038e806020019061139c9190612e94565b6040516024016113af9493929190612862565b60408051601f19818403018152919052602080820180516001600160e01b03166001600160e01b03199094169390931790925260a08301526000906060906113f9908e018e612e94565b61140a9060a0810190608001611f33565b6001600160a01b031688604001358460a0015160405161142a9190612545565b60006040518083038160008787f1925050503d8060008114611468576040519150601f19603f3d011682016040523d82523d6000602084013e61146d565b606091505b509150915081611482576114826005826117de565b50508051600c600061149760208f018f612e94565b6114a89060a0810190608001611f33565b6001600160a01b03166001600160a01b031681526020019081526020016000205410156114e9576114e96006604051806020016040528060008152506117de565b80604001516114f95760016114fc565b60005b816060015192509250509850989650505050505050565b6000610d1283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a00565b6000816004018351101561157b5760405162461bcd60e51b815260040161040890612c50565b5001602001516001600160e01b03191690565b611596611df9565b60006115a56020850185612e94565b6115b69060a0810190608001611f33565b6001600160a01b0316635ea54eee61c3506040518263ffffffff1660e01b815260040160606040518083038187803b1580156115f157600080fd5b5086fa158015611605573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061162a91906120c3565b805190925085101561164e5760405162461bcd60e51b8152600401610408906129d7565b61168c61165b8580612e7f565b606001356116808460400151611680866020015160045461172e90919063ffffffff16565b9063ffffffff61172e16565b9050808310156116ae5760405162461bcd60e51b815260040161040890612a0c565b60006116c1826102a86020880188612e94565b9050600c60006116d46020880188612e94565b6116e59060a0810190608001611f33565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156117255760405162461bcd60e51b815260040161040890612c19565b50935093915050565b600082820183811015610d125760405162461bcd60e51b815260040161040890612975565b60008261176257506000610d15565b8282028284828161176f57fe5b0414610d125760405162461bcd60e51b815260040161040890612b56565b6000610d1283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611a2c565b6117db81610400611a63565b50565b606082826040516020016117f3929190612895565b604051602081830303815290604052905061180d816117cf565b8051602082018181fd5b6000806060611824611e1a565b606061182f88611a74565b9092509050600061185d61184660208b018b612e94565b6118589061010081019060e001611f33565b611b9e565b905061186c60208a018a612e94565b61187e9061010081019060e001611f33565b6001600160a01b031663cdf5735a60e01b84836040518060400160405280600c81526020016b14995b185e54995c5d595cdd60a21b8152506040518060800160405280604a815260200161303f604a91396040518060e0016040528060a18152602001612f9e60a191396040516020016118f891906125c4565b60408051601f1981840301815290829052611917939291602001612561565b60405160208183030381529060405280519060200120868d8d60405160240161194596959493929190612cb5565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516119839190612545565b6000604051808303816000865af19150503d80600081146119c0576040519150601f19603f3d011682016040523d82523d6000602084013e6119c5565b606091505b50909650935085156119eb57838060200190518101906119e5919061200f565b90955093505b6119f4846117cf565b50505093509350939050565b60008184841115611a245760405162461bcd60e51b815260040161040891906128b6565b505050900390565b60008183611a4d5760405162461bcd60e51b815260040161040891906128b6565b506000838581611a5957fe5b0495945050505050565b8082511115611a70578082525b5050565b611a7c611e1a565b6040805160c0810190915260609080611a958580612e7f565b611aa3906020810190611f33565b6001600160a01b03168152602001611abb8580612e7f565b611acc906040810190602001611f33565b6001600160a01b03168152602001611ae48580612e7f565b604001358152602001611af78580612e7f565b606001358152602001611b0a8580612e7f565b608001358152602001611b1d8580612e7f565b611b2b9060a0810190612e38565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509150611b78611b736020850185612e94565b611c1e565b604051602001611b8891906127e3565b6040516020818303038152906040529050915091565b6040805160c0810182526017608082019081527f47534e2052656c61796564205472616e73616374696f6e00000000000000000060a083015281528151808301835260018152601960f91b602082810191909152820152600091610bca91908101611c07611cd8565b8152602001846001600160a01b0316815250611cdc565b60006040518060e0016040528060a18152602001612f9e60a191398051602091820120908335908401356040850135611c5d6080870160608801611f33565b611c6d60a0880160808901611f33565b611c7e610100890160e08a01611f33565b611c8b60a08a018a612e38565b604051611c99929190612535565b604051908190038120611cbb989796959493929160c08c013590602001612818565b604051602081830303815290604052805190602001209050919050565b4690565b6000604051611cea90612600565b604051809103902082600001518051906020012083602001518051906020012084604001518560600151604051602001611cbb9594939291906127ec565b60405180610140016040528060001515815260200160006001600160e01b03191681526020016060815260200160608152602001611d64611df9565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b604051806080016040528060008152602001600081526020016000815260200160006001600160a01b031681525090565b6040805160e08101825260008082526020820181905291810182905260608082018190526080820181905260a082015260c081019190915290565b60405180606001604052806000815260200160008152602001600081525090565b6040518060c0016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001606081525090565b8035610d1581612f7a565b60008083601f840112611e7e578182fd5b50813567ffffffffffffffff811115611e95578182fd5b602083019150836020828501011115611ead57600080fd5b9250929050565b600082601f830112611ec4578081fd5b815167ffffffffffffffff811115611eda578182fd5b611eed601f8201601f1916602001612ea9565b9150808252836020828501011115611f0457600080fd5b611f15816020840160208601612f4a565b5092915050565b600060408284031215611f2d578081fd5b50919050565b600060208284031215611f44578081fd5b8135610d1281612f7a565b60008060408385031215611f61578081fd5b8235611f6c81612f7a565b91506020830135611f7c81612f7a565b809150509250929050565b60008060208385031215611f99578182fd5b823567ffffffffffffffff80821115611fb0578384fd5b81850186601f820112611fc1578485fd5b8035925081831115611fd1578485fd5b8660208085028301011115611fe4578485fd5b60200196919550909350505050565b600060208284031215612004578081fd5b8151610d1281612f8f565b60008060408385031215612021578182fd5b825161202c81612f8f565b602084015190925067ffffffffffffffff811115612048578182fd5b61205485828601611eb4565b9150509250929050565b60008060408385031215612070578182fd5b825167ffffffffffffffff811115612086578283fd5b61209285828601611eb4565b9250506020830151611f7c81612f8f565b600080604083850312156120b5578182fd5b82516007811061202c578283fd5b6000606082840312156120d4578081fd5b6120de6060612ea9565b8251815260208301516020820152604083015160408201528091505092915050565b600080600080600080600080888a0361010081121561211d578485fd5b893567ffffffffffffffff80821115612134578687fd5b6121408d838e01611f1c565b9a5060208c0135915080821115612155578687fd5b6121618d838e01611e6d565b909a50985060408c0135915080821115612179578687fd5b506121868c828d01611e6d565b9097509550506060605f198201121561219d578384fd5b5096999598509396929550909360608301935060c08301359260e001359150565b6000608082840312156121cf578081fd5b6121d96080612ea9565b82518152602083015160208201526040830151604082015260608301516121ff81612f7a565b60608201529392505050565b6000806040838503121561221d578182fd5b823591506020830135611f7c81612f7a565b60008060408385031215612241578182fd5b82359150602083013567ffffffffffffffff81111561225e578182fd5b8084016101008187031215612271578283fd5b80925050509250929050565b600080600080600080600060a0888a031215612297578081fd5b87359650602088013567ffffffffffffffff808211156122b5578283fd5b6122c18b838c01611f1c565b975060408a01359150808211156122d6578283fd5b6122e28b838c01611e6d565b909750955060608a01359150808211156122fa578283fd5b506123078a828b01611e6d565b989b979a50959894979596608090950135949350505050565b60008060008060608587031215612335578182fd5b8435935060208501359250604085013567ffffffffffffffff811115612359578283fd5b61236587828801611e6d565b95989497509550505050565b6001600160a01b03169052565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526123c0816020860160208601612f4a565b601f01601f19169290920160200192915050565b600061010082358452602083013560208501526040830135604085015260608301356123ff81612f7a565b6001600160a01b03908116606086015260808401359061241e82612f7a565b16608085015261243160a0840184612ed0565b8260a0870152612444838701828461237e565b60c086013560c088015260e0860135935061245e84612f7a565b61246b60e0880185612371565b9695505050505050565b6000813560be1983360301811261248a578182fd5b60408452820180359061249c82612f7a565b6001600160a01b03918216604086810191909152810191806124c18460208501611e62565b1660608701525081356080860152606081013560a0860152608081013560c08601526124f060a0820182612ed0565b925060c060e08701526125086101008701848361237e565b9150506125186020850185612f15565b9150848103602086015261252c81836123d4565b95945050505050565b6000828483379101908152919050565b60008251612557818460208701612f4a565b9190910192915050565b60008451612573818460208901612f4a565b808301600560fb1b815285519150612592826001830160208901612f4a565b818101600b60fa1b6001820152855192506125b4836002830160208901612f4a565b9091016002019695505050505050565b60007352656c6179446174612072656c6179446174612960601b825282516125f3816014850160208701612f4a565b9190910160140192915050565b7f454950373132446f6d61696e28737472696e67206e616d652c737472696e672081527f76657273696f6e2c75696e7432353620636861696e49642c6164647265737320602082015271766572696679696e67436f6e74726163742960701b604082015260520190565b6001600160a01b0391909116815260200190565b6001600160a01b038681168252851660208201526001600160e01b0319841660408201526060810183905260a0608082018190526000906126c1908301846123a8565b979650505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b038681168252851660208201526001600160e01b03198416604082015260a0810161272184612f3f565b60608301528260808301529695505050505050565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b6040808252810183905260008460608301825b868110156127a2576020833561278781612f7a565b6001600160a01b031683529283019290910190600101612772565b5060209390930193909352509392505050565b901515815260200190565b60008315158252604060208301526127db60408301846123a8565b949350505050565b90815260200190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b9889526020890197909752604088019590955260608701939093526001600160a01b039182166080870152811660a08601521660c084015260e08301526101008201526101200190565b60006080825261287560808301876123a8565b851515602084015284604084015282810360608401526126c181856123d4565b60006128a084612f3f565b8252604060208301526127db60408301846123a8565b600060208252610d1260208301846123a8565b602080825260149082015273125b5c1bdcdcda589b194819d85cc81b1a5b5a5d60621b604082015260600190565b60208082526019908201527f7468697320776f726b6572206861732061206d616e6167657200000000000000604082015260600190565b60208082526027908201527f4f6e6c792052656c61794875622073686f756c642063616c6c207468697320666040820152663ab731ba34b7b760c91b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b602080825260119082015270496e76616c69642067617320707269636560781b604082015260600190565b6020808252818101527f756e6578706563746564206869676820616363657074616e6365427564676574604082015260600190565b60208082526032908201527f4e6f7420656e6f75676820676173206c65667420666f7220696e6e657252656c604082015271617943616c6c20746f20636f6d706c65746560701b606082015260800190565b6020808252600f908201526e6465706f73697420746f6f2062696760881b604082015260600190565b60208082526018908201527f72656c6179206d616e61676572206e6f74207374616b65640000000000000000604082015260600190565b60208082526027908201527f72656c617920776f726b65722063616e6e6f74206265206120736d61727420636040820152661bdb9d1c9858dd60ca1b606082015260800190565b60208082526010908201526f6e6f2072656c617920776f726b65727360801b604082015260600190565b6020808252600d908201526c2737ba103832b730b634bd32b960991b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526010908201526f746f6f206d616e7920776f726b65727360801b604082015260600190565b602080825260129082015271696e73756666696369656e742066756e647360701b604082015260600190565b6020808252601290820152712737ba1030903934b3b43a103bb7b935b2b960711b604082015260600190565b60208082526019908201527f5061796d61737465722062616c616e636520746f6f206c6f7700000000000000604082015260600190565b6020808252601a908201527f726561644279746573343a206461746120746f6f2073686f7274000000000000604082015260600190565b6020808252601490820152732ab735b737bbb7103932b630bc903bb7b935b2b960611b604082015260600190565b600060a08252612cc58851612f33565b60a083015260018060a01b0360208901511660c0830152604088015160e08301526060880151610100830152608088015161012083015260a088015160c0610140840152612d176101608401826123a8565b8860208501528760408501528381036060850152612d3581886123a8565b9150508281036080840152612d4b81858761237e565b9998505050505050505050565b6000610100808352612d6c8184018c612475565b8381036020850152612d7f818b8d61237e565b9150508281036040840152612d9581888a61237e565b865160608501526020870151608085015260409096015160a0840152505060c081019290925260e09091015295945050505050565b600060808252612ddd6080830189612475565b8281036020840152612df081888a61237e565b8381036040850152612e0381878961237e565b92505050826060830152979650505050505050565b60008582528460208301526060604083015261246b60608301848661237e565b6000808335601e19843603018112612e4e578283fd5b8084018035925067ffffffffffffffff831115612e69578384fd5b60200192505036819003821315611ead57600080fd5b6000823560be19833603018112612557578182fd5b6000823560fe19833603018112612557578182fd5b60405181810167ffffffffffffffff81118282101715612ec857600080fd5b604052919050565b6000808335601e19843603018112612ee6578283fd5b830160208101925035905067ffffffffffffffff811115612f0657600080fd5b803603831315611ead57600080fd5b6000823560fe19833603018112612f2a578182fd5b90910192915050565b6001600160a01b031690565b8060078110610bcd57fe5b60005b83811015612f65578181015183820152602001612f4d565b83811115612f74576000848401525b50505050565b6001600160a01b03811681146117db57600080fd5b80151581146117db57600080fdfe52656c6179446174612875696e743235362067617350726963652c75696e743235362070637452656c61794665652c75696e74323536206261736552656c61794665652c616464726573732072656c6179576f726b65722c61646472657373207061796d61737465722c6164647265737320666f727761726465722c6279746573207061796d6173746572446174612c75696e7432353620636c69656e74496429616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c62797465732064617461a26469706673582212203aed185c4945a69a47b1d120bd0f8314c05a4653672f2c271eae76e1d161c6fd64736f6c634300060a0033",
    "immutableReferences": {},
    "sourceMap": "705:65:5:-:0;635:15469;705:65;;635:15469;705:65;;;;;;;;;;-1:-1:-1;;705:65:5;;:::i;:::-;;1473:703;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1808:12;:28;;-1:-1:-1;;;;;1808:28:5;;;-1:-1:-1;;;;;;1808:28:5;;;;;;;1846:9;:22;;;;;;;;;;;;;;;1878:14;:32;;;;1920:10;:24;;;;1954:12;:28;-1:-1:-1;1992:26:5;-1:-1:-1;2028:50:5;-1:-1:-1;2088:42:5;;;;1808:28;2140:29;635:15469;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;635:15469:5;;;-1:-1:-1;635:15469:5;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;472:1401:-1:-;;;;;;;;;;745:3;733:9;724:7;720:23;716:33;713:2;;;-1:-1;;752:12;713:2;252:6;246:13;264:55;313:5;264:55;;;937:2;987:22;;83:13;804:96;;-1:-1;101:33;83:13;101:33;;;945:74;;;;1056:2;1110:9;1106:22;409:13;1064:74;;1175:2;1229:9;1225:22;409:13;1183:74;;1294:3;1349:9;1345:22;409:13;1303:74;;1414:3;1469:9;1465:22;409:13;1423:74;;1534:3;1589:9;1585:22;409:13;1543:74;;1654:3;1709:9;1705:22;409:13;1663:74;;1774:3;1829:9;1825:22;409:13;1783:74;;707:1166;;;;;;;;;;;;2305:117;-1:-1;;;;;2160:54;;2364:35;;2354:2;;2413:1;;2403:12;2354:2;2348:74;;;635:15469:5;;;;;;",
    "deployedSourceMap": "635:15469:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3778:332;;;;;;;;;;-1:-1:-1;3778:332:5;;;;;;;;:::i;:::-;;1360:55;;;;;;;;;;-1:-1:-1;1360:55:5;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;5860:4246;;;;;;;;;;-1:-1:-1;5860:4246:5;;;;;;;;:::i;:::-;;;;;;;;;15173:209;;;;;;;;;;-1:-1:-1;15173:209:5;;;;;;;;:::i;:::-;;;;;;;;868:47;;;;;;;;;;;;;:::i;3656:116::-;;;;;;;;;;-1:-1:-1;3656:116:5;;;;;;;;:::i;819:43::-;;;;;;;;;;;;;:::i;1088:42::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;2182:426;;;;;;;;;;-1:-1:-1;2182:426:5;;;;;;;;:::i;921:35::-;;;;;;;;;;;;;:::i;14797:370::-;;;;;;;;;;-1:-1:-1;14797:370:5;;;;;;;;:::i;3365:285::-;;;;;;;;;:::i;962:36::-;;;;;;;;;;;;;:::i;2614:745::-;;;;;;;;;;-1:-1:-1;2614:745:5;;;;;;;;:::i;1136:33::-;;;;;;;;;;;;;:::i;1236:59::-;;;;;;;;;;-1:-1:-1;1236:59:5;;;;;;;;:::i;705:65::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;1044:38;;;;;;;;;;;;;:::i;15497:605::-;;;;;;;;;;-1:-1:-1;15497:605:5;;;;;;;;:::i;777:36::-;;;;;;;;;;;;;:::i;1004:34::-;;;;;;;;;;;;;:::i;10375:3930::-;;;;;;;;;;-1:-1:-1;10375:3930:5;;;;;;;;:::i;:::-;;;;;;;;;3778:332;3886:10;3860:23;3914:17;;;:8;:17;;;;;;:27;-1:-1:-1;3914:27:5;3906:58;;;;-1:-1:-1;;;3906:58:5;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3995:17:5;;;;;;:8;:17;;;;;;:29;;4017:6;3995:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;3975:17:5;;;;;;;:8;:17;;;;;;:49;;;;4034:21;;:13;;;;:21;;;;;4048:6;;4034:21;3975:17;4034:21;4048:6;4034:13;:21;;;;;;;;;;;;;;;;;;;;;4090:4;-1:-1:-1;;;;;4071:32:5;4081:7;-1:-1:-1;;;;;4071:32:5;;4096:6;4071:32;;;;;;;;;;;;;;;3778:332;;;:::o;1360:55::-;;;;;;;;;;;;;:::o;5860:4246::-;6122:22;6146:24;6207:25;;:::i;:::-;6266:52;6289:20;:12;;:20;;;:25;;;;;;;;;6266:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6266:52:5;-1:-1:-1;6266:22:5;;-1:-1:-1;;6266:52:5:i;:::-;-1:-1:-1;;;;;;6242:76:5;:21;;;:76;6336:10;6350:9;6336:23;6328:75;;;;-1:-1:-1;;;6328:75:5;;;;;;;;;6437:10;6460:1;6421:27;;;:15;:27;;;;;;-1:-1:-1;;;;;6421:27:5;6413:74;;;;-1:-1:-1;;;6413:74:5;;;;;;;;;6543:10;6505:22;;;;:12;:22;;;:34;;;;;;;;;;;-1:-1:-1;;;;;6505:48:5;;6497:79;;;;-1:-1:-1;;;6497:79:5;;;;;;;;;6644:10;6628:27;;;;:15;:27;;;;;;6607:49;;-1:-1:-1;;;;;6628:27:5;6607:20;:49::i;:::-;6586:120;;;;-1:-1:-1;;;6586:120:5;;;;;;;;;6759:11;6724:22;;;;:12;:22;;;:31;:46;;6716:76;;;;-1:-1:-1;;;6716:76:5;;;;;;;;;6830:14;6810:16;:34;;6802:67;;;;-1:-1:-1;;;6802:67:5;;;;;;;;;6933:77;6949:28;6979:12;6993:16;6933:15;:77::i;:::-;6897:19;;;6880:130;6881:14;;;6880:130;7238:10;;-1:-1:-1;;7235:2:5;7222:9;7232:2;7222:12;:15;;;;;;:26;7198:50;;7280:9;7258:4;:19;;:31;;;;;7300:22;7374:12;;7360:11;;7341:16;7325:13;:32;:46;:61;7300:86;;7655:12;7669:28;7709:4;-1:-1:-1;;;;;7701:18:5;7724:13;7775:32;;;7809:12;7823:9;;7834:12;;7848:4;:14;;;7897:9;7880:14;:26;7924:4;:19;;;7752:209;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7752:209:5;;;;;;;;;;;;;;-1:-1:-1;;;;;7752:209:5;-1:-1:-1;;;;;;7752:209:5;;;;;;;;;;7701:270;;;;7752:209;7701:270;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7981:22:5;;;;;7654:317;;-1:-1:-1;7654:317:5;-1:-1:-1;8053:9:5;8033:19;;;;:29;8013:17;;;:49;8117:53;;;;;;;;;;;;;;;;8073:4;:11;;8086:4;:27;;8072:98;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8185:27:5;;;;:34;:36;8180:133;;8243:59;8261:4;:11;;;8274:4;:27;;;8243:59;;;;;;;;;;;;;;;;8180:133;5860:4246;;;;8339:4;:12;;;8334:987;;8446:14;;;;:31;8426:17;;;;:51;8425:354;;;;-1:-1:-1;8520:36:5;8505:4;:11;;;:51;;;;;;;;;:125;;;-1:-1:-1;8595:35:5;8580:4;:11;;;:50;;;;;;;;;8505:125;:205;;;-1:-1:-1;8669:41:5;8654:4;:11;;;:56;;;;;;;;;8505:205;8420:891;;;8817:5;;-1:-1:-1;9001:20:5;:12;;:20;;;:25;;;;;;;;;-1:-1:-1;;;;;8846:389:5;8947:22;;;;:12;:22;;;:32;;;;;;;;;;;8914:10;8898:27;;;;:15;:27;;;;;;-1:-1:-1;;;;;8846:389:5;;;;8898:27;8846:389;9048:20;:12;;:20;;;:23;;;;;;;;;;;9093:10;9125:4;:21;;;9168:4;:17;;;9207:4;:27;;;8846:389;;;;;;;;;;;;;;;;;;;9268:27;;;9261:5;;-1:-1:-1;9268:27:5;-1:-1:-1;9253:43:5;;8420:891;9418:15;9469:11;;9456:9;9437:28;;9436:44;;-1:-1:-1;9490:14:5;9507:48;9436:44;9532:22;;;;:12;:22;;9507:48;9490:65;;9611:54;9658:6;9611:8;:42;9620:12;:22;;;;;;;;;;:32;;;;;;;;;;;-1:-1:-1;;;;;9611:42:5;;;;;;;;;;;;-1:-1:-1;9611:42:5;;;:54;:46;:54;:::i;:::-;9566:8;:42;9575:22;;;;:12;:22;;;:32;;;;;;;;;;;-1:-1:-1;;;;;9566:42:5;;;;;;;;;;;;;;;;;-1:-1:-1;9566:42:5;;;:99;;;;9740:10;9724:27;;:15;:27;;;;;;;9715:37;;:8;:37;;;;;;:49;;9757:6;9715:49;:41;:49;:::i;:::-;9700:10;9675:37;9684:27;;;:15;:27;;;;;;;;;-1:-1:-1;;;;;9684:27:5;9675:37;;:8;:37;;;;;:89;9877:20;:12;;:20;;;:25;;;;;;;;;9853:10;9812:27;;;;:15;:27;;;;;;-1:-1:-1;;;;;9780:286:5;;;;9812:27;9780:286;9916:20;:12;;:20;;;:23;;;;;;;;;;;9953:12;:22;;;;;;;;;;:32;;;;;;;;;;;9999:4;:21;;;10034:4;:11;;;10059:6;9780:286;;;;;;;;;;;;;;;;;;;10084:4;10076:17;;;;;;;;;;;;;;;;;;;5860:4246;;;;;;;;;;;:::o;15173:209::-;15278:12;;;15341;15355:19;;15278:97;;-1:-1:-1;;;15278:97:5;;15255:4;;-1:-1:-1;;;;;15278:12:5;;:33;;:97;;15312:12;;15334:4;;15341:12;;15278:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15271:104;;15173:209;;;;:::o;868:47::-;;;;:::o;3656:116::-;-1:-1:-1;;;;;3749:16:5;3723:7;3749:16;;;:8;:16;;;;;;;3656:116::o;819:43::-;;;;:::o;1088:42::-;;;-1:-1:-1;;;;;1088:42:5;;:::o;2182:426::-;2326:10;2367:34;2326:10;2367:20;:34::i;:::-;2346:105;;;;-1:-1:-1;;;2346:105:5;;;;;;;;;-1:-1:-1;;;;;2469:25:5;;2497:1;2469:25;;;:11;:25;;;;;;2461:58;;;;-1:-1:-1;;;2461:58:5;;;;;;;;;2556:12;-1:-1:-1;;;;;2534:67:5;;2570:12;2584:11;2597:3;;2534:67;;;;;;;;;;;;;;;;;;2182:426;;;;;:::o;921:35::-;;;;:::o;14797:370::-;14916:7;15054:106;15081:78;15155:3;15082:67;15118:30;:21;;;;15155:3;15118:30;:25;:30;:::i;:::-;15082:31;:7;15094:18;;15082:31;:11;:31;:::i;:::-;:35;:67;:35;:67;:::i;:::-;15081:73;:78;:73;:78;:::i;:::-;15054:22;;;;;:106;:26;:106;:::i;:::-;15047:113;;14797:370;;;;;:::o;3365:285::-;3489:23;;3452:9;;3479:33;;;3471:61;;;;-1:-1:-1;;;3471:61:5;;;;;;;;;-1:-1:-1;;;;;3562:16:5;;;;;;:8;:16;;;;;;:28;;3583:6;3562:28;:20;:28;:::i;:::-;-1:-1:-1;;;;;3543:16:5;;;;;;:8;:16;;;;;;;:47;;;;3606:37;;3624:10;;3543:16;3606:37;;;;3636:6;;3606:37;;;;;;;;;;3365:285;;:::o;962:36::-;;;;:::o;2614:745::-;2726:10;2703:20;2774:25;;;:11;:25;;;;;;;:50;;2746:78;;;;2871:14;;-1:-1:-1;2842:43:5;2834:72;;;;-1:-1:-1;;;2834:72:5;;;;;;;;;2938:34;2959:12;2938:20;:34::i;:::-;2917:105;;;;-1:-1:-1;;;2917:105:5;;;;;;;;;3038:9;3033:229;3053:26;;;3033:229;;;3155:1;3108:15;3155:1;3124:15;;3140:1;3124:18;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3108:35:5;;;;;;;;;;;;;;-1:-1:-1;3108:35:5;;;:49;3100:87;;;;-1:-1:-1;;;3100:87:5;;;;;;;;;3239:12;3201:15;:35;3217:15;;3233:1;3217:18;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3201:35:5;;;;;;;;;;;;;;-1:-1:-1;3201:35:5;:50;;-1:-1:-1;;;;;;3201:50:5;;;;;;;;;;;-1:-1:-1;3081:3:5;3033:229;;;-1:-1:-1;;;;;;3277:75:5;;3326:25;;;;:11;:25;;;;;;;;3277:75;;;;;;3309:15;;;;3277:75;;;;;;;;;;2614:745;;;:::o;1136:33::-;;;-1:-1:-1;;;;;1136:33:5;;:::o;1236:59::-;;;;;;;;;;;;-1:-1:-1;;;;;1236:59:5;;:::o;705:65::-;;;;;;;;;;;;;;;-1:-1:-1;;705:65:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1044:38::-;;;;:::o;15497:605::-;15446:9;;-1:-1:-1;;;;;15446:9:5;15432:10;:23;15424:49;;;;-1:-1:-1;;;15424:49:5;;;;;;;;;-1:-1:-1;;;;;15630:28:5;;::::1;15607:20;15630:28:::0;;;:15:::1;:28;::::0;;;;;::::1;15750:26:::0;15742:59:::1;;;;-1:-1:-1::0;;;15742:59:5::1;;;;;;;;;15832:34;15853:12;15832:20;:34::i;:::-;15811:105;;;;-1:-1:-1::0;;;15811:105:5::1;;;;;;;;;15926:40;;:::i;:::-;15969:12;::::0;:39:::1;::::0;-1:-1:-1;;;15969:39:5;;-1:-1:-1;;;;;15969:12:5;;::::1;::::0;:25:::1;::::0;:39:::1;::::0;15995:12;;15969:39:::1;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16018:12;::::0;16079:15;;16018:77:::1;::::0;-1:-1:-1;;;16018:77:5;;15926:82;;-1:-1:-1;;;;;;16018:12:5;;::::1;::::0;:33:::1;::::0;:77:::1;::::0;16052:12;;16066:11;;16018:77:::1;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15483:1;;15497:605:::0;;:::o;777:36::-;;;;:::o;1004:34::-;;;;:::o;10375:3930::-;10669:15;10686:12;10714:30;;:::i;:::-;11172:10;11194:4;11172:27;11164:79;;;;-1:-1:-1;;;11164:79:5;;;;;;;;;11663:8;:42;11672:22;;;;:12;:22;;;:32;;;;;;;;;;;-1:-1:-1;;;;;11663:42:5;;;;;;;;;;;;;;-1:-1:-1;11663:42:5;;11642:63;;11847:151;-1:-1:-1;;;11883:34:5;11847:151;;11935:12;;11949:9;;;;11960:12;;;;11974:14;;11847:151;;;;;;;;-1:-1:-1;;11847:151:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;11847:151:5;-1:-1:-1;;;;;;11847:151:5;;;;;;;;;;11835:9;;;:163;-1:-1:-1;;12048:20:5;;12103:22;;;;:12;:22;;;:32;;;;;;;;;;;-1:-1:-1;;;;;12103:37:5;12145:9;:32;;;12179:4;:9;;;12103:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12082:107:5;;-1:-1:-1;12082:107:5;-1:-1:-1;12082:107:5;12203:169;;12235:41;12268:7;12235:32;:41::i;:::-;12294:63;12311:36;12349:7;12294:16;:63::i;:::-;12452:7;12441:33;;;;;;;;;;;;;;12385:89;;12409:28;;;12385:89;12386:21;;;12385:89;-1:-1:-1;;;;12740:49:5;12765:12;12779:9;;12740:24;:49::i;:::-;12709:27;;;12665:124;;;12684:23;;;12665:124;;-1:-1:-1;12665:124:5;12803:140;;12846:82;12863:35;12900:4;:27;;;12846:16;:82::i;:::-;12961:4;:28;;;:56;;;;;12994:4;:23;;;12993:24;12961:56;12957:246;;;13100:88;13117:41;13160:4;:27;;;13100:16;:88::i;:::-;10375:3930;13523:35;;;13572:4;:21;;;13607:4;:23;;;13662:9;13644:15;:27;13707:12;:22;;;;;;;;;;13487:252;;;;;;;;;;;;;;;;-1:-1:-1;;13487:252:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;13487:252:5;-1:-1:-1;;;;;;13487:252:5;;;;;;;;;;13475:9;;;:264;-1:-1:-1;;13778:16:5;;13798:22;;;;:12;:22;;;:32;;;;;;;;;;;-1:-1:-1;;;;;13798:37:5;13840:9;:33;;;13875:4;:9;;;13798:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13760:125;;;;13901:11;13896:99;;13928:56;13945:33;13980:3;13928:16;:56::i;:::-;-1:-1:-1;;14064:18:5;;14019:8;14064:18;14028:22;;;;:12;:22;;;:32;;;;;;;;;;;-1:-1:-1;;;;;14019:42:5;-1:-1:-1;;;;;14019:42:5;;;;;;;;;;;;;:63;14015:155;;;14098:61;14115:39;14098:61;;;;;;;;;;;;:16;:61::i;:::-;14188:4;:23;;;:80;;14235:33;14188:80;;;14214:18;14188:80;14270:4;:27;;;14180:118;;;;;10375:3930;;;;;;;;;;;:::o;1321:134:37:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;2482:571:31:-;2602:13;2651:5;2659:1;2651:9;2639:1;:8;:21;;2631:60;;;;-1:-1:-1;;;2631:60:31;;;;;;;;;-1:-1:-1;2786:21:31;2803:2;2786:21;2780:28;-1:-1:-1;;;;;;2935:79:31;;2482:571::o;4116:1390:5:-;4308:37;;:::i;:::-;4347:22;4416;;;;:12;:22;;;:32;;;;;;;;;;;-1:-1:-1;;;;;4405:57:5;;4467:5;4405:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4526:26;;4381:94;;-1:-1:-1;4494:58:5;;;4486:103;;;;-1:-1:-1;;;4486:103:5;;;;;;;;;4629:157;4761:20;:12;;:20;;;:24;;;4629:114;4709:9;:33;;;4629:62;4658:9;:32;;;4629:11;;:15;;:62;;;;:::i;:::-;:66;:114;:66;:114;:::i;:157::-;4600:186;;5003:14;4989:10;:28;;4968:116;;;;-1:-1:-1;;;4968:116:5;;;;;;;;;5095:25;5123:89;5152:14;5180:22;;;;:12;:22;;5123:89;5095:117;-1:-1:-1;5415:8:5;:42;5424:22;;;;:12;:22;;;:32;;;;;;;;;;;-1:-1:-1;;;;;5415:42:5;-1:-1:-1;;;;;5415:42:5;;;;;;;;;;;;;5394:17;:63;;5386:113;;;;-1:-1:-1;;;5386:113:5;;;;;;;;;4116:1390;;;;;;;:::o;874:176:37:-;932:7;963:5;;;986:6;;;;978:46;;;;-1:-1:-1;;;978:46:37;;;;;;;;2180:459;2238:7;2479:6;2475:45;;-1:-1:-1;2508:1:37;2501:8;;2475:45;2542:5;;;2546:1;2542;:5;:1;2565:5;;;;;:10;2557:56;;;;-1:-1:-1;;;2557:56:37;;;;;;;;3101:130;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;4697:125:29:-;4765:50;4793:4;495;4765:27;:50::i;:::-;4697:125;:::o;14452:339:5:-;14543:17;14574:6;14582:3;14563:23;;;;;;;;;;;;;;;;;;;;;;;14543:43;;14596:38;14629:4;14596:32;:38::i;:::-;14690:4;14684:11;14733:2;14727:4;14723:13;14766:8;14757:7;14750:25;3617:854:29;3723:21;3746:16;3764;3793:47;;:::i;:::-;3842:23;3869:26;3882:12;3869;:26::i;:::-;3792:103;;-1:-1:-1;3792:103:29;-1:-1:-1;3905:23:29;3931:49;3947:22;;;;:12;:22;;;:32;;;;;;;;;;;3931:15;:49::i;:::-;3905:75;-1:-1:-1;4078:22:29;;;;:12;:22;;;:32;;;;;;;;;;;-1:-1:-1;;;;;4078:37:29;4152:27;;;4193:14;4209:15;1177:18;;;;;;;;;;;;;-1:-1:-1;;;1177:18:29;;;1200:14;;;;;;;;;;;;;;;;;1085;;;;;;;;;;;;;;;;;1044:56;;;;;;;;;;;;;-1:-1:-1;;1044:56:29;;;;;;;;;;1151:90;;;;1044:56;1151:90;;;;;;;;;;;;;;;;1373:29;;;;;;4250:10;4262:9;;4129:152;;;;;;;;;;;;;;;;;;-1:-1:-1;;4129:152:29;;;;;;;;;;;;;;-1:-1:-1;;;;;4129:152:29;-1:-1:-1;;;;;;4129:152:29;;;;;;;;;;4078:204;;;;4129:152;4078:204;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4052:230:29;;-1:-1:-1;4052:230:29;-1:-1:-1;4292:143:29;;;;4405:3;4394:30;;;;;;;;;;;;;;4373:51;;-1:-1:-1;4373:51:29;-1:-1:-1;4292:143:29;4444:20;4460:3;4444:15;:20::i;:::-;3617:854;;;;;;;;;;:::o;1746:187:37:-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:37;;;;;;;;;;-1:-1:-1;;;1902:5:37;;;1746:187::o;3713:272::-;3799:7;3833:12;3826:5;3818:28;;;;-1:-1:-1;;;3818:28:37;;;;;;;;;;;3856:9;3872:1;3868;:5;;;;;;;3713:272;-1:-1:-1;;;;;3713:272:37:o;428:173:31:-;530:6;516:4;:11;:20;512:83;;;576:6;570:4;563:20;561:24;428:173;;:::o;1712:527:29:-;1828:47;;:::i;:::-;1942:214;;;;;;;;;1885:23;;1942:214;1981:11;:3;;:11;;;:16;;;;;;;;;-1:-1:-1;;;;;1942:214:29;;;;;2011:11;:3;;:11;;;:14;;;;;;;;;;;-1:-1:-1;;;;;1942:214:29;;;;;2039:11;:3;;:11;;;:17;;;1942:214;;;;2070:11;:3;;:11;;;:15;;;1942:214;;;;2099:11;:3;;:11;;;:17;;;1942:214;;;;2130:11;:3;;:11;;;:16;;;;;;;;;1942:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1942:214:29;;-1:-1:-1;1925:231:29;-1:-1:-1;2203:28:29;2217:13;;;;:3;:13;;;2203;:28::i;:::-;2179:53;;;;;;;;;;;;;;;;;;;;;;2166:66;;1712:527;;;:::o;4828:292::-;4932:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4932:180:29;;;;;;;;;;;4895:7;;4921:192;;4932:180;-1:-1:-1;;5042:12:29;:10;:12::i;:::-;4932:180;;;;5088:9;-1:-1:-1;;;;;4932:180:29;;;;4921:10;:192::i;5629:451::-;5708:7;1303:14;;;;;;;;;;;;;;;;;1293:25;;;;;;;;5808:12;;;5838:15;;;5871:16;;;;5905:15;;;;;;;;;;5938:13;;;;;;;;;;5969;;;;;;;;;;6010:17;;;;:3;:17;;;6000:28;;;;;;;;;;;;;;;;;5744:328;;;;;;;;;6046:12;;;;;5744:328;;;;;;;;;;;;;;;;;5734:339;;;;;;5727:346;;5629:451;;;:::o;5126:170::-;5271:9;;5251:39::o;5302:321::-;5370:7;1596:109;;;;;;;;;;;;;;5489:3;:8;;;5473:26;;;;;;5533:3;:11;;;5517:29;;;;;;5564:3;:11;;;5593:3;:21;;;5406:209;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;72:20;;97:33;72:20;97:33;;979:336;;;1093:3;1086:4;1078:6;1074:17;1070:27;1060:2;;-1:-1;;1101:12;1060:2;-1:-1;1131:20;;1171:18;1160:30;;1157:2;;;-1:-1;;1193:12;1157:2;1237:4;1229:6;1225:17;1213:29;;1288:3;1237:4;1268:17;1229:6;1254:32;;1251:41;1248:2;;;1305:1;;1295:12;1248:2;1053:262;;;;;;1324:442;;1436:3;1429:4;1421:6;1417:17;1413:27;1403:2;;-1:-1;;1444:12;1403:2;1484:6;1478:13;58048:18;58040:6;58037:30;58034:2;;;-1:-1;;58070:12;58034:2;1506:64;58143:9;58124:17;;-1:-1;;58120:33;58211:4;58201:15;1506:64;;;1497:73;;1590:6;1583:5;1576:21;1694:3;58211:4;1685:6;1618;1676:16;;1673:25;1670:2;;;1711:1;;1701:12;1670:2;1721:39;1753:6;58211:4;1652:5;1648:16;58211:4;1618:6;1614:17;1721:39;;;;1396:370;;;;;3504:163;;3620:2;3611:6;3606:3;3602:16;3598:25;3595:2;;;-1:-1;;3626:12;3595:2;-1:-1;3646:15;3588:79;-1:-1;3588:79;4835:241;;4939:2;4927:9;4918:7;4914:23;4910:32;4907:2;;;-1:-1;;4945:12;4907:2;85:6;72:20;97:33;124:5;97:33;;5083:382;;;5212:2;5200:9;5191:7;5187:23;5183:32;5180:2;;;-1:-1;;5218:12;5180:2;85:6;72:20;97:33;124:5;97:33;;;5270:63;-1:-1;5370:2;5417:22;;217:20;242:41;217:20;242:41;;;5378:71;;;;5174:291;;;;;;5472:397;;;5611:2;5599:9;5590:7;5586:23;5582:32;5579:2;;;-1:-1;;5617:12;5579:2;5675:17;5662:31;5713:18;;5705:6;5702:30;5699:2;;;-1:-1;;5735:12;5699:2;5836:6;5825:9;5821:22;600:3;593:4;585:6;581:17;577:27;567:2;;-1:-1;;608:12;567:2;651:6;638:20;628:30;;5713:18;670:6;667:30;664:2;;;-1:-1;;700:12;664:2;795:3;5611:2;;779:6;775:17;736:6;761:32;;758:41;755:2;;;-1:-1;;802:12;755:2;5611;732:17;;5763:90;;-1:-1;5573:296;;-1:-1;;;;5573:296;5876:257;;5988:2;5976:9;5967:7;5963:23;5959:32;5956:2;;;-1:-1;;5994:12;5956:2;911:6;905:13;923:30;947:5;923:30;;6140:490;;;6278:2;6266:9;6257:7;6253:23;6249:32;6246:2;;;-1:-1;;6284:12;6246:2;911:6;905:13;923:30;947:5;923:30;;;6465:2;6450:18;;6444:25;6336:71;;-1:-1;6489:18;6478:30;;6475:2;;;-1:-1;;6511:12;6475:2;6541:73;6606:7;6597:6;6586:9;6582:22;6541:73;;;6531:83;;;6240:390;;;;;;6637:490;;;6775:2;6763:9;6754:7;6750:23;6746:32;6743:2;;;-1:-1;;6781:12;6743:2;6832:17;6826:24;6870:18;6862:6;6859:30;6856:2;;;-1:-1;;6892:12;6856:2;6922:73;6987:7;6978:6;6967:9;6963:22;6922:73;;;6912:83;;;7032:2;7083:9;7079:22;905:13;923:30;947:5;923:30;;7134:536;;;7295:2;7283:9;7274:7;7270:23;7266:32;7263:2;;;-1:-1;;7301:12;7263:2;1878:6;1872:13;63983:1;63976:5;63973:12;63963:2;;-1:-1;;63989:12;7677:317;;7819:2;7807:9;7798:7;7794:23;7790:32;7787:2;;;-1:-1;;7825:12;7787:2;2715:20;7819:2;2715:20;;;2861:22;4772:13;2811:16;2804:86;2969:2;3038:9;3034:22;4772:13;2969:2;2988:5;2984:16;2977:86;3143:2;3212:9;3208:22;4772:13;3143:2;3162:5;3158:16;3151:86;7877:101;;;;7781:213;;;;;8001:1325;;;;;;;;;8277:9;8268:7;8264:23;8289:3;8264:23;8260:33;8257:2;;;-1:-1;;8296:12;8257:2;8354:17;8341:31;8392:18;;8384:6;8381:30;8378:2;;;-1:-1;;8414:12;8378:2;8444:85;8521:7;8512:6;8501:9;8497:22;8444:85;;;8434:95;;8594:2;8583:9;8579:18;8566:32;8552:46;;8392:18;8610:6;8607:30;8604:2;;;-1:-1;;8640:12;8604:2;8678:64;8734:7;8725:6;8714:9;8710:22;8678:64;;;8668:74;;-1:-1;8668:74;-1:-1;8807:2;8792:18;;8779:32;;-1:-1;8820:30;;;8817:2;;;-1:-1;;8853:12;8817:2;;8891:64;8947:7;8938:6;8927:9;8923:22;8891:64;;;8881:74;;-1:-1;8881:74;-1:-1;;8992:2;-1:-1;;2446:16;;2442:25;2439:2;;;-1:-1;;2470:12;2439:2;-1:-1;8251:1075;;;;-1:-1;8251:1075;;;;-1:-1;8251:1075;;8992:2;9060:22;;;-1:-1;9129:3;9169:22;;4624:20;;9238:3;9278:22;4624:20;;-1:-1;8251:1075;9333:318;;9475:3;9463:9;9454:7;9450:23;9446:33;9443:2;;;-1:-1;;9482:12;9443:2;3874:20;9475:3;3874:20;;;4778:6;4772:13;3959:16;3952:86;4107:2;4176:9;4172:22;4772:13;4107:2;4126:5;4122:16;4115:86;4271:2;4340:9;4336:22;4772:13;4271:2;4290:5;4286:16;4279:86;4427:2;4504:9;4500:22;381:13;399:41;434:5;399:41;;;4427:2;4442:16;;4435:94;4446:5;9437:214;-1:-1;;;9437:214;9658:382;;;9787:2;9775:9;9766:7;9762:23;9758:32;9755:2;;;-1:-1;;9793:12;9755:2;4637:6;4624:20;9845:63;;9945:2;9996:9;9992:22;217:20;242:41;277:5;242:41;;10047:510;;;10197:2;10185:9;10176:7;10172:23;10168:32;10165:2;;;-1:-1;;10203:12;10165:2;4637:6;4624:20;10255:63;;10383:2;10372:9;10368:18;10355:32;10407:18;10399:6;10396:30;10393:2;;;-1:-1;;10429:12;10393:2;10524:6;10513:9;10509:22;3412:3;3403:6;3398:3;3394:16;3390:26;3387:2;;;-1:-1;;3419:12;3387:2;10449:92;;;;;10159:398;;;;;;10564:1141;;;;;;;;10806:3;10794:9;10785:7;10781:23;10777:33;10774:2;;;-1:-1;;10813:12;10774:2;4637:6;4624:20;10865:63;;10993:2;10982:9;10978:18;10965:32;11017:18;;11009:6;11006:30;11003:2;;;-1:-1;;11039:12;11003:2;11069:85;11146:7;11137:6;11126:9;11122:22;11069:85;;;11059:95;;11219:2;11208:9;11204:18;11191:32;11177:46;;11017:18;11235:6;11232:30;11229:2;;;-1:-1;;11265:12;11229:2;11303:64;11359:7;11350:6;11339:9;11335:22;11303:64;;;11293:74;;-1:-1;11293:74;-1:-1;11432:2;11417:18;;11404:32;;-1:-1;11445:30;;;11442:2;;;-1:-1;;11478:12;11442:2;;11516:64;11572:7;11563:6;11552:9;11548:22;11516:64;;;10768:937;;;;-1:-1;10768:937;;;;;;11617:3;11657:22;;;4624:20;;10768:937;-1:-1;;;;10768:937;11712:617;;;;;11870:2;11858:9;11849:7;11845:23;11841:32;11838:2;;;-1:-1;;11876:12;11838:2;4637:6;4624:20;11928:63;;12028:2;12071:9;12067:22;4624:20;12036:63;;12164:2;12153:9;12149:18;12136:32;12188:18;12180:6;12177:30;12174:2;;;-1:-1;;12210:12;12174:2;12248:65;12305:7;12296:6;12285:9;12281:22;12248:65;;;11832:497;;;;-1:-1;12238:75;-1:-1;;;;11832:497;12667:137;-1:-1;;;;;61872:54;12754:45;;12748:56;14116:277;;58863:6;58858:3;58851:19;62940:6;62935:3;58900:4;58895:3;58891:14;62917:30;-1:-1;58900:4;62987:6;58895:3;62978:16;;62971:27;58900:4;58143:9;;63377:2;14379:6;63357:14;63353:28;58895:3;14348:39;;14341:46;;14206:187;;;;;;15070:323;;15202:5;58445:12;58863:6;58858:3;58851:19;15285:52;15330:6;58900:4;58895:3;58891:14;58900:4;15311:5;15307:16;15285:52;;;58143:9;63357:14;-1:-1;;63353:28;15349:39;;;;58900:4;15349:39;;15150:243;-1:-1;;15150:243;29130:1797;;29277:6;4637;4624:20;13934:3;13927:37;61113:2;29382:16;61104:12;4624:20;61113:2;29645:3;29641:14;13927:37;29770:4;29763:5;29759:16;4624:20;29770:4;29834:3;29830:14;13927:37;29958:4;29951:5;29947:16;72:20;97:33;124:5;97:33;;;-1:-1;;;;;61872:54;;;29958:4;30018:14;;12754:45;30144:4;30133:16;;72:20;;97:33;72:20;97:33;;;61872:54;30144:4;30204:14;;12754:45;30304:61;30359:4;30348:16;;30352:5;30304:61;;;29277:6;30359:4;30389:3;30385:14;30378:38;30431:87;29277:6;29272:3;29268:16;30499:12;30485;30431:87;;;30634:4;30627:5;30623:16;4624:20;30634:4;30698:3;30694:14;13927:37;30820:4;30813:5;30809:16;72:20;63:29;;97:33;124:5;97:33;;;30832:63;30820:4;30884:3;30880:14;30866:12;30832:63;;;30911:11;29250:1677;-1:-1;;;;;;29250:1677;32876:866;;60508:3;60495:17;60552:48;;60576:8;60560:14;60556:29;60552:48;60532:18;60528:73;60518:2;;-1:-1;;60605:12;60518:2;33039:4;33205:38;;60634:33;;72:20;;;97:33;72:20;97:33;;;-1:-1;;;;;61872:54;;;33039:4;33030:14;;;12754:45;;;;59831:12;;;61883:42;59805:39;59831:12;59840:2;59831:12;;59805:39;;;61872:54;26140:14;33034:3;26140:14;12754:45;;61099:3;4624:20;26322:14;33034:3;26322:14;13927:37;26140:14;26255:5;61104:12;4624:20;26502:14;33034:3;26502:14;13927:37;26322:14;26435:5;61104:12;4624:20;25791:4;33034:3;26684:14;13927:37;26775:61;26502:14;26823:5;26819:16;26812:5;26775:61;;;26741:95;;25791:4;26856:14;33034:3;26856:14;26849:38;26902:87;25782:14;33034:3;25782:14;26970:12;26956;26902:87;;;27011:11;;;33450:79;59840:2;33516:5;33512:16;33505:5;33450:79;;;33430:99;;33575:3;33569:4;33565:14;59840:2;33553:3;33549:14;33542:38;33595:109;33699:4;33685:12;33595:109;;;33726:11;33012:730;-1:-1;;;;;33012:730;33979:291;;62940:6;62935:3;62930;62917:30;62978:16;;62971:27;;;62978:16;34123:147;-1:-1;34123:147;34277:271;;15910:5;58445:12;16021:52;16066:6;16061:3;16054:4;16047:5;16043:16;16021:52;;;16085:16;;;;;34411:137;-1:-1;;34411:137;34555:1131;;15910:5;58445:12;16021:52;16066:6;16061:3;16054:4;16047:5;16043:16;16021:52;;;16094:6;16089:3;16085:16;-1:-1;;;20215:11;20208:24;15910:5;58445:12;15864:52;;16021;16066:6;20193:1;20255:3;20251:11;16054:4;16047:5;16043:16;16021:52;;;16094:6;20255:3;16085:16;-1:-1;;;20193:1;16085:16;;19173:24;15910:5;58445:12;15864:52;;16021;16066:6;19216:11;16085:16;19216:11;16054:4;16047:5;16043:16;16021:52;;;16085:16;;;19216:11;16085:16;;34989:697;-1:-1;;;;;;34989:697;35693:538;;-1:-1;;;19525:11;19518:43;15910:5;58445:12;16021:52;16066:6;19502:2;19584:3;19580:12;16054:4;16047:5;16043:16;16021:52;;;16085:16;;;;19502:2;16085:16;;35928:303;-1:-1;;35928:303;36238:381;22999:34;22979:55;;23068:34;23063:2;23054:12;;23047:56;-1:-1;;;23132:2;23123:12;;23116:42;22963:2;23177:12;;36427:192;36626:222;-1:-1;;;;;61872:54;;;;12754:45;;36753:2;36738:18;;36724:124;36855:764;-1:-1;;;;;61872:54;;;12754:45;;61872:54;;37291:2;37276:18;;12597:58;-1:-1;;;;;;61567:78;;37372:2;37357:18;;14045:36;37455:2;37440:18;;13927:37;;;61883:42;37492:3;37477:19;;37470:49;;;36855:764;;37533:76;;37103:19;;37595:6;37533:76;;;37525:84;37089:530;-1:-1;;;;;;;37089:530;37626:476;-1:-1;;;;;61872:54;;;12754:45;;61872:54;;;;38005:2;37990:18;;12754:45;38088:2;38073:18;;13927:37;;;;37825:2;37810:18;;37796:306;38109:700;-1:-1;;;;;61872:54;;;12754:45;;61872:54;;38529:2;38514:18;;12754:45;-1:-1;;;;;;61567:78;;38610:2;38595:18;;14045:36;38364:3;38349:19;;62559:44;16440:5;62559:44;;;38711:2;38700:9;38696:18;16379:68;13957:5;38794:3;38783:9;38779:19;13927:37;38335:474;;;;;;;;;38816:556;-1:-1;;;;;61872:54;;;12754:45;;61872:54;;;;39192:2;39177:18;;12754:45;39275:2;39260:18;;13927:37;39358:2;39343:18;;13927:37;;;;39027:3;39012:19;;38998:374;39379:501;39594:2;39608:47;;;39579:18;;58851:19;;;39379:501;13397:21;58891:14;;;39379:501;13424:291;13449:6;13446:1;13443:13;13424:291;;;58900:4;85:6;72:20;97:33;124:5;97:33;;;-1:-1;;;;;61872:54;12754:45;;59831:12;;;;12490:14;;;;1171:18;13464:9;13424:291;;;-1:-1;58900:4;39851:18;;;;13927:37;;;;-1:-1;39661:126;39565:315;-1:-1;;;39565:315;39887:210;61401:13;;61394:21;13810:34;;40008:2;39993:18;;39979:118;40104:405;;13837:5;61401:13;61394:21;13817:3;13810:34;40271:2;40383;40372:9;40368:18;40361:48;40423:76;40271:2;40260:9;40256:18;40485:6;40423:76;;;40415:84;40242:267;-1:-1;;;;40242:267;40516:222;13927:37;;;40643:2;40628:18;;40614:124;40745:668;13927:37;;;41149:2;41134:18;;13927:37;;;;41232:2;41217:18;;13927:37;;;;41315:2;41300:18;;13927:37;-1:-1;;;;;61872:54;41398:3;41383:19;;12754:45;40984:3;40969:19;;40955:458;41420:1116;13927:37;;;41936:2;41921:18;;13927:37;;;;42019:2;42004:18;;13927:37;;;;42102:2;42087:18;;13927:37;;;;-1:-1;;;;;61872:54;;;42185:3;42170:19;;12754:45;61872:54;;61883:42;42254:19;;12754:45;61872:54;42353:3;42338:19;;12754:45;42437:3;42422:19;;13927:37;42521:3;42506:19;;13927:37;41771:3;41756:19;;41742:794;42543:788;;42822:3;42844:17;42837:47;42898:76;42822:3;42811:9;42807:19;42960:6;42898:76;;;13837:5;61401:13;61394:21;43047:2;43036:9;43032:18;13810:34;13957:5;43130:2;43119:9;43115:18;13927:37;43182:9;43176:4;43172:20;43167:2;43156:9;43152:18;43145:48;43207:114;43316:4;43307:6;43207:114;;43611:453;;62559:44;16440:5;62559:44;;;16386:3;16379:68;43802:2;43938;43927:9;43923:18;43916:48;43978:76;43802:2;43791:9;43787:18;44040:6;43978:76;;44071:310;;44218:2;44239:17;44232:47;44293:78;44218:2;44207:9;44203:18;44357:6;44293:78;;44388:416;44588:2;44602:47;;;17738:2;44573:18;;;58851:19;-1:-1;;;58891:14;;;17754:43;17816:12;;;44559:245;44811:416;45011:2;45025:47;;;18067:2;44996:18;;;58851:19;18103:27;58891:14;;;18083:48;18150:12;;;44982:245;45234:416;45434:2;45448:47;;;18401:2;45419:18;;;58851:19;18437:34;58891:14;;;18417:55;-1:-1;;;18492:12;;;18485:31;18535:12;;;45405:245;45657:416;45857:2;45871:47;;;18786:2;45842:18;;;58851:19;18822:29;58891:14;;;18802:50;18871:12;;;45828:245;46080:416;46280:2;46294:47;;;19831:2;46265:18;;;58851:19;-1:-1;;;58891:14;;;19847:40;19906:12;;;46251:245;46503:416;46703:2;46717:47;;;46688:18;;;58851:19;20537:34;58891:14;;;20517:55;20591:12;;;46674:245;46926:416;47126:2;47140:47;;;20842:2;47111:18;;;58851:19;20878:34;58891:14;;;20858:55;-1:-1;;;20933:12;;;20926:42;20987:12;;;47097:245;47349:416;47549:2;47563:47;;;21238:2;47534:18;;;58851:19;-1:-1;;;58891:14;;;21254:38;21311:12;;;47520:245;47772:416;47972:2;47986:47;;;21562:2;47957:18;;;58851:19;21598:26;58891:14;;;21578:47;21644:12;;;47943:245;48195:416;48395:2;48409:47;;;21895:2;48380:18;;;58851:19;21931:34;58891:14;;;21911:55;-1:-1;;;21986:12;;;21979:31;22029:12;;;48366:245;48618:416;48818:2;48832:47;;;22280:2;48803:18;;;58851:19;-1:-1;;;58891:14;;;22296:39;22354:12;;;48789:245;49041:416;49241:2;49255:47;;;22605:2;49226:18;;;58851:19;-1:-1;;;58891:14;;;22621:36;22676:12;;;49212:245;49464:416;49664:2;49678:47;;;23428:2;49649:18;;;58851:19;23464:34;58891:14;;;23444:55;-1:-1;;;23519:12;;;23512:25;23556:12;;;49635:245;49887:416;50087:2;50101:47;;;23807:2;50072:18;;;58851:19;-1:-1;;;58891:14;;;23823:39;23881:12;;;50058:245;50310:416;50510:2;50524:47;;;24132:2;50495:18;;;58851:19;-1:-1;;;58891:14;;;24148:41;24208:12;;;50481:245;50733:416;50933:2;50947:47;;;24459:2;50918:18;;;58851:19;-1:-1;;;58891:14;;;24475:41;24535:12;;;50904:245;51156:416;51356:2;51370:47;;;24786:2;51341:18;;;58851:19;24822:27;58891:14;;;24802:48;24869:12;;;51327:245;51579:416;51779:2;51793:47;;;25120:2;51764:18;;;58851:19;25156:28;58891:14;;;25136:49;25204:12;;;51750:245;52002:416;52202:2;52216:47;;;25455:2;52187:18;;;58851:19;-1:-1;;;58891:14;;;25471:43;25533:12;;;52173:245;52425:1032;;52774:3;52796:17;52789:47;61193:24;27346:16;27340:23;61193:24;;;52774:3;52763:9;52759:19;12754:45;1171:18;;61883:42;;;27509:4;27502:5;27498:16;27492:23;61872:54;27274:4;52763:9;27569:14;12754:45;27664:4;27657:5;27653:16;27647:23;27724:14;52763:9;27724:14;13927:37;27817:4;27810:5;27806:16;27800:23;27877:14;52763:9;27877:14;13927:37;27972:4;27965:5;27961:16;27955:23;28032:14;52763:9;28032:14;13927:37;52774:3;28119:5;28115:16;28109:23;27274:4;28152:14;52763:9;28152:14;28145:38;28198:71;27265:14;52763:9;27265:14;28250:12;28198:71;;;13957:5;27509:4;53040:9;53036:18;13927:37;13957:5;27664:4;53123:9;53119:18;13927:37;53186:9;53180:4;53176:20;27817:4;53160:9;53156:18;53149:48;53211:76;53282:4;53273:6;53211:76;;;53203:84;;;53336:9;53330:4;53326:20;27972:4;53309:9;53305:19;53298:49;53361:86;53442:4;53433:6;53425;53361:86;;;53353:94;52745:712;-1:-1;;;;;;;;;52745:712;53464:1268;;53903:3;;53925:17;53918:47;53979:120;53903:3;53892:9;53888:19;54085:6;53979:120;;;54147:9;54141:4;54137:20;54132:2;54121:9;54117:18;54110:48;54172:86;54253:4;54244:6;54236;54172:86;;;54164:94;;;54306:9;54300:4;54296:20;54291:2;54280:9;54276:18;54269:48;54331:86;54412:4;54403:6;54395;54331:86;;;28604:23;;54550:2;54535:18;;13927:37;54132:2;28782:16;;28776:23;28853:14;;;13927:37;54291:2;28955:16;;;28949:23;29026:14;;;13927:37;-1:-1;;54633:3;54618:19;;13927:37;;;;54717:3;54702:19;;;13927:37;54323:94;53874:858;-1:-1;;;;;53874:858;54739:936;;55068:3;55090:17;55083:47;55144:120;55068:3;55057:9;55053:19;55250:6;55144:120;;;55312:9;55306:4;55302:20;55297:2;55286:9;55282:18;55275:48;55337:86;55418:4;55409:6;55401;55337:86;;;55471:9;55465:4;55461:20;55456:2;55445:9;55441:18;55434:48;55496:86;55577:4;55568:6;55560;55496:86;;;55488:94;;;;13957:5;55661:2;55650:9;55646:18;13927:37;55039:636;;;;;;;;;;55911:552;;13957:5;13934:3;13927:37;13957:5;56288:2;56277:9;56273:18;13927:37;56124:2;56325;56314:9;56310:18;56303:48;56365:88;56124:2;56113:9;56109:18;56439:6;56431;56365:88;;56470:506;;;56605:11;56592:25;56656:48;;56680:8;56664:14;56660:29;56656:48;56636:18;56632:73;56622:2;;-1:-1;;56709:12;56622:2;56750:18;56740:8;56736:33;56803:4;56790:18;56780:28;;56828:18;56820:6;56817:30;56814:2;;;-1:-1;;56850:12;56814:2;56695:4;56878:13;;-1:-1;;56664:14;56910:38;;;56900:49;;56897:2;;;56962:1;;56952:12;56983:324;;57133:11;57120:25;60552:48;;57208:8;57192:14;57188:29;57184:48;57164:18;57160:73;57150:2;;-1:-1;;57237:12;57314:321;;57459:11;57446:25;57510:50;;57534:8;57518:14;57514:29;57510:50;57490:18;57486:75;57476:2;;-1:-1;;57565:12;57642:256;57704:2;57698:9;57730:17;;;57805:18;57790:34;;57826:22;;;57787:62;57784:2;;;57862:1;;57852:12;57784:2;57704;57871:22;57682:216;;-1:-1;57682:216;59859:501;;;59983:3;59970:17;56656:48;;60051:8;60035:14;60031:29;60027:48;60007:18;60003:73;59993:2;;-1:-1;;60080:12;59993:2;60109:33;;60066:4;60198:16;;;-1:-1;60164:19;;-1:-1;60234:18;60223:30;;60220:2;;;60266:1;;60256:12;60220:2;60313:17;60035:14;60293:38;60283:8;60279:53;60276:2;;;60345:1;;60335:12;60688:307;;60822:3;60809:17;57510:50;;60890:8;60874:14;60870:29;60866:50;60846:18;60842:75;60832:2;;-1:-1;;60921:12;60832:2;60950:33;;;;60776:219;-1:-1;;60776:219;61131:91;-1:-1;;;;;61872:54;;61176:46;61657:146;61728:16;63483:1;63473:12;;63463:2;;63489:9;63013:268;63078:1;63085:101;63099:6;63096:1;63093:13;63085:101;;;63166:11;;;63160:18;63147:11;;;63140:39;63121:2;63114:10;63085:101;;;63201:6;63198:1;63195:13;63192:2;;;63078:1;63257:6;63252:3;63248:16;63241:27;63192:2;;63062:219;;;;63512:117;-1:-1;;;;;61872:54;;63571:35;;63561:2;;63620:1;;63610:12;63776:111;63857:5;61401:13;61394:21;63835:5;63832:32;63822:2;;63878:1;;63868:12",
    "source": "/* solhint-disable avoid-low-level-calls */\n/* solhint-disable no-inline-assembly */\n/* solhint-disable not-rely-on-time */\n/* solhint-disable avoid-tx-origin */\n/* solhint-disable bracket-align */\n// SPDX-License-Identifier:MIT\npragma solidity ^0.6.9;\npragma experimental ABIEncoderV2;\n\nimport \"./utils/MinLibBytes.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"./utils/GsnUtils.sol\";\nimport \"./utils/GsnEip712Library.sol\";\nimport \"./interfaces/GsnTypes.sol\";\nimport \"./interfaces/IRelayHub.sol\";\nimport \"./interfaces/IPaymaster.sol\";\nimport \"./forwarder/IForwarder.sol\";\nimport \"./interfaces/IStakeManager.sol\";\n\ncontract RelayHub is IRelayHub {\n    using SafeMath for uint256;\n\n    string public override versionHub = \"2.0.0+opengsn.hub.irelayhub\";\n\n    uint256 public override minimumStake;\n    uint256 public override minimumUnstakeDelay;\n    uint256 public override maximumRecipientDeposit;\n    uint256 public override gasOverhead;\n    uint256 public override postOverhead;\n    uint256 public override gasReserve;\n    uint256 public override maxWorkerCount;\n    IStakeManager override public stakeManager;\n    address override public penalizer;\n\n    // maps relay worker's address to its manager's address\n    mapping(address => address) public override workerToManager;\n\n    // maps relay managers to the number of their workers\n    mapping(address => uint256) public override workerCount;\n\n    mapping(address => uint256) private balances;\n\n    constructor (\n        IStakeManager _stakeManager,\n        address _penalizer,\n        uint256 _maxWorkerCount,\n        uint256 _gasReserve,\n        uint256 _postOverhead,\n        uint256 _gasOverhead,\n        uint256 _maximumRecipientDeposit,\n        uint256 _minimumUnstakeDelay,\n        uint256 _minimumStake\n    ) public {\n        stakeManager = _stakeManager;\n        penalizer = _penalizer;\n        maxWorkerCount = _maxWorkerCount;\n        gasReserve = _gasReserve;\n        postOverhead = _postOverhead;\n        gasOverhead = _gasOverhead;\n        maximumRecipientDeposit = _maximumRecipientDeposit;\n        minimumUnstakeDelay = _minimumUnstakeDelay;\n        minimumStake =  _minimumStake;\n    }\n\n    function registerRelayServer(uint256 baseRelayFee, uint256 pctRelayFee, string calldata url) external override {\n        address relayManager = msg.sender;\n        require(\n            isRelayManagerStaked(relayManager),\n            \"relay manager not staked\"\n        );\n        require(workerCount[relayManager] > 0, \"no relay workers\");\n        emit RelayServerRegistered(relayManager, baseRelayFee, pctRelayFee, url);\n    }\n\n    function addRelayWorkers(address[] calldata newRelayWorkers) external override {\n        address relayManager = msg.sender;\n        workerCount[relayManager] = workerCount[relayManager] + newRelayWorkers.length;\n        require(workerCount[relayManager] <= maxWorkerCount, \"too many workers\");\n\n        require(\n            isRelayManagerStaked(relayManager),\n            \"relay manager not staked\"\n        );\n\n        for (uint256 i = 0; i < newRelayWorkers.length; i++) {\n            require(workerToManager[newRelayWorkers[i]] == address(0), \"this worker has a manager\");\n            workerToManager[newRelayWorkers[i]] = relayManager;\n        }\n\n        emit RelayWorkersAdded(relayManager, newRelayWorkers, workerCount[relayManager]);\n    }\n\n    function depositFor(address target) public override payable {\n        uint256 amount = msg.value;\n        require(amount <= maximumRecipientDeposit, \"deposit too big\");\n\n        balances[target] = balances[target].add(amount);\n\n        emit Deposited(target, msg.sender, amount);\n    }\n\n    function balanceOf(address target) external override view returns (uint256) {\n        return balances[target];\n    }\n\n    function withdraw(uint256 amount, address payable dest) public override {\n        address payable account = msg.sender;\n        require(balances[account] >= amount, \"insufficient funds\");\n\n        balances[account] = balances[account].sub(amount);\n        dest.transfer(amount);\n\n        emit Withdrawn(account, dest, amount);\n    }\n\n    function verifyGasLimits(\n        uint256 paymasterMaxAcceptanceBudget,\n        GsnTypes.RelayRequest calldata relayRequest,\n        uint256 initialGas\n    )\n    private\n    view\n    returns (IPaymaster.GasLimits memory gasLimits, uint256 maxPossibleGas) {\n        gasLimits =\n            IPaymaster(relayRequest.relayData.paymaster).getGasLimits{gas:50000}();\n\n        require(paymasterMaxAcceptanceBudget >= gasLimits.acceptanceBudget, \"unexpected high acceptanceBudget\");\n\n        maxPossibleGas =\n            gasOverhead.add(\n            gasLimits.preRelayedCallGasLimit).add(\n            gasLimits.postRelayedCallGasLimit).add(\n            relayRequest.request.gas);\n\n        // This transaction must have enough gas to forward the call to the recipient with the requested amount, and not\n        // run out of gas later in this function.\n        require(\n            initialGas >= maxPossibleGas,\n            \"Not enough gas left for innerRelayCall to complete\");\n\n        uint256 maxPossibleCharge = calculateCharge(\n            maxPossibleGas,\n            relayRequest.relayData\n        );\n\n        // We don't yet know how much gas will be used by the recipient, so we make sure there are enough funds to pay\n        // for the maximum possible charge.\n        require(maxPossibleCharge <= balances[relayRequest.relayData.paymaster],\n            \"Paymaster balance too low\");\n    }\n\n    struct RelayCallData {\n        bool success;\n        bytes4 functionSelector;\n        bytes recipientContext;\n        bytes relayedCallReturnValue;\n        IPaymaster.GasLimits gasLimits;\n        RelayCallStatus status;\n        uint256 innerGasUsed;\n        uint256 maxPossibleGas;\n        uint256 gasBeforeInner;\n        bytes retData;\n    }\n\n    function relayCall(\n        uint paymasterMaxAcceptanceBudget,\n        GsnTypes.RelayRequest calldata relayRequest,\n        bytes calldata signature,\n        bytes calldata approvalData,\n        uint externalGasLimit\n    )\n    external\n    override\n    returns (bool paymasterAccepted, bytes memory returnValue)\n    {\n        (signature);\n        RelayCallData memory vars;\n        vars.functionSelector = MinLibBytes.readBytes4(relayRequest.request.data, 0);\n        require(msg.sender == tx.origin, \"relay worker cannot be a smart contract\");\n        require(workerToManager[msg.sender] != address(0), \"Unknown relay worker\");\n        require(relayRequest.relayData.relayWorker == msg.sender, \"Not a right worker\");\n        require(\n            isRelayManagerStaked(workerToManager[msg.sender]),\n            \"relay manager not staked\"\n        );\n        require(relayRequest.relayData.gasPrice <= tx.gasprice, \"Invalid gas price\");\n        require(externalGasLimit <= block.gaslimit, \"Impossible gas limit\");\n\n        (vars.gasLimits, vars.maxPossibleGas) =\n             verifyGasLimits(paymasterMaxAcceptanceBudget, relayRequest, externalGasLimit);\n\n    {\n\n        //How much gas to pass down to innerRelayCall. must be lower than the default 63/64\n        // actually, min(gasleft*63/64, gasleft-GAS_RESERVE) might be enough.\n        uint256 innerGasLimit = gasleft()*63/64-gasReserve;\n        vars.gasBeforeInner = gasleft();\n\n        uint256 _tmpInitialGas = innerGasLimit + externalGasLimit + gasOverhead + postOverhead;\n        // Calls to the recipient are performed atomically inside an inner transaction which may revert in case of\n        // errors in the recipient. In either case (revert or regular execution) the return data encodes the\n        // RelayCallStatus value.\n        (bool success, bytes memory relayCallStatus) = address(this).call{gas:innerGasLimit}(\n            abi.encodeWithSelector(RelayHub.innerRelayCall.selector, relayRequest, signature, approvalData, vars.gasLimits,\n                _tmpInitialGas - gasleft(),\n                vars.maxPossibleGas\n                )\n        );\n        vars.success = success;\n        vars.innerGasUsed = vars.gasBeforeInner-gasleft();\n        (vars.status, vars.relayedCallReturnValue) = abi.decode(relayCallStatus, (RelayCallStatus, bytes));\n        if ( vars.relayedCallReturnValue.length>0 ) {\n            emit TransactionResult(vars.status, vars.relayedCallReturnValue);\n        }\n    }\n    {\n        if (!vars.success) {\n            //Failure cases where the PM doesn't pay\n            if ( (vars.innerGasUsed < vars.gasLimits.acceptanceBudget ) && (\n                    vars.status == RelayCallStatus.RejectedByPreRelayed ||\n                    vars.status == RelayCallStatus.RejectedByForwarder ||\n                    vars.status == RelayCallStatus.RejectedByRecipientRevert  //can only be thrown if rejectOnRecipientRevert==true\n            )) {\n                paymasterAccepted=false;\n\n                emit TransactionRejectedByPaymaster(\n                    workerToManager[msg.sender],\n                    relayRequest.relayData.paymaster,\n                    relayRequest.request.from,\n                    relayRequest.request.to,\n                    msg.sender,\n                    vars.functionSelector,\n                    vars.innerGasUsed,\n                    vars.relayedCallReturnValue);\n                return (false, vars.relayedCallReturnValue);\n            }\n        }\n        // We now perform the actual charge calculation, based on the measured gas used\n        uint256 gasUsed = (externalGasLimit - gasleft()) + gasOverhead;\n        uint256 charge = calculateCharge(gasUsed, relayRequest.relayData);\n\n        balances[relayRequest.relayData.paymaster] = balances[relayRequest.relayData.paymaster].sub(charge);\n        balances[workerToManager[msg.sender]] = balances[workerToManager[msg.sender]].add(charge);\n\n        emit TransactionRelayed(\n            workerToManager[msg.sender],\n            msg.sender,\n            relayRequest.request.from,\n            relayRequest.request.to,\n            relayRequest.relayData.paymaster,\n            vars.functionSelector,\n            vars.status,\n            charge);\n        return (true, \"\");\n    }\n    }\n\n    struct InnerRelayCallData {\n        uint256 balanceBefore;\n        bytes32 preReturnValue;\n        bool relayedCallSuccess;\n        bytes relayedCallReturnValue;\n        bytes recipientContext;\n        bytes data;\n        bool rejectOnRecipientRevert;\n    }\n\n    function innerRelayCall(\n        GsnTypes.RelayRequest calldata relayRequest,\n        bytes calldata signature,\n        bytes calldata approvalData,\n        IPaymaster.GasLimits calldata gasLimits,\n        uint256 totalInitialGas,\n        uint256 maxPossibleGas\n    )\n    external\n    returns (RelayCallStatus, bytes memory)\n    {\n        InnerRelayCallData memory vars;\n        // A new gas measurement is performed inside innerRelayCall, since\n        // due to EIP150 available gas amounts cannot be directly compared across external calls\n\n        // This external function can only be called by RelayHub itself, creating an internal transaction. Calls to the\n        // recipient (preRelayedCall, the relayedCall, and postRelayedCall) are called from inside this transaction.\n        require(msg.sender == address(this), \"Only RelayHub should call this function\");\n\n        // If either pre or post reverts, the whole internal transaction will be reverted, reverting all side effects on\n        // the recipient. The recipient will still be charged for the used gas by the relay.\n\n        // The recipient is no allowed to withdraw balance from RelayHub during a relayed transaction. We check pre and\n        // post state to ensure this doesn't happen.\n        vars.balanceBefore = balances[relayRequest.relayData.paymaster];\n\n        // First preRelayedCall is executed.\n        // Note: we open a new block to avoid growing the stack too much.\n        vars.data = abi.encodeWithSelector(\n            IPaymaster.preRelayedCall.selector,\n                relayRequest, signature, approvalData, maxPossibleGas\n        );\n        {\n            bool success;\n            bytes memory retData;\n            (success, retData) = relayRequest.relayData.paymaster.call{gas:gasLimits.preRelayedCallGasLimit}(vars.data);\n            if (!success) {\n                GsnEip712Library.truncateInPlace(retData);\n                revertWithStatus(RelayCallStatus.RejectedByPreRelayed, retData);\n            }\n            (vars.recipientContext, vars.rejectOnRecipientRevert) = abi.decode(retData, (bytes,bool));\n        }\n\n        // The actual relayed call is now executed. The sender's address is appended at the end of the transaction data\n\n        {\n            bool forwarderSuccess;\n            (forwarderSuccess, vars.relayedCallSuccess, vars.relayedCallReturnValue) = GsnEip712Library.execute(relayRequest, signature);\n            if ( !forwarderSuccess ) {\n                revertWithStatus(RelayCallStatus.RejectedByForwarder, vars.relayedCallReturnValue);\n            }\n\n            if (vars.rejectOnRecipientRevert && !vars.relayedCallSuccess) {\n                //we trusted the recipient, but it reverted...\n                revertWithStatus(RelayCallStatus.RejectedByRecipientRevert, vars.relayedCallReturnValue);\n            }\n        }\n        // Finally, postRelayedCall is executed, with the relayedCall execution's status and a charge estimate\n        // We now determine how much the recipient will be charged, to pass this value to postRelayedCall for accurate\n        // accounting.\n        vars.data = abi.encodeWithSelector(\n            IPaymaster.postRelayedCall.selector,\n            vars.recipientContext,\n            vars.relayedCallSuccess,\n            totalInitialGas - gasleft(), /*gasUseWithoutPost*/\n            relayRequest.relayData\n        );\n\n        {\n        (bool successPost,bytes memory ret) = relayRequest.relayData.paymaster.call{gas:gasLimits.postRelayedCallGasLimit}(vars.data);\n\n        if (!successPost) {\n            revertWithStatus(RelayCallStatus.PostRelayedFailed, ret);\n        }\n        }\n\n        if (balances[relayRequest.relayData.paymaster] < vars.balanceBefore) {\n            revertWithStatus(RelayCallStatus.PaymasterBalanceChanged, \"\");\n        }\n\n        return (vars.relayedCallSuccess ? RelayCallStatus.OK : RelayCallStatus.RelayedCallFailed, vars.relayedCallReturnValue);\n    }\n\n    /**\n     * @dev Reverts the transaction with return data set to the ABI encoding of the status argument (and revert reason data)\n     */\n    function revertWithStatus(RelayCallStatus status, bytes memory ret) private pure {\n        bytes memory data = abi.encode(status, ret);\n        GsnEip712Library.truncateInPlace(data);\n\n        assembly {\n            let dataSize := mload(data)\n            let dataPtr := add(data, 32)\n\n            revert(dataPtr, dataSize)\n        }\n    }\n\n    function calculateCharge(uint256 gasUsed, GsnTypes.RelayData calldata relayData) public override virtual view returns (uint256) {\n        //       relayData.baseRelayFee + (gasUsed * relayData.gasPrice * (100 + relayData.pctRelayFee)) / 100;\n        return relayData.baseRelayFee.add((gasUsed.mul(relayData.gasPrice).mul(relayData.pctRelayFee.add(100))).div(100));\n    }\n\n    function isRelayManagerStaked(address relayManager) public override view returns (bool) {\n        return stakeManager.isRelayManagerStaked(relayManager, address(this), minimumStake, minimumUnstakeDelay);\n    }\n\n    modifier penalizerOnly () {\n        require(msg.sender == penalizer, \"Not penalizer\");\n        _;\n    }\n\n    function penalize(address relayWorker, address payable beneficiary) external override penalizerOnly {\n        address relayManager = workerToManager[relayWorker];\n        // The worker must be controlled by a manager with a locked stake\n        require(relayManager != address(0), \"Unknown relay worker\");\n        require(\n            isRelayManagerStaked(relayManager),\n            \"relay manager not staked\"\n        );\n        IStakeManager.StakeInfo memory stakeInfo = stakeManager.getStakeInfo(relayManager);\n        stakeManager.penalizeRelayManager(relayManager, beneficiary, stakeInfo.stake);\n    }\n}\n",
    "sourcePath": "/Users/dror/IdeaProjects/gsn/contracts/RelayHub.sol",
    "ast": {
        "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/RelayHub.sol",
        "exportedSymbols": {
            "RelayHub": [
                1878
            ]
        },
        "id": 1879,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 698,
                "literals": [
                    "solidity",
                    "^",
                    "0.6",
                    ".9"
                ],
                "nodeType": "PragmaDirective",
                "src": "229:23:5"
            },
            {
                "id": 699,
                "literals": [
                    "experimental",
                    "ABIEncoderV2"
                ],
                "nodeType": "PragmaDirective",
                "src": "253:33:5"
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/utils/MinLibBytes.sol",
                "file": "./utils/MinLibBytes.sol",
                "id": 700,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 5690,
                "src": "288:33:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
                "file": "@openzeppelin/contracts/math/SafeMath.sol",
                "id": 701,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 6762,
                "src": "322:51:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/utils/GsnUtils.sol",
                "file": "./utils/GsnUtils.sol",
                "id": 702,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 5575,
                "src": "375:30:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/utils/GsnEip712Library.sol",
                "file": "./utils/GsnEip712Library.sol",
                "id": 703,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 5528,
                "src": "406:38:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/interfaces/GsnTypes.sol",
                "file": "./interfaces/GsnTypes.sol",
                "id": 704,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 3234,
                "src": "445:35:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/interfaces/IRelayHub.sol",
                "file": "./interfaces/IRelayHub.sol",
                "id": 705,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 3593,
                "src": "481:36:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/interfaces/IPaymaster.sol",
                "file": "./interfaces/IPaymaster.sol",
                "id": 706,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 3311,
                "src": "518:37:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/forwarder/IForwarder.sol",
                "file": "./forwarder/IForwarder.sol",
                "id": 707,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 3007,
                "src": "556:36:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/interfaces/IStakeManager.sol",
                "file": "./interfaces/IStakeManager.sol",
                "id": 708,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 3768,
                "src": "593:40:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "arguments": null,
                        "baseName": {
                            "contractScope": null,
                            "id": 709,
                            "name": "IRelayHub",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 3592,
                            "src": "656:9:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                "typeString": "contract IRelayHub"
                            }
                        },
                        "id": 710,
                        "nodeType": "InheritanceSpecifier",
                        "src": "656:9:5"
                    }
                ],
                "contractDependencies": [
                    3592
                ],
                "contractKind": "contract",
                "documentation": null,
                "fullyImplemented": true,
                "id": 1878,
                "linearizedBaseContracts": [
                    1878,
                    3592
                ],
                "name": "RelayHub",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 713,
                        "libraryName": {
                            "contractScope": null,
                            "id": 711,
                            "name": "SafeMath",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 6761,
                            "src": "678:8:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_SafeMath_$6761",
                                "typeString": "library SafeMath"
                            }
                        },
                        "nodeType": "UsingForDirective",
                        "src": "672:27:5",
                        "typeName": {
                            "id": 712,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "691:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        }
                    },
                    {
                        "baseFunctions": [
                            3591
                        ],
                        "constant": false,
                        "functionSelector": "d904c732",
                        "id": 717,
                        "mutability": "mutable",
                        "name": "versionHub",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 715,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "719:8:5"
                        },
                        "scope": 1878,
                        "src": "705:65:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 714,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "705:6:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "value": {
                            "argumentTypes": null,
                            "hexValue": "322e302e302b6f70656e67736e2e6875622e6972656c6179687562",
                            "id": 716,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "741:29:5",
                            "subdenomination": null,
                            "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8dbb7717601ec4321cd3ca2253547b51860838fc3b92afe3ae51f08d81c32ec4",
                                "typeString": "literal_string \"2.0.0+opengsn.hub.irelayhub\""
                            },
                            "value": "2.0.0+opengsn.hub.irelayhub"
                        },
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3534
                        ],
                        "constant": false,
                        "functionSelector": "ec5ffac2",
                        "id": 720,
                        "mutability": "mutable",
                        "name": "minimumStake",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 719,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "792:8:5"
                        },
                        "scope": 1878,
                        "src": "777:36:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 718,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "777:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3539
                        ],
                        "constant": false,
                        "functionSelector": "71116320",
                        "id": 723,
                        "mutability": "mutable",
                        "name": "minimumUnstakeDelay",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 722,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "834:8:5"
                        },
                        "scope": 1878,
                        "src": "819:43:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 721,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "819:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3544
                        ],
                        "constant": false,
                        "functionSelector": "3a3e83ac",
                        "id": 726,
                        "mutability": "mutable",
                        "name": "maximumRecipientDeposit",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 725,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "883:8:5"
                        },
                        "scope": 1878,
                        "src": "868:47:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 724,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "868:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3586
                        ],
                        "constant": false,
                        "functionSelector": "83fea4ef",
                        "id": 729,
                        "mutability": "mutable",
                        "name": "gasOverhead",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 728,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "936:8:5"
                        },
                        "scope": 1878,
                        "src": "921:35:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 727,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "921:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3549
                        ],
                        "constant": false,
                        "functionSelector": "ba3ecc5b",
                        "id": 732,
                        "mutability": "mutable",
                        "name": "postOverhead",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 731,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "977:8:5"
                        },
                        "scope": 1878,
                        "src": "962:36:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 730,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "962:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3554
                        ],
                        "constant": false,
                        "functionSelector": "eea7570e",
                        "id": 735,
                        "mutability": "mutable",
                        "name": "gasReserve",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 734,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1019:8:5"
                        },
                        "scope": 1878,
                        "src": "1004:34:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 733,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1004:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3559
                        ],
                        "constant": false,
                        "functionSelector": "e5fad978",
                        "id": 738,
                        "mutability": "mutable",
                        "name": "maxWorkerCount",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 737,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1059:8:5"
                        },
                        "scope": 1878,
                        "src": "1044:38:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 736,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1044:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3516
                        ],
                        "constant": false,
                        "functionSelector": "7542ff95",
                        "id": 741,
                        "mutability": "mutable",
                        "name": "stakeManager",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 740,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1102:8:5"
                        },
                        "scope": 1878,
                        "src": "1088:42:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IStakeManager_$3767",
                            "typeString": "contract IStakeManager"
                        },
                        "typeName": {
                            "contractScope": null,
                            "id": 739,
                            "name": "IStakeManager",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 3767,
                            "src": "1088:13:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                "typeString": "contract IStakeManager"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3521
                        ],
                        "constant": false,
                        "functionSelector": "c4775a68",
                        "id": 744,
                        "mutability": "mutable",
                        "name": "penalizer",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 743,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1144:8:5"
                        },
                        "scope": 1878,
                        "src": "1136:33:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                        },
                        "typeName": {
                            "id": 742,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1136:7:5",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3566
                        ],
                        "constant": false,
                        "functionSelector": "ca998f56",
                        "id": 749,
                        "mutability": "mutable",
                        "name": "workerToManager",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 748,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1271:8:5"
                        },
                        "scope": 1878,
                        "src": "1236:59:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                            "typeString": "mapping(address => address)"
                        },
                        "typeName": {
                            "id": 747,
                            "keyType": {
                                "id": 745,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1244:7:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "1236:27:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                            },
                            "valueType": {
                                "id": 746,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1255:7:5",
                                "stateMutability": "nonpayable",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3573
                        ],
                        "constant": false,
                        "functionSelector": "194ac307",
                        "id": 754,
                        "mutability": "mutable",
                        "name": "workerCount",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 753,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1395:8:5"
                        },
                        "scope": 1878,
                        "src": "1360:55:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                        },
                        "typeName": {
                            "id": 752,
                            "keyType": {
                                "id": 750,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1368:7:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "1360:27:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                            },
                            "valueType": {
                                "id": 751,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1379:7:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                }
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 758,
                        "mutability": "mutable",
                        "name": "balances",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1878,
                        "src": "1422:44:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                        },
                        "typeName": {
                            "id": 757,
                            "keyType": {
                                "id": 755,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1430:7:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "1422:27:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                            },
                            "valueType": {
                                "id": 756,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1441:7:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                }
                            }
                        },
                        "value": null,
                        "visibility": "private"
                    },
                    {
                        "body": {
                            "id": 815,
                            "nodeType": "Block",
                            "src": "1798:378:5",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 781,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 779,
                                            "name": "stakeManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 741,
                                            "src": "1808:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                                "typeString": "contract IStakeManager"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 780,
                                            "name": "_stakeManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 760,
                                            "src": "1823:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                                "typeString": "contract IStakeManager"
                                            }
                                        },
                                        "src": "1808:28:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "id": 782,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1808:28:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 785,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 783,
                                            "name": "penalizer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 744,
                                            "src": "1846:9:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 784,
                                            "name": "_penalizer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 762,
                                            "src": "1858:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "1846:22:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "id": 786,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1846:22:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 789,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 787,
                                            "name": "maxWorkerCount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 738,
                                            "src": "1878:14:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 788,
                                            "name": "_maxWorkerCount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 764,
                                            "src": "1895:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1878:32:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 790,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1878:32:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 793,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 791,
                                            "name": "gasReserve",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 735,
                                            "src": "1920:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 792,
                                            "name": "_gasReserve",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 766,
                                            "src": "1933:11:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1920:24:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 794,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1920:24:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 797,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 795,
                                            "name": "postOverhead",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 732,
                                            "src": "1954:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 796,
                                            "name": "_postOverhead",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 768,
                                            "src": "1969:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1954:28:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 798,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1954:28:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 801,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 799,
                                            "name": "gasOverhead",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 729,
                                            "src": "1992:11:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 800,
                                            "name": "_gasOverhead",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 770,
                                            "src": "2006:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1992:26:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 802,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1992:26:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 805,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 803,
                                            "name": "maximumRecipientDeposit",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 726,
                                            "src": "2028:23:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 804,
                                            "name": "_maximumRecipientDeposit",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 772,
                                            "src": "2054:24:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2028:50:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 806,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2028:50:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 809,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 807,
                                            "name": "minimumUnstakeDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 723,
                                            "src": "2088:19:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 808,
                                            "name": "_minimumUnstakeDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 774,
                                            "src": "2110:20:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2088:42:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 810,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2088:42:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 813,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 811,
                                            "name": "minimumStake",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 720,
                                            "src": "2140:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 812,
                                            "name": "_minimumStake",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 776,
                                            "src": "2156:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2140:29:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 814,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2140:29:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 816,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [],
                        "name": "",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 777,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 760,
                                    "mutability": "mutable",
                                    "name": "_stakeManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1495:27:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                        "typeString": "contract IStakeManager"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 759,
                                        "name": "IStakeManager",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3767,
                                        "src": "1495:13:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 762,
                                    "mutability": "mutable",
                                    "name": "_penalizer",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1532:18:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 761,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1532:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 764,
                                    "mutability": "mutable",
                                    "name": "_maxWorkerCount",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1560:23:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 763,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1560:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 766,
                                    "mutability": "mutable",
                                    "name": "_gasReserve",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1593:19:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 765,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1593:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 768,
                                    "mutability": "mutable",
                                    "name": "_postOverhead",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1622:21:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 767,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1622:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 770,
                                    "mutability": "mutable",
                                    "name": "_gasOverhead",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1653:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 769,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1653:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 772,
                                    "mutability": "mutable",
                                    "name": "_maximumRecipientDeposit",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1683:32:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 771,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1683:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 774,
                                    "mutability": "mutable",
                                    "name": "_minimumUnstakeDelay",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1725:28:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 773,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1725:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 776,
                                    "mutability": "mutable",
                                    "name": "_minimumStake",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1763:21:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 775,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1763:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1485:305:5"
                        },
                        "returnParameters": {
                            "id": 778,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1798:0:5"
                        },
                        "scope": 1878,
                        "src": "1473:703:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3463
                        ],
                        "body": {
                            "id": 854,
                            "nodeType": "Block",
                            "src": "2293:315:5",
                            "statements": [
                                {
                                    "assignments": [
                                        827
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 827,
                                            "mutability": "mutable",
                                            "name": "relayManager",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 854,
                                            "src": "2303:20:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 826,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2303:7:5",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 830,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "expression": {
                                            "argumentTypes": null,
                                            "id": 828,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -15,
                                            "src": "2326:3:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                            }
                                        },
                                        "id": 829,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "2326:10:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2303:33:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 833,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 827,
                                                        "src": "2388:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 832,
                                                    "name": "isRelayManagerStaked",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1813,
                                                    "src": "2367:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view returns (bool)"
                                                    }
                                                },
                                                "id": 834,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2367:34:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "72656c6179206d616e61676572206e6f74207374616b6564",
                                                "id": 835,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2415:26:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                },
                                                "value": "relay manager not staked"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                }
                                            ],
                                            "id": 831,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2346:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 836,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2346:105:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 837,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2346:105:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 843,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 839,
                                                        "name": "workerCount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 754,
                                                        "src": "2469:11:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 841,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 840,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 827,
                                                        "src": "2481:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "2469:25:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "30",
                                                    "id": 842,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "2497:1:5",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "2469:29:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6e6f2072656c617920776f726b657273",
                                                "id": 844,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2500:18:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_8062fca8667cf03baf0898f152a7583ecdcf036db8aaa1e73c68558b552d910a",
                                                    "typeString": "literal_string \"no relay workers\""
                                                },
                                                "value": "no relay workers"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_8062fca8667cf03baf0898f152a7583ecdcf036db8aaa1e73c68558b552d910a",
                                                    "typeString": "literal_string \"no relay workers\""
                                                }
                                            ],
                                            "id": 838,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2461:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 845,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2461:58:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 846,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2461:58:5"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 848,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 827,
                                                "src": "2556:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 849,
                                                "name": "baseRelayFee",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 818,
                                                "src": "2570:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 850,
                                                "name": "pctRelayFee",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 820,
                                                "src": "2584:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 851,
                                                "name": "url",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 822,
                                                "src": "2597:3:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                    "typeString": "string calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                    "typeString": "string calldata"
                                                }
                                            ],
                                            "id": 847,
                                            "name": "RelayServerRegistered",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3370,
                                            "src": "2534:21:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (address,uint256,uint256,string memory)"
                                            }
                                        },
                                        "id": 852,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2534:67:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 853,
                                    "nodeType": "EmitStatement",
                                    "src": "2529:72:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "83b71871",
                        "id": 855,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "registerRelayServer",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 824,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2284:8:5"
                        },
                        "parameters": {
                            "id": 823,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 818,
                                    "mutability": "mutable",
                                    "name": "baseRelayFee",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 855,
                                    "src": "2211:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 817,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2211:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 820,
                                    "mutability": "mutable",
                                    "name": "pctRelayFee",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 855,
                                    "src": "2233:19:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 819,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2233:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 822,
                                    "mutability": "mutable",
                                    "name": "url",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 855,
                                    "src": "2254:19:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 821,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2254:6:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2210:64:5"
                        },
                        "returnParameters": {
                            "id": 825,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2293:0:5"
                        },
                        "scope": 1878,
                        "src": "2182:426:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3454
                        ],
                        "body": {
                            "id": 937,
                            "nodeType": "Block",
                            "src": "2693:666:5",
                            "statements": [
                                {
                                    "assignments": [
                                        863
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 863,
                                            "mutability": "mutable",
                                            "name": "relayManager",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 937,
                                            "src": "2703:20:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 862,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2703:7:5",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 866,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "expression": {
                                            "argumentTypes": null,
                                            "id": 864,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -15,
                                            "src": "2726:3:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                            }
                                        },
                                        "id": 865,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "2726:10:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2703:33:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 876,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 867,
                                                "name": "workerCount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 754,
                                                "src": "2746:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 869,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 868,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 863,
                                                "src": "2758:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "2746:25:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 875,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 870,
                                                    "name": "workerCount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 754,
                                                    "src": "2774:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                        "typeString": "mapping(address => uint256)"
                                                    }
                                                },
                                                "id": 872,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 871,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 863,
                                                    "src": "2786:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "2774:25:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 873,
                                                    "name": "newRelayWorkers",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 858,
                                                    "src": "2802:15:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                        "typeString": "address[] calldata"
                                                    }
                                                },
                                                "id": 874,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "length",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "2802:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "2774:50:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2746:78:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 877,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2746:78:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 883,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 879,
                                                        "name": "workerCount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 754,
                                                        "src": "2842:11:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 881,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 880,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 863,
                                                        "src": "2854:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "2842:25:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 882,
                                                    "name": "maxWorkerCount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 738,
                                                    "src": "2871:14:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "2842:43:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "746f6f206d616e7920776f726b657273",
                                                "id": 884,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2887:18:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_b8b3bf20e6bad4d8ec9d04cc1a6fa92d0c0feaf33cdb977513deb374c838da6c",
                                                    "typeString": "literal_string \"too many workers\""
                                                },
                                                "value": "too many workers"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_b8b3bf20e6bad4d8ec9d04cc1a6fa92d0c0feaf33cdb977513deb374c838da6c",
                                                    "typeString": "literal_string \"too many workers\""
                                                }
                                            ],
                                            "id": 878,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2834:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 885,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2834:72:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 886,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2834:72:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 889,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 863,
                                                        "src": "2959:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 888,
                                                    "name": "isRelayManagerStaked",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1813,
                                                    "src": "2938:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view returns (bool)"
                                                    }
                                                },
                                                "id": 890,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2938:34:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "72656c6179206d616e61676572206e6f74207374616b6564",
                                                "id": 891,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2986:26:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                },
                                                "value": "relay manager not staked"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                }
                                            ],
                                            "id": 887,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2917:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 892,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2917:105:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 893,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2917:105:5"
                                },
                                {
                                    "body": {
                                        "id": 927,
                                        "nodeType": "Block",
                                        "src": "3086:176:5",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "id": 915,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "argumentTypes": null,
                                                                "baseExpression": {
                                                                    "argumentTypes": null,
                                                                    "id": 906,
                                                                    "name": "workerToManager",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 749,
                                                                    "src": "3108:15:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                        "typeString": "mapping(address => address)"
                                                                    }
                                                                },
                                                                "id": 910,
                                                                "indexExpression": {
                                                                    "argumentTypes": null,
                                                                    "baseExpression": {
                                                                        "argumentTypes": null,
                                                                        "id": 907,
                                                                        "name": "newRelayWorkers",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 858,
                                                                        "src": "3124:15:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                                            "typeString": "address[] calldata"
                                                                        }
                                                                    },
                                                                    "id": 909,
                                                                    "indexExpression": {
                                                                        "argumentTypes": null,
                                                                        "id": 908,
                                                                        "name": "i",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 895,
                                                                        "src": "3140:1:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "IndexAccess",
                                                                    "src": "3124:18:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_address",
                                                                        "typeString": "address"
                                                                    }
                                                                },
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "IndexAccess",
                                                                "src": "3108:35:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "==",
                                                            "rightExpression": {
                                                                "argumentTypes": null,
                                                                "arguments": [
                                                                    {
                                                                        "argumentTypes": null,
                                                                        "hexValue": "30",
                                                                        "id": 913,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": true,
                                                                        "kind": "number",
                                                                        "lValueRequested": false,
                                                                        "nodeType": "Literal",
                                                                        "src": "3155:1:5",
                                                                        "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": 912,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "3147:7:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_address_$",
                                                                        "typeString": "type(address)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 911,
                                                                        "name": "address",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "3147:7:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": null,
                                                                            "typeString": null
                                                                        }
                                                                    }
                                                                },
                                                                "id": 914,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "3147:10:5",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                }
                                                            },
                                                            "src": "3108:49:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "7468697320776f726b6572206861732061206d616e61676572",
                                                            "id": 916,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3159:27:5",
                                                            "subdenomination": null,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_1ed2aaf157438763c9d09abeb404cf0934813cbb51a61f32a0f54a0f1941ce31",
                                                                "typeString": "literal_string \"this worker has a manager\""
                                                            },
                                                            "value": "this worker has a manager"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_1ed2aaf157438763c9d09abeb404cf0934813cbb51a61f32a0f54a0f1941ce31",
                                                                "typeString": "literal_string \"this worker has a manager\""
                                                            }
                                                        ],
                                                        "id": 905,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            -18,
                                                            -18
                                                        ],
                                                        "referencedDeclaration": -18,
                                                        "src": "3100:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 917,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3100:87:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 918,
                                                "nodeType": "ExpressionStatement",
                                                "src": "3100:87:5"
                                            },
                                            {
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 925,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                            "argumentTypes": null,
                                                            "id": 919,
                                                            "name": "workerToManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 749,
                                                            "src": "3201:15:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                "typeString": "mapping(address => address)"
                                                            }
                                                        },
                                                        "id": 923,
                                                        "indexExpression": {
                                                            "argumentTypes": null,
                                                            "baseExpression": {
                                                                "argumentTypes": null,
                                                                "id": 920,
                                                                "name": "newRelayWorkers",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 858,
                                                                "src": "3217:15:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                                    "typeString": "address[] calldata"
                                                                }
                                                            },
                                                            "id": 922,
                                                            "indexExpression": {
                                                                "argumentTypes": null,
                                                                "id": 921,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 895,
                                                                "src": "3233:1:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "3217:18:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": true,
                                                        "nodeType": "IndexAccess",
                                                        "src": "3201:35:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "argumentTypes": null,
                                                        "id": 924,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 863,
                                                        "src": "3239:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "src": "3201:50:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "id": 926,
                                                "nodeType": "ExpressionStatement",
                                                "src": "3201:50:5"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 901,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "id": 898,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 895,
                                            "src": "3053:1:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 899,
                                                "name": "newRelayWorkers",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 858,
                                                "src": "3057:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                    "typeString": "address[] calldata"
                                                }
                                            },
                                            "id": 900,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "3057:22:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3053:26:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 928,
                                    "initializationExpression": {
                                        "assignments": [
                                            895
                                        ],
                                        "declarations": [
                                            {
                                                "constant": false,
                                                "id": 895,
                                                "mutability": "mutable",
                                                "name": "i",
                                                "nodeType": "VariableDeclaration",
                                                "overrides": null,
                                                "scope": 928,
                                                "src": "3038:9:5",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "typeName": {
                                                    "id": 894,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "3038:7:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "value": null,
                                                "visibility": "internal"
                                            }
                                        ],
                                        "id": 897,
                                        "initialValue": {
                                            "argumentTypes": null,
                                            "hexValue": "30",
                                            "id": 896,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "3050:1:5",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "3038:13:5"
                                    },
                                    "loopExpression": {
                                        "expression": {
                                            "argumentTypes": null,
                                            "id": 903,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "++",
                                            "prefix": false,
                                            "src": "3081:3:5",
                                            "subExpression": {
                                                "argumentTypes": null,
                                                "id": 902,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 895,
                                                "src": "3081:1:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 904,
                                        "nodeType": "ExpressionStatement",
                                        "src": "3081:3:5"
                                    },
                                    "nodeType": "ForStatement",
                                    "src": "3033:229:5"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 930,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 863,
                                                "src": "3295:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 931,
                                                "name": "newRelayWorkers",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 858,
                                                "src": "3309:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                    "typeString": "address[] calldata"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 932,
                                                    "name": "workerCount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 754,
                                                    "src": "3326:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                        "typeString": "mapping(address => uint256)"
                                                    }
                                                },
                                                "id": 934,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 933,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 863,
                                                    "src": "3338:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "3326:25:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                    "typeString": "address[] calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 929,
                                            "name": "RelayWorkersAdded",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3380,
                                            "src": "3277:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address[] memory,uint256)"
                                            }
                                        },
                                        "id": 935,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3277:75:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 936,
                                    "nodeType": "EmitStatement",
                                    "src": "3272:80:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "c2da0786",
                        "id": 938,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "addRelayWorkers",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 860,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2684:8:5"
                        },
                        "parameters": {
                            "id": 859,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 858,
                                    "mutability": "mutable",
                                    "name": "newRelayWorkers",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 938,
                                    "src": "2639:34:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                        "typeString": "address[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 856,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2639:7:5",
                                            "stateMutability": "nonpayable",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "id": 857,
                                        "length": null,
                                        "nodeType": "ArrayTypeName",
                                        "src": "2639:9:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                            "typeString": "address[]"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2638:36:5"
                        },
                        "returnParameters": {
                            "id": 861,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2693:0:5"
                        },
                        "scope": 1878,
                        "src": "2614:745:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3468
                        ],
                        "body": {
                            "id": 974,
                            "nodeType": "Block",
                            "src": "3425:225:5",
                            "statements": [
                                {
                                    "assignments": [
                                        945
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 945,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 974,
                                            "src": "3435:14:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 944,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3435:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 948,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "expression": {
                                            "argumentTypes": null,
                                            "id": 946,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -15,
                                            "src": "3452:3:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                            }
                                        },
                                        "id": 947,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "value",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "3452:9:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3435:26:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 952,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 950,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 945,
                                                    "src": "3479:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 951,
                                                    "name": "maximumRecipientDeposit",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 726,
                                                    "src": "3489:23:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "3479:33:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6465706f73697420746f6f20626967",
                                                "id": 953,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3514:17:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_506396ef765804f70def85c51caf8719b4ef1454fc9835f7f8f316845f414c1a",
                                                    "typeString": "literal_string \"deposit too big\""
                                                },
                                                "value": "deposit too big"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_506396ef765804f70def85c51caf8719b4ef1454fc9835f7f8f316845f414c1a",
                                                    "typeString": "literal_string \"deposit too big\""
                                                }
                                            ],
                                            "id": 949,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "3471:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 954,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3471:61:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 955,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3471:61:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 965,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 956,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 758,
                                                "src": "3543:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 958,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 957,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 940,
                                                "src": "3552:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "3543:16:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "id": 963,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 945,
                                                    "src": "3583:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 959,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 758,
                                                        "src": "3562:8:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 961,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 960,
                                                        "name": "target",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 940,
                                                        "src": "3571:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "3562:16:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 962,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "add",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6594,
                                                "src": "3562:20:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                }
                                            },
                                            "id": 964,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3562:28:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3543:47:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 966,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3543:47:5"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 968,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 940,
                                                "src": "3616:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 969,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "3624:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 970,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "3624:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 971,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 945,
                                                "src": "3636:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 967,
                                            "name": "Deposited",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3396,
                                            "src": "3606:9:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 972,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3606:37:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 973,
                                    "nodeType": "EmitStatement",
                                    "src": "3601:42:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "aa67c919",
                        "id": 975,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "depositFor",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 942,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3408:8:5"
                        },
                        "parameters": {
                            "id": 941,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 940,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 975,
                                    "src": "3385:14:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 939,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3385:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3384:16:5"
                        },
                        "returnParameters": {
                            "id": 943,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3425:0:5"
                        },
                        "scope": 1878,
                        "src": "3365:285:5",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3529
                        ],
                        "body": {
                            "id": 987,
                            "nodeType": "Block",
                            "src": "3732:40:5",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 983,
                                            "name": "balances",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 758,
                                            "src": "3749:8:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 985,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 984,
                                            "name": "target",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 977,
                                            "src": "3758:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "3749:16:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 982,
                                    "id": 986,
                                    "nodeType": "Return",
                                    "src": "3742:23:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "70a08231",
                        "id": 988,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "balanceOf",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 979,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3700:8:5"
                        },
                        "parameters": {
                            "id": 978,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 977,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 988,
                                    "src": "3675:14:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 976,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3675:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3674:16:5"
                        },
                        "returnParameters": {
                            "id": 982,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 981,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 988,
                                    "src": "3723:7:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 980,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3723:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3722:9:5"
                        },
                        "scope": 1878,
                        "src": "3656:116:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3475
                        ],
                        "body": {
                            "id": 1033,
                            "nodeType": "Block",
                            "src": "3850:260:5",
                            "statements": [
                                {
                                    "assignments": [
                                        997
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 997,
                                            "mutability": "mutable",
                                            "name": "account",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 1033,
                                            "src": "3860:23:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            },
                                            "typeName": {
                                                "id": 996,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3860:15:5",
                                                "stateMutability": "payable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1000,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "expression": {
                                            "argumentTypes": null,
                                            "id": 998,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -15,
                                            "src": "3886:3:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                            }
                                        },
                                        "id": 999,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "3886:10:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3860:36:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1006,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1002,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 758,
                                                        "src": "3914:8:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 1004,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1003,
                                                        "name": "account",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 997,
                                                        "src": "3923:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "3914:17:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1005,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 990,
                                                    "src": "3935:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "3914:27:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "696e73756666696369656e742066756e6473",
                                                "id": 1007,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3943:20:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_c6bc4f5b747fbbc581777f92b42c6eac56dbbb4e624c68b8c1a6001ff2001fc5",
                                                    "typeString": "literal_string \"insufficient funds\""
                                                },
                                                "value": "insufficient funds"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_c6bc4f5b747fbbc581777f92b42c6eac56dbbb4e624c68b8c1a6001ff2001fc5",
                                                    "typeString": "literal_string \"insufficient funds\""
                                                }
                                            ],
                                            "id": 1001,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "3906:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1008,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3906:58:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1009,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3906:58:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1019,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 1010,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 758,
                                                "src": "3975:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 1012,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 1011,
                                                "name": "account",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 997,
                                                "src": "3984:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "3975:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "id": 1017,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 990,
                                                    "src": "4017:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1013,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 758,
                                                        "src": "3995:8:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 1015,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1014,
                                                        "name": "account",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 997,
                                                        "src": "4004:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "3995:17:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 1016,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sub",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6611,
                                                "src": "3995:21:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                }
                                            },
                                            "id": 1018,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3995:29:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3975:49:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1020,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3975:49:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1024,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 990,
                                                "src": "4048:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1021,
                                                "name": "dest",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 992,
                                                "src": "4034:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "id": 1023,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "transfer",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "4034:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                                "typeString": "function (uint256)"
                                            }
                                        },
                                        "id": 1025,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4034:21:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1026,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4034:21:5"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1028,
                                                "name": "account",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 997,
                                                "src": "4081:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 1029,
                                                "name": "dest",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 992,
                                                "src": "4090:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 1030,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 990,
                                                "src": "4096:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 1027,
                                            "name": "Withdrawn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3388,
                                            "src": "4071:9:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 1031,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4071:32:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1032,
                                    "nodeType": "EmitStatement",
                                    "src": "4066:37:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "00f714ce",
                        "id": 1034,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdraw",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 994,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3841:8:5"
                        },
                        "parameters": {
                            "id": 993,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 990,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1034,
                                    "src": "3796:14:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 989,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3796:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 992,
                                    "mutability": "mutable",
                                    "name": "dest",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1034,
                                    "src": "3812:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 991,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3812:15:5",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3795:38:5"
                        },
                        "returnParameters": {
                            "id": 995,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3850:0:5"
                        },
                        "scope": 1878,
                        "src": "3778:332:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 1110,
                            "nodeType": "Block",
                            "src": "4371:1135:5",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1057,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 1047,
                                            "name": "gasLimits",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1043,
                                            "src": "4381:9:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                "typeString": "struct IPaymaster.GasLimits memory"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [],
                                            "expression": {
                                                "argumentTypes": [],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1049,
                                                                        "name": "relayRequest",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1038,
                                                                        "src": "4416:12:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                        }
                                                                    },
                                                                    "id": 1050,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayData",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 3231,
                                                                    "src": "4416:22:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                    }
                                                                },
                                                                "id": 1051,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "paymaster",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 3220,
                                                                "src": "4416:32:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            ],
                                                            "id": 1048,
                                                            "name": "IPaymaster",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3310,
                                                            "src": "4405:10:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IPaymaster_$3310_$",
                                                                "typeString": "type(contract IPaymaster)"
                                                            }
                                                        },
                                                        "id": 1052,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4405:44:5",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IPaymaster_$3310",
                                                            "typeString": "contract IPaymaster"
                                                        }
                                                    },
                                                    "id": 1053,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "getGasLimits",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3259,
                                                    "src": "4405:57:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_external_view$__$returns$_t_struct$_GasLimits_$3253_memory_ptr_$",
                                                        "typeString": "function () view external returns (struct IPaymaster.GasLimits memory)"
                                                    }
                                                },
                                                "id": 1055,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "names": [
                                                    "gas"
                                                ],
                                                "nodeType": "FunctionCallOptions",
                                                "options": [
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "3530303030",
                                                        "id": 1054,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "4467:5:5",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_50000_by_1",
                                                            "typeString": "int_const 50000"
                                                        },
                                                        "value": "50000"
                                                    }
                                                ],
                                                "src": "4405:68:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_view$__$returns$_t_struct$_GasLimits_$3253_memory_ptr_$gas",
                                                    "typeString": "function () view external returns (struct IPaymaster.GasLimits memory)"
                                                }
                                            },
                                            "id": 1056,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "4405:70:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                "typeString": "struct IPaymaster.GasLimits memory"
                                            }
                                        },
                                        "src": "4381:94:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                            "typeString": "struct IPaymaster.GasLimits memory"
                                        }
                                    },
                                    "id": 1058,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4381:94:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1063,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1060,
                                                    "name": "paymasterMaxAcceptanceBudget",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1036,
                                                    "src": "4494:28:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1061,
                                                        "name": "gasLimits",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1043,
                                                        "src": "4526:9:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                            "typeString": "struct IPaymaster.GasLimits memory"
                                                        }
                                                    },
                                                    "id": 1062,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "acceptanceBudget",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3248,
                                                    "src": "4526:26:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "4494:58:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "756e6578706563746564206869676820616363657074616e6365427564676574",
                                                "id": 1064,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4554:34:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_49b1ce0b68c58b3a30a8d784e41887ebdc50fb871feede781a4b90e1a4d586f7",
                                                    "typeString": "literal_string \"unexpected high acceptanceBudget\""
                                                },
                                                "value": "unexpected high acceptanceBudget"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_49b1ce0b68c58b3a30a8d784e41887ebdc50fb871feede781a4b90e1a4d586f7",
                                                    "typeString": "literal_string \"unexpected high acceptanceBudget\""
                                                }
                                            ],
                                            "id": 1059,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "4486:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1065,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4486:103:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1066,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4486:103:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1082,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 1067,
                                            "name": "maxPossibleGas",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1045,
                                            "src": "4600:14:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1078,
                                                            "name": "relayRequest",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1038,
                                                            "src": "4761:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            }
                                                        },
                                                        "id": 1079,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "request",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3229,
                                                        "src": "4761:20:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_calldata_ptr",
                                                            "typeString": "struct IForwarder.ForwardRequest calldata"
                                                        }
                                                    },
                                                    "id": 1080,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "gas",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 2945,
                                                    "src": "4761:24:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1074,
                                                                "name": "gasLimits",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1043,
                                                                "src": "4709:9:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                                    "typeString": "struct IPaymaster.GasLimits memory"
                                                                }
                                                            },
                                                            "id": 1075,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "postRelayedCallGasLimit",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3252,
                                                            "src": "4709:33:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1070,
                                                                        "name": "gasLimits",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1043,
                                                                        "src": "4658:9:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                                            "typeString": "struct IPaymaster.GasLimits memory"
                                                                        }
                                                                    },
                                                                    "id": 1071,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "preRelayedCallGasLimit",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 3250,
                                                                    "src": "4658:32:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "id": 1068,
                                                                    "name": "gasOverhead",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 729,
                                                                    "src": "4629:11:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "id": 1069,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "add",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 6594,
                                                                "src": "4629:15:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                                }
                                                            },
                                                            "id": 1072,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "4629:62:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "id": 1073,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "add",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 6594,
                                                        "src": "4629:66:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                        }
                                                    },
                                                    "id": 1076,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "4629:114:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 1077,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "add",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6594,
                                                "src": "4629:118:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                }
                                            },
                                            "id": 1081,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "4629:157:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "4600:186:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1083,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4600:186:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1087,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1085,
                                                    "name": "initialGas",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1040,
                                                    "src": "4989:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1086,
                                                    "name": "maxPossibleGas",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1045,
                                                    "src": "5003:14:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "4989:28:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "4e6f7420656e6f75676820676173206c65667420666f7220696e6e657252656c617943616c6c20746f20636f6d706c657465",
                                                "id": 1088,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5031:52:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_501b7723a73318066ae227251da124e20338d3dd46fb7fabaf05a1255af8c763",
                                                    "typeString": "literal_string \"Not enough gas left for innerRelayCall to complete\""
                                                },
                                                "value": "Not enough gas left for innerRelayCall to complete"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_501b7723a73318066ae227251da124e20338d3dd46fb7fabaf05a1255af8c763",
                                                    "typeString": "literal_string \"Not enough gas left for innerRelayCall to complete\""
                                                }
                                            ],
                                            "id": 1084,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "4968:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1089,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4968:116:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1090,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4968:116:5"
                                },
                                {
                                    "assignments": [
                                        1092
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1092,
                                            "mutability": "mutable",
                                            "name": "maxPossibleCharge",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 1110,
                                            "src": "5095:25:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 1091,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5095:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1098,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1094,
                                                "name": "maxPossibleGas",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1045,
                                                "src": "5152:14:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 1095,
                                                    "name": "relayRequest",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1038,
                                                    "src": "5180:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    }
                                                },
                                                "id": 1096,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "relayData",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3231,
                                                "src": "5180:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            ],
                                            "id": 1093,
                                            "name": "calculateCharge",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1793,
                                            "src": "5123:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_struct$_RelayData_$3227_calldata_ptr_$returns$_t_uint256_$",
                                                "typeString": "function (uint256,struct GsnTypes.RelayData calldata) view returns (uint256)"
                                            }
                                        },
                                        "id": 1097,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5123:89:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5095:117:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1106,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1100,
                                                    "name": "maxPossibleCharge",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1092,
                                                    "src": "5394:17:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1101,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 758,
                                                        "src": "5415:8:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 1105,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1102,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1038,
                                                                "src": "5424:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 1103,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayData",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3231,
                                                            "src": "5424:22:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayData calldata"
                                                            }
                                                        },
                                                        "id": 1104,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "paymaster",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3220,
                                                        "src": "5424:32:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "5415:42:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "5394:63:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "5061796d61737465722062616c616e636520746f6f206c6f77",
                                                "id": 1107,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5471:27:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_df7fcc398e13fae71e43850eb984e7c26a72dbc1d3671abbe30909e226dd9406",
                                                    "typeString": "literal_string \"Paymaster balance too low\""
                                                },
                                                "value": "Paymaster balance too low"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_df7fcc398e13fae71e43850eb984e7c26a72dbc1d3671abbe30909e226dd9406",
                                                    "typeString": "literal_string \"Paymaster balance too low\""
                                                }
                                            ],
                                            "id": 1099,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "5386:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1108,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5386:113:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1109,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5386:113:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 1111,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "verifyGasLimits",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 1041,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1036,
                                    "mutability": "mutable",
                                    "name": "paymasterMaxAcceptanceBudget",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1111,
                                    "src": "4150:36:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1035,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4150:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1038,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1111,
                                    "src": "4196:43:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1037,
                                        "name": "GsnTypes.RelayRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3232,
                                        "src": "4196:21:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1040,
                                    "mutability": "mutable",
                                    "name": "initialGas",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1111,
                                    "src": "4249:18:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1039,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4249:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4140:133:5"
                        },
                        "returnParameters": {
                            "id": 1046,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1043,
                                    "mutability": "mutable",
                                    "name": "gasLimits",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1111,
                                    "src": "4308:37:5",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                        "typeString": "struct IPaymaster.GasLimits"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1042,
                                        "name": "IPaymaster.GasLimits",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3253,
                                        "src": "4308:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasLimits_$3253_storage_ptr",
                                            "typeString": "struct IPaymaster.GasLimits"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1045,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1111,
                                    "src": "4347:22:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1044,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4347:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4307:63:5"
                        },
                        "scope": 1878,
                        "src": "4116:1390:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "private"
                    },
                    {
                        "canonicalName": "RelayHub.RelayCallData",
                        "id": 1132,
                        "members": [
                            {
                                "constant": false,
                                "id": 1113,
                                "mutability": "mutable",
                                "name": "success",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5543:12:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                },
                                "typeName": {
                                    "id": 1112,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5543:4:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1115,
                                "mutability": "mutable",
                                "name": "functionSelector",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5565:23:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                },
                                "typeName": {
                                    "id": 1114,
                                    "name": "bytes4",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5565:6:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1117,
                                "mutability": "mutable",
                                "name": "recipientContext",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5598:22:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1116,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5598:5:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1119,
                                "mutability": "mutable",
                                "name": "relayedCallReturnValue",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5630:28:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1118,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5630:5:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1121,
                                "mutability": "mutable",
                                "name": "gasLimits",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5668:30:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GasLimits_$3253_storage_ptr",
                                    "typeString": "struct IPaymaster.GasLimits"
                                },
                                "typeName": {
                                    "contractScope": null,
                                    "id": 1120,
                                    "name": "IPaymaster.GasLimits",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 3253,
                                    "src": "5668:20:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GasLimits_$3253_storage_ptr",
                                        "typeString": "struct IPaymaster.GasLimits"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1123,
                                "mutability": "mutable",
                                "name": "status",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5708:22:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                },
                                "typeName": {
                                    "contractScope": null,
                                    "id": 1122,
                                    "name": "RelayCallStatus",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 3447,
                                    "src": "5708:15:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1125,
                                "mutability": "mutable",
                                "name": "innerGasUsed",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5740:20:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1124,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5740:7:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1127,
                                "mutability": "mutable",
                                "name": "maxPossibleGas",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5770:22:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1126,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5770:7:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1129,
                                "mutability": "mutable",
                                "name": "gasBeforeInner",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5802:22:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1128,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5802:7:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1131,
                                "mutability": "mutable",
                                "name": "retData",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5834:13:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1130,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5834:5:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            }
                        ],
                        "name": "RelayCallData",
                        "nodeType": "StructDefinition",
                        "scope": 1878,
                        "src": "5512:342:5",
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3493
                        ],
                        "body": {
                            "id": 1490,
                            "nodeType": "Block",
                            "src": "6176:3930:5",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "components": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1150,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1138,
                                                "src": "6187:9:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "id": 1151,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "6186:11:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                            "typeString": "bytes calldata"
                                        }
                                    },
                                    "id": 1152,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6186:11:5"
                                },
                                {
                                    "assignments": [
                                        1154
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1154,
                                            "mutability": "mutable",
                                            "name": "vars",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 1490,
                                            "src": "6207:25:5",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                "typeString": "struct RelayHub.RelayCallData"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 1153,
                                                "name": "RelayCallData",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 1132,
                                                "src": "6207:13:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayCallData_$1132_storage_ptr",
                                                    "typeString": "struct RelayHub.RelayCallData"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1155,
                                    "initialValue": null,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "6207:25:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1166,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1156,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1154,
                                                "src": "6242:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                }
                                            },
                                            "id": 1158,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "functionSelector",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1115,
                                            "src": "6242:21:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1161,
                                                            "name": "relayRequest",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1136,
                                                            "src": "6289:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            }
                                                        },
                                                        "id": 1162,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "request",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3229,
                                                        "src": "6289:20:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_calldata_ptr",
                                                            "typeString": "struct IForwarder.ForwardRequest calldata"
                                                        }
                                                    },
                                                    "id": 1163,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "data",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 2949,
                                                    "src": "6289:25:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "hexValue": "30",
                                                    "id": 1164,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "6316:1:5",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 1159,
                                                    "name": "MinLibBytes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5689,
                                                    "src": "6266:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_contract$_MinLibBytes_$5689_$",
                                                        "typeString": "type(library MinLibBytes)"
                                                    }
                                                },
                                                "id": 1160,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "readBytes4",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5688,
                                                "src": "6266:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes4_$",
                                                    "typeString": "function (bytes memory,uint256) pure returns (bytes4)"
                                                }
                                            },
                                            "id": 1165,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "6266:52:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                            }
                                        },
                                        "src": "6242:76:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "id": 1167,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6242:76:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                "id": 1173,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1169,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "6336:3:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 1170,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "6336:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1171,
                                                        "name": "tx",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -26,
                                                        "src": "6350:2:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_transaction",
                                                            "typeString": "tx"
                                                        }
                                                    },
                                                    "id": 1172,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "origin",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "6350:9:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "6336:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "72656c617920776f726b65722063616e6e6f74206265206120736d61727420636f6e7472616374",
                                                "id": 1174,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6361:41:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_5941a735b6d320b436d371063affea6fc5b048702688d9567f06d82cb2064282",
                                                    "typeString": "literal_string \"relay worker cannot be a smart contract\""
                                                },
                                                "value": "relay worker cannot be a smart contract"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_5941a735b6d320b436d371063affea6fc5b048702688d9567f06d82cb2064282",
                                                    "typeString": "literal_string \"relay worker cannot be a smart contract\""
                                                }
                                            ],
                                            "id": 1168,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "6328:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1175,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6328:75:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1176,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6328:75:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 1186,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1178,
                                                        "name": "workerToManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 749,
                                                        "src": "6421:15:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                            "typeString": "mapping(address => address)"
                                                        }
                                                    },
                                                    "id": 1181,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1179,
                                                            "name": "msg",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -15,
                                                            "src": "6437:3:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_message",
                                                                "typeString": "msg"
                                                            }
                                                        },
                                                        "id": 1180,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "sender",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "6437:10:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "6421:27:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "30",
                                                            "id": 1184,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "6460:1:5",
                                                            "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": 1183,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "6452:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 1182,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "6452:7:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 1185,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "6452:10:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "6421:41:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "556e6b6e6f776e2072656c617920776f726b6572",
                                                "id": 1187,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6464:22:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_eed0e9b6d0da987b652b17222b3b1438a69cd35d1622a2548adf0f40e3047c47",
                                                    "typeString": "literal_string \"Unknown relay worker\""
                                                },
                                                "value": "Unknown relay worker"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_eed0e9b6d0da987b652b17222b3b1438a69cd35d1622a2548adf0f40e3047c47",
                                                    "typeString": "literal_string \"Unknown relay worker\""
                                                }
                                            ],
                                            "id": 1177,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "6413:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1188,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6413:74:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1189,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6413:74:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 1196,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1191,
                                                            "name": "relayRequest",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1136,
                                                            "src": "6505:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            }
                                                        },
                                                        "id": 1192,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "relayData",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3231,
                                                        "src": "6505:22:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayData calldata"
                                                        }
                                                    },
                                                    "id": 1193,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayWorker",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3218,
                                                    "src": "6505:34:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1194,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "6543:3:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 1195,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "6543:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "6505:48:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "4e6f74206120726967687420776f726b6572",
                                                "id": 1197,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6555:20:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_ce37613246c89ab281b956f13602a84514f73374c13f132cad59dd1507841eb2",
                                                    "typeString": "literal_string \"Not a right worker\""
                                                },
                                                "value": "Not a right worker"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_ce37613246c89ab281b956f13602a84514f73374c13f132cad59dd1507841eb2",
                                                    "typeString": "literal_string \"Not a right worker\""
                                                }
                                            ],
                                            "id": 1190,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "6497:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1198,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6497:79:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1199,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6497:79:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                            "argumentTypes": null,
                                                            "id": 1202,
                                                            "name": "workerToManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 749,
                                                            "src": "6628:15:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                "typeString": "mapping(address => address)"
                                                            }
                                                        },
                                                        "id": 1205,
                                                        "indexExpression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1203,
                                                                "name": "msg",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -15,
                                                                "src": "6644:3:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_message",
                                                                    "typeString": "msg"
                                                                }
                                                            },
                                                            "id": 1204,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "sender",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "6644:10:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "6628:27:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 1201,
                                                    "name": "isRelayManagerStaked",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1813,
                                                    "src": "6607:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view returns (bool)"
                                                    }
                                                },
                                                "id": 1206,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6607:49:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "72656c6179206d616e61676572206e6f74207374616b6564",
                                                "id": 1207,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6670:26:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                },
                                                "value": "relay manager not staked"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                }
                                            ],
                                            "id": 1200,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "6586:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1208,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6586:120:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1209,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6586:120:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1216,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1211,
                                                            "name": "relayRequest",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1136,
                                                            "src": "6724:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            }
                                                        },
                                                        "id": 1212,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "relayData",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3231,
                                                        "src": "6724:22:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayData calldata"
                                                        }
                                                    },
                                                    "id": 1213,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "gasPrice",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3212,
                                                    "src": "6724:31:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1214,
                                                        "name": "tx",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -26,
                                                        "src": "6759:2:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_transaction",
                                                            "typeString": "tx"
                                                        }
                                                    },
                                                    "id": 1215,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "gasprice",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "6759:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "6724:46:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "496e76616c696420676173207072696365",
                                                "id": 1217,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6772:19:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_4275ac04d780bf08c964f46440b811276a7686db43cb75c6cc307112f0b16871",
                                                    "typeString": "literal_string \"Invalid gas price\""
                                                },
                                                "value": "Invalid gas price"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_4275ac04d780bf08c964f46440b811276a7686db43cb75c6cc307112f0b16871",
                                                    "typeString": "literal_string \"Invalid gas price\""
                                                }
                                            ],
                                            "id": 1210,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "6716:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1218,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6716:76:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1219,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6716:76:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1224,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1221,
                                                    "name": "externalGasLimit",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1142,
                                                    "src": "6810:16:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1222,
                                                        "name": "block",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -4,
                                                        "src": "6830:5:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_block",
                                                            "typeString": "block"
                                                        }
                                                    },
                                                    "id": 1223,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "gaslimit",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "6830:14:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "6810:34:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "496d706f737369626c6520676173206c696d6974",
                                                "id": 1225,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6846:22:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_0dba9dbc8c541cb19a506e0bb8d3e5d1440c9ef9791ea6671fa5f6eca0e96c15",
                                                    "typeString": "literal_string \"Impossible gas limit\""
                                                },
                                                "value": "Impossible gas limit"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_0dba9dbc8c541cb19a506e0bb8d3e5d1440c9ef9791ea6671fa5f6eca0e96c15",
                                                    "typeString": "literal_string \"Impossible gas limit\""
                                                }
                                            ],
                                            "id": 1220,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "6802:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1226,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6802:67:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1227,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6802:67:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1239,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "components": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1228,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1154,
                                                        "src": "6881:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1230,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "gasLimits",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1121,
                                                    "src": "6881:14:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                        "typeString": "struct IPaymaster.GasLimits memory"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1231,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1154,
                                                        "src": "6897:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1232,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "maxPossibleGas",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1127,
                                                    "src": "6897:19:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "id": 1233,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "TupleExpression",
                                            "src": "6880:37:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_struct$_GasLimits_$3253_memory_ptr_$_t_uint256_$",
                                                "typeString": "tuple(struct IPaymaster.GasLimits memory,uint256)"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "id": 1235,
                                                    "name": "paymasterMaxAcceptanceBudget",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1134,
                                                    "src": "6949:28:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "id": 1236,
                                                    "name": "relayRequest",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1136,
                                                    "src": "6979:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "id": 1237,
                                                    "name": "externalGasLimit",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1142,
                                                    "src": "6993:16:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "id": 1234,
                                                "name": "verifyGasLimits",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1111,
                                                "src": "6933:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_struct$_RelayRequest_$3232_calldata_ptr_$_t_uint256_$returns$_t_struct$_GasLimits_$3253_memory_ptr_$_t_uint256_$",
                                                    "typeString": "function (uint256,struct GsnTypes.RelayRequest calldata,uint256) view returns (struct IPaymaster.GasLimits memory,uint256)"
                                                }
                                            },
                                            "id": 1238,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "6933:77:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_struct$_GasLimits_$3253_memory_ptr_$_t_uint256_$",
                                                "typeString": "tuple(struct IPaymaster.GasLimits memory,uint256)"
                                            }
                                        },
                                        "src": "6880:130:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1240,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6880:130:5"
                                },
                                {
                                    "id": 1345,
                                    "nodeType": "Block",
                                    "src": "7017:1302:5",
                                    "statements": [
                                        {
                                            "assignments": [
                                                1242
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1242,
                                                    "mutability": "mutable",
                                                    "name": "innerGasLimit",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1345,
                                                    "src": "7198:21:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "typeName": {
                                                        "id": 1241,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "7198:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1251,
                                            "initialValue": {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1250,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 1248,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "argumentTypes": null,
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 1246,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "argumentTypes": null,
                                                            "arguments": [],
                                                            "expression": {
                                                                "argumentTypes": [],
                                                                "id": 1243,
                                                                "name": "gasleft",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -7,
                                                                "src": "7222:7:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                                    "typeString": "function () view returns (uint256)"
                                                                }
                                                            },
                                                            "id": 1244,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "7222:9:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "*",
                                                        "rightExpression": {
                                                            "argumentTypes": null,
                                                            "hexValue": "3633",
                                                            "id": 1245,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "7232:2:5",
                                                            "subdenomination": null,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_63_by_1",
                                                                "typeString": "int_const 63"
                                                            },
                                                            "value": "63"
                                                        },
                                                        "src": "7222:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "/",
                                                    "rightExpression": {
                                                        "argumentTypes": null,
                                                        "hexValue": "3634",
                                                        "id": 1247,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "7235:2:5",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_64_by_1",
                                                            "typeString": "int_const 64"
                                                        },
                                                        "value": "64"
                                                    },
                                                    "src": "7222:15:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "-",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1249,
                                                    "name": "gasReserve",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 735,
                                                    "src": "7238:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "7222:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "7198:50:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1257,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1252,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1154,
                                                        "src": "7258:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1254,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "gasBeforeInner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1129,
                                                    "src": "7258:19:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "arguments": [],
                                                    "expression": {
                                                        "argumentTypes": [],
                                                        "id": 1255,
                                                        "name": "gasleft",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -7,
                                                        "src": "7280:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                            "typeString": "function () view returns (uint256)"
                                                        }
                                                    },
                                                    "id": 1256,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "7280:9:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "7258:31:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 1258,
                                            "nodeType": "ExpressionStatement",
                                            "src": "7258:31:5"
                                        },
                                        {
                                            "assignments": [
                                                1260
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1260,
                                                    "mutability": "mutable",
                                                    "name": "_tmpInitialGas",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1345,
                                                    "src": "7300:22:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "typeName": {
                                                        "id": 1259,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "7300:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1268,
                                            "initialValue": {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1267,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 1265,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "argumentTypes": null,
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 1263,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "argumentTypes": null,
                                                            "id": 1261,
                                                            "name": "innerGasLimit",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1242,
                                                            "src": "7325:13:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "+",
                                                        "rightExpression": {
                                                            "argumentTypes": null,
                                                            "id": 1262,
                                                            "name": "externalGasLimit",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1142,
                                                            "src": "7341:16:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "src": "7325:32:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1264,
                                                        "name": "gasOverhead",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 729,
                                                        "src": "7360:11:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "7325:46:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "+",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1266,
                                                    "name": "postOverhead",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 732,
                                                    "src": "7374:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "7325:61:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "7300:86:5"
                                        },
                                        {
                                            "assignments": [
                                                1270,
                                                1272
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1270,
                                                    "mutability": "mutable",
                                                    "name": "success",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1345,
                                                    "src": "7655:12:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "typeName": {
                                                        "id": 1269,
                                                        "name": "bool",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "7655:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                },
                                                {
                                                    "constant": false,
                                                    "id": 1272,
                                                    "mutability": "mutable",
                                                    "name": "relayCallStatus",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1345,
                                                    "src": "7669:28:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "memory",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes"
                                                    },
                                                    "typeName": {
                                                        "id": 1271,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "7669:5:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_storage_ptr",
                                                            "typeString": "bytes"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1298,
                                            "initialValue": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1282,
                                                                        "name": "RelayHub",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1878,
                                                                        "src": "7775:8:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_contract$_RelayHub_$1878_$",
                                                                            "typeString": "type(contract RelayHub)"
                                                                        }
                                                                    },
                                                                    "id": 1283,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "innerRelayCall",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1737,
                                                                    "src": "7775:23:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_declaration_nonpayable$_t_struct$_RelayRequest_$3232_calldata_ptr_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$_t_struct$_GasLimits_$3253_calldata_ptr_$_t_uint256_$_t_uint256_$returns$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$",
                                                                        "typeString": "function RelayHub.innerRelayCall(struct GsnTypes.RelayRequest calldata,bytes calldata,bytes calldata,struct IPaymaster.GasLimits calldata,uint256,uint256) returns (enum IRelayHub.RelayCallStatus,bytes memory)"
                                                                    }
                                                                },
                                                                "id": 1284,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "memberName": "selector",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": null,
                                                                "src": "7775:32:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes4",
                                                                    "typeString": "bytes4"
                                                                }
                                                            },
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 1285,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1136,
                                                                "src": "7809:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 1286,
                                                                "name": "signature",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1138,
                                                                "src": "7823:9:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                                    "typeString": "bytes calldata"
                                                                }
                                                            },
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 1287,
                                                                "name": "approvalData",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1140,
                                                                "src": "7834:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                                    "typeString": "bytes calldata"
                                                                }
                                                            },
                                                            {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "id": 1288,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1154,
                                                                    "src": "7848:4:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 1289,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "gasLimits",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1121,
                                                                "src": "7848:14:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                                    "typeString": "struct IPaymaster.GasLimits memory"
                                                                }
                                                            },
                                                            {
                                                                "argumentTypes": null,
                                                                "commonType": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                "id": 1293,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "argumentTypes": null,
                                                                    "id": 1290,
                                                                    "name": "_tmpInitialGas",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1260,
                                                                    "src": "7880:14:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "-",
                                                                "rightExpression": {
                                                                    "argumentTypes": null,
                                                                    "arguments": [],
                                                                    "expression": {
                                                                        "argumentTypes": [],
                                                                        "id": 1291,
                                                                        "name": "gasleft",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": -7,
                                                                        "src": "7897:7:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                                            "typeString": "function () view returns (uint256)"
                                                                        }
                                                                    },
                                                                    "id": 1292,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "kind": "functionCall",
                                                                    "lValueRequested": false,
                                                                    "names": [],
                                                                    "nodeType": "FunctionCall",
                                                                    "src": "7897:9:5",
                                                                    "tryCall": false,
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "src": "7880:26:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "id": 1294,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1154,
                                                                    "src": "7924:4:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 1295,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "maxPossibleGas",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1127,
                                                                "src": "7924:19:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes4",
                                                                    "typeString": "bytes4"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                                    "typeString": "bytes calldata"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                                    "typeString": "bytes calldata"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                                    "typeString": "struct IPaymaster.GasLimits memory"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1280,
                                                                "name": "abi",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -1,
                                                                "src": "7752:3:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_abi",
                                                                    "typeString": "abi"
                                                                }
                                                            },
                                                            "id": 1281,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "encodeWithSelector",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "7752:22:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                                "typeString": "function (bytes4) pure returns (bytes memory)"
                                                            }
                                                        },
                                                        "id": 1296,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "7752:209:5",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "id": 1275,
                                                                    "name": "this",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": -28,
                                                                    "src": "7709:4:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_contract$_RelayHub_$1878",
                                                                        "typeString": "contract RelayHub"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_contract$_RelayHub_$1878",
                                                                        "typeString": "contract RelayHub"
                                                                    }
                                                                ],
                                                                "id": 1274,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "7701:7:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_$",
                                                                    "typeString": "type(address)"
                                                                },
                                                                "typeName": {
                                                                    "id": 1273,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "7701:7:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": null,
                                                                        "typeString": null
                                                                    }
                                                                }
                                                            },
                                                            "id": 1276,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "7701:13:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "id": 1277,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "call",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "7701:18:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 1279,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        "gas"
                                                    ],
                                                    "nodeType": "FunctionCallOptions",
                                                    "options": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1278,
                                                            "name": "innerGasLimit",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1242,
                                                            "src": "7724:13:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "src": "7701:37:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas",
                                                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                    }
                                                },
                                                "id": 1297,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "7701:270:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                    "typeString": "tuple(bool,bytes memory)"
                                                }
                                            },
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "7654:317:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1303,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1299,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1154,
                                                        "src": "7981:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1301,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "success",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1113,
                                                    "src": "7981:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "id": 1302,
                                                    "name": "success",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1270,
                                                    "src": "7996:7:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "7981:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 1304,
                                            "nodeType": "ExpressionStatement",
                                            "src": "7981:22:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1313,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1305,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1154,
                                                        "src": "8013:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1307,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "innerGasUsed",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1125,
                                                    "src": "8013:17:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 1312,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1308,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1154,
                                                            "src": "8033:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 1309,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gasBeforeInner",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1129,
                                                        "src": "8033:19:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "-",
                                                    "rightExpression": {
                                                        "argumentTypes": null,
                                                        "arguments": [],
                                                        "expression": {
                                                            "argumentTypes": [],
                                                            "id": 1310,
                                                            "name": "gasleft",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -7,
                                                            "src": "8053:7:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                                "typeString": "function () view returns (uint256)"
                                                            }
                                                        },
                                                        "id": 1311,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "8053:9:5",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "8033:29:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "8013:49:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 1314,
                                            "nodeType": "ExpressionStatement",
                                            "src": "8013:49:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1329,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1315,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1154,
                                                                "src": "8073:4:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 1317,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "status",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1123,
                                                            "src": "8073:11:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                "typeString": "enum IRelayHub.RelayCallStatus"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1318,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1154,
                                                                "src": "8086:4:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 1319,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "relayedCallReturnValue",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1119,
                                                            "src": "8086:27:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "id": 1320,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "8072:42:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(enum IRelayHub.RelayCallStatus,bytes memory)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1323,
                                                            "name": "relayCallStatus",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1272,
                                                            "src": "8128:15:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "components": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "id": 1324,
                                                                    "name": "RelayCallStatus",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 3447,
                                                                    "src": "8146:15:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                        "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                    }
                                                                },
                                                                {
                                                                    "argumentTypes": null,
                                                                    "id": 1326,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "8163:5:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                        "typeString": "type(bytes storage pointer)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 1325,
                                                                        "name": "bytes",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "8163:5:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": null,
                                                                            "typeString": null
                                                                        }
                                                                    }
                                                                }
                                                            ],
                                                            "id": 1327,
                                                            "isConstant": false,
                                                            "isInlineArray": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "TupleExpression",
                                                            "src": "8145:24:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$_t_type$_t_enum$_RelayCallStatus_$3447_$_$_t_type$_t_bytes_storage_ptr_$_$",
                                                                "typeString": "tuple(type(enum IRelayHub.RelayCallStatus),type(bytes storage pointer))"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_tuple$_t_type$_t_enum$_RelayCallStatus_$3447_$_$_t_type$_t_bytes_storage_ptr_$_$",
                                                                "typeString": "tuple(type(enum IRelayHub.RelayCallStatus),type(bytes storage pointer))"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1321,
                                                            "name": "abi",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -1,
                                                            "src": "8117:3:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_abi",
                                                                "typeString": "abi"
                                                            }
                                                        },
                                                        "id": 1322,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "decode",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "8117:10:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                            "typeString": "function () pure"
                                                        }
                                                    },
                                                    "id": 1328,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "8117:53:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(enum IRelayHub.RelayCallStatus,bytes memory)"
                                                    }
                                                },
                                                "src": "8072:98:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 1330,
                                            "nodeType": "ExpressionStatement",
                                            "src": "8072:98:5"
                                        },
                                        {
                                            "condition": {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1335,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1331,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1154,
                                                            "src": "8185:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 1332,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "relayedCallReturnValue",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1119,
                                                        "src": "8185:27:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    },
                                                    "id": 1333,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "8185:34:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "30",
                                                    "id": 1334,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "8220:1:5",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "8185:36:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "falseBody": null,
                                            "id": 1344,
                                            "nodeType": "IfStatement",
                                            "src": "8180:133:5",
                                            "trueBody": {
                                                "id": 1343,
                                                "nodeType": "Block",
                                                "src": "8224:89:5",
                                                "statements": [
                                                    {
                                                        "eventCall": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1337,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1154,
                                                                        "src": "8261:4:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 1338,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "status",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1123,
                                                                    "src": "8261:11:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1339,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1154,
                                                                        "src": "8274:4:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 1340,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayedCallReturnValue",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1119,
                                                                    "src": "8274:27:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 1336,
                                                                "name": "TransactionResult",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3439,
                                                                "src": "8243:17:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_event_nonpayable$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory)"
                                                                }
                                                            },
                                                            "id": 1341,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "8243:59:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 1342,
                                                        "nodeType": "EmitStatement",
                                                        "src": "8238:64:5"
                                                    }
                                                ]
                                            }
                                        }
                                    ]
                                },
                                {
                                    "id": 1489,
                                    "nodeType": "Block",
                                    "src": "8324:1776:5",
                                    "statements": [
                                        {
                                            "condition": {
                                                "argumentTypes": null,
                                                "id": 1348,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "8338:13:5",
                                                "subExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1346,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1154,
                                                        "src": "8339:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1347,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "success",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1113,
                                                    "src": "8339:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "falseBody": null,
                                            "id": 1411,
                                            "nodeType": "IfStatement",
                                            "src": "8334:987:5",
                                            "trueBody": {
                                                "id": 1410,
                                                "nodeType": "Block",
                                                "src": "8353:968:5",
                                                "statements": [
                                                    {
                                                        "condition": {
                                                            "argumentTypes": null,
                                                            "commonType": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            "id": 1374,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "argumentTypes": null,
                                                                "components": [
                                                                    {
                                                                        "argumentTypes": null,
                                                                        "commonType": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        },
                                                                        "id": 1354,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "leftExpression": {
                                                                            "argumentTypes": null,
                                                                            "expression": {
                                                                                "argumentTypes": null,
                                                                                "id": 1349,
                                                                                "name": "vars",
                                                                                "nodeType": "Identifier",
                                                                                "overloadedDeclarations": [],
                                                                                "referencedDeclaration": 1154,
                                                                                "src": "8426:4:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                                }
                                                                            },
                                                                            "id": 1350,
                                                                            "isConstant": false,
                                                                            "isLValue": true,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "memberName": "innerGasUsed",
                                                                            "nodeType": "MemberAccess",
                                                                            "referencedDeclaration": 1125,
                                                                            "src": "8426:17:5",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_uint256",
                                                                                "typeString": "uint256"
                                                                            }
                                                                        },
                                                                        "nodeType": "BinaryOperation",
                                                                        "operator": "<",
                                                                        "rightExpression": {
                                                                            "argumentTypes": null,
                                                                            "expression": {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1351,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 1154,
                                                                                    "src": "8446:4:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 1352,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "gasLimits",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1121,
                                                                                "src": "8446:14:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                                                    "typeString": "struct IPaymaster.GasLimits memory"
                                                                                }
                                                                            },
                                                                            "id": 1353,
                                                                            "isConstant": false,
                                                                            "isLValue": true,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "memberName": "acceptanceBudget",
                                                                            "nodeType": "MemberAccess",
                                                                            "referencedDeclaration": 3248,
                                                                            "src": "8446:31:5",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_uint256",
                                                                                "typeString": "uint256"
                                                                            }
                                                                        },
                                                                        "src": "8426:51:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_bool",
                                                                            "typeString": "bool"
                                                                        }
                                                                    }
                                                                ],
                                                                "id": 1355,
                                                                "isConstant": false,
                                                                "isInlineArray": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "TupleExpression",
                                                                "src": "8425:54:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "&&",
                                                            "rightExpression": {
                                                                "argumentTypes": null,
                                                                "components": [
                                                                    {
                                                                        "argumentTypes": null,
                                                                        "commonType": {
                                                                            "typeIdentifier": "t_bool",
                                                                            "typeString": "bool"
                                                                        },
                                                                        "id": 1372,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "leftExpression": {
                                                                            "argumentTypes": null,
                                                                            "commonType": {
                                                                                "typeIdentifier": "t_bool",
                                                                                "typeString": "bool"
                                                                            },
                                                                            "id": 1366,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "leftExpression": {
                                                                                "argumentTypes": null,
                                                                                "commonType": {
                                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                },
                                                                                "id": 1360,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "leftExpression": {
                                                                                    "argumentTypes": null,
                                                                                    "expression": {
                                                                                        "argumentTypes": null,
                                                                                        "id": 1356,
                                                                                        "name": "vars",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 1154,
                                                                                        "src": "8505:4:5",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                                        }
                                                                                    },
                                                                                    "id": 1357,
                                                                                    "isConstant": false,
                                                                                    "isLValue": true,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "status",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 1123,
                                                                                    "src": "8505:11:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                    }
                                                                                },
                                                                                "nodeType": "BinaryOperation",
                                                                                "operator": "==",
                                                                                "rightExpression": {
                                                                                    "argumentTypes": null,
                                                                                    "expression": {
                                                                                        "argumentTypes": null,
                                                                                        "id": 1358,
                                                                                        "name": "RelayCallStatus",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 3447,
                                                                                        "src": "8520:15:5",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                                        }
                                                                                    },
                                                                                    "id": 1359,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": true,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "RejectedByPreRelayed",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": null,
                                                                                    "src": "8520:36:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                    }
                                                                                },
                                                                                "src": "8505:51:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bool",
                                                                                    "typeString": "bool"
                                                                                }
                                                                            },
                                                                            "nodeType": "BinaryOperation",
                                                                            "operator": "||",
                                                                            "rightExpression": {
                                                                                "argumentTypes": null,
                                                                                "commonType": {
                                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                },
                                                                                "id": 1365,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "leftExpression": {
                                                                                    "argumentTypes": null,
                                                                                    "expression": {
                                                                                        "argumentTypes": null,
                                                                                        "id": 1361,
                                                                                        "name": "vars",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 1154,
                                                                                        "src": "8580:4:5",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                                        }
                                                                                    },
                                                                                    "id": 1362,
                                                                                    "isConstant": false,
                                                                                    "isLValue": true,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "status",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 1123,
                                                                                    "src": "8580:11:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                    }
                                                                                },
                                                                                "nodeType": "BinaryOperation",
                                                                                "operator": "==",
                                                                                "rightExpression": {
                                                                                    "argumentTypes": null,
                                                                                    "expression": {
                                                                                        "argumentTypes": null,
                                                                                        "id": 1363,
                                                                                        "name": "RelayCallStatus",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 3447,
                                                                                        "src": "8595:15:5",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                                        }
                                                                                    },
                                                                                    "id": 1364,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": true,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "RejectedByForwarder",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": null,
                                                                                    "src": "8595:35:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                    }
                                                                                },
                                                                                "src": "8580:50:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bool",
                                                                                    "typeString": "bool"
                                                                                }
                                                                            },
                                                                            "src": "8505:125:5",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_bool",
                                                                                "typeString": "bool"
                                                                            }
                                                                        },
                                                                        "nodeType": "BinaryOperation",
                                                                        "operator": "||",
                                                                        "rightExpression": {
                                                                            "argumentTypes": null,
                                                                            "commonType": {
                                                                                "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                "typeString": "enum IRelayHub.RelayCallStatus"
                                                                            },
                                                                            "id": 1371,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "leftExpression": {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1367,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 1154,
                                                                                    "src": "8654:4:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 1368,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "status",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1123,
                                                                                "src": "8654:11:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                }
                                                                            },
                                                                            "nodeType": "BinaryOperation",
                                                                            "operator": "==",
                                                                            "rightExpression": {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1369,
                                                                                    "name": "RelayCallStatus",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 3447,
                                                                                    "src": "8669:15:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                                        "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                                    }
                                                                                },
                                                                                "id": 1370,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": true,
                                                                                "lValueRequested": false,
                                                                                "memberName": "RejectedByRecipientRevert",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": null,
                                                                                "src": "8669:41:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                }
                                                                            },
                                                                            "src": "8654:56:5",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_bool",
                                                                                "typeString": "bool"
                                                                            }
                                                                        },
                                                                        "src": "8505:205:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_bool",
                                                                            "typeString": "bool"
                                                                        }
                                                                    }
                                                                ],
                                                                "id": 1373,
                                                                "isConstant": false,
                                                                "isInlineArray": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "TupleExpression",
                                                                "src": "8483:296:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "src": "8425:354:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        "falseBody": null,
                                                        "id": 1409,
                                                        "nodeType": "IfStatement",
                                                        "src": "8420:891:5",
                                                        "trueBody": {
                                                            "id": 1408,
                                                            "nodeType": "Block",
                                                            "src": "8781:530:5",
                                                            "statements": [
                                                                {
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1377,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "leftHandSide": {
                                                                            "argumentTypes": null,
                                                                            "id": 1375,
                                                                            "name": "paymasterAccepted",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 1146,
                                                                            "src": "8799:17:5",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_bool",
                                                                                "typeString": "bool"
                                                                            }
                                                                        },
                                                                        "nodeType": "Assignment",
                                                                        "operator": "=",
                                                                        "rightHandSide": {
                                                                            "argumentTypes": null,
                                                                            "hexValue": "66616c7365",
                                                                            "id": 1376,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "kind": "bool",
                                                                            "lValueRequested": false,
                                                                            "nodeType": "Literal",
                                                                            "src": "8817:5:5",
                                                                            "subdenomination": null,
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_bool",
                                                                                "typeString": "bool"
                                                                            },
                                                                            "value": "false"
                                                                        },
                                                                        "src": "8799:23:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_bool",
                                                                            "typeString": "bool"
                                                                        }
                                                                    },
                                                                    "id": 1378,
                                                                    "nodeType": "ExpressionStatement",
                                                                    "src": "8799:23:5"
                                                                },
                                                                {
                                                                    "eventCall": {
                                                                        "argumentTypes": null,
                                                                        "arguments": [
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "baseExpression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1380,
                                                                                    "name": "workerToManager",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 749,
                                                                                    "src": "8898:15:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                                        "typeString": "mapping(address => address)"
                                                                                    }
                                                                                },
                                                                                "id": 1383,
                                                                                "indexExpression": {
                                                                                    "argumentTypes": null,
                                                                                    "expression": {
                                                                                        "argumentTypes": null,
                                                                                        "id": 1381,
                                                                                        "name": "msg",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": -15,
                                                                                        "src": "8914:3:5",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_magic_message",
                                                                                            "typeString": "msg"
                                                                                        }
                                                                                    },
                                                                                    "id": 1382,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "sender",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": null,
                                                                                    "src": "8914:10:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_address_payable",
                                                                                        "typeString": "address payable"
                                                                                    }
                                                                                },
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "nodeType": "IndexAccess",
                                                                                "src": "8898:27:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "expression": {
                                                                                        "argumentTypes": null,
                                                                                        "id": 1384,
                                                                                        "name": "relayRequest",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 1136,
                                                                                        "src": "8947:12:5",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                                        }
                                                                                    },
                                                                                    "id": 1385,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "relayData",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 3231,
                                                                                    "src": "8947:22:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                                    }
                                                                                },
                                                                                "id": 1386,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "paymaster",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 3220,
                                                                                "src": "8947:32:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "expression": {
                                                                                        "argumentTypes": null,
                                                                                        "id": 1387,
                                                                                        "name": "relayRequest",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 1136,
                                                                                        "src": "9001:12:5",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                                        }
                                                                                    },
                                                                                    "id": 1388,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "request",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 3229,
                                                                                    "src": "9001:20:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_calldata_ptr",
                                                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                                    }
                                                                                },
                                                                                "id": 1389,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "from",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 2939,
                                                                                "src": "9001:25:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "expression": {
                                                                                        "argumentTypes": null,
                                                                                        "id": 1390,
                                                                                        "name": "relayRequest",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 1136,
                                                                                        "src": "9048:12:5",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                                        }
                                                                                    },
                                                                                    "id": 1391,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "request",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 3229,
                                                                                    "src": "9048:20:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_calldata_ptr",
                                                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                                    }
                                                                                },
                                                                                "id": 1392,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "to",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 2941,
                                                                                "src": "9048:23:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1393,
                                                                                    "name": "msg",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": -15,
                                                                                    "src": "9093:3:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_magic_message",
                                                                                        "typeString": "msg"
                                                                                    }
                                                                                },
                                                                                "id": 1394,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "sender",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": null,
                                                                                "src": "9093:10:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address_payable",
                                                                                    "typeString": "address payable"
                                                                                }
                                                                            },
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1395,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 1154,
                                                                                    "src": "9125:4:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 1396,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "functionSelector",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1115,
                                                                                "src": "9125:21:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bytes4",
                                                                                    "typeString": "bytes4"
                                                                                }
                                                                            },
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1397,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 1154,
                                                                                    "src": "9168:4:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 1398,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "innerGasUsed",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1125,
                                                                                "src": "9168:17:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            },
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1399,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 1154,
                                                                                    "src": "9207:4:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 1400,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "relayedCallReturnValue",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1119,
                                                                                "src": "9207:27:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                                    "typeString": "bytes memory"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "expression": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_address_payable",
                                                                                    "typeString": "address payable"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_bytes4",
                                                                                    "typeString": "bytes4"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                                    "typeString": "bytes memory"
                                                                                }
                                                                            ],
                                                                            "id": 1379,
                                                                            "name": "TransactionRejectedByPaymaster",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 3415,
                                                                            "src": "8846:30:5",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_bytes4_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                                                                                "typeString": "function (address,address,address,address,address,bytes4,uint256,bytes memory)"
                                                                            }
                                                                        },
                                                                        "id": 1401,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "kind": "functionCall",
                                                                        "lValueRequested": false,
                                                                        "names": [],
                                                                        "nodeType": "FunctionCall",
                                                                        "src": "8846:389:5",
                                                                        "tryCall": false,
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_tuple$__$",
                                                                            "typeString": "tuple()"
                                                                        }
                                                                    },
                                                                    "id": 1402,
                                                                    "nodeType": "EmitStatement",
                                                                    "src": "8841:394:5"
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "components": [
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "hexValue": "66616c7365",
                                                                                "id": 1403,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": true,
                                                                                "kind": "bool",
                                                                                "lValueRequested": false,
                                                                                "nodeType": "Literal",
                                                                                "src": "9261:5:5",
                                                                                "subdenomination": null,
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bool",
                                                                                    "typeString": "bool"
                                                                                },
                                                                                "value": "false"
                                                                            },
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1404,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 1154,
                                                                                    "src": "9268:4:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 1405,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "relayedCallReturnValue",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1119,
                                                                                "src": "9268:27:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                                    "typeString": "bytes memory"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "id": 1406,
                                                                        "isConstant": false,
                                                                        "isInlineArray": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "nodeType": "TupleExpression",
                                                                        "src": "9260:36:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                                            "typeString": "tuple(bool,bytes memory)"
                                                                        }
                                                                    },
                                                                    "functionReturnParameters": 1149,
                                                                    "id": 1407,
                                                                    "nodeType": "Return",
                                                                    "src": "9253:43:5"
                                                                }
                                                            ]
                                                        }
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            "assignments": [
                                                1413
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1413,
                                                    "mutability": "mutable",
                                                    "name": "gasUsed",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1489,
                                                    "src": "9418:15:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "typeName": {
                                                        "id": 1412,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "9418:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1421,
                                            "initialValue": {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1420,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                        {
                                                            "argumentTypes": null,
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 1417,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "argumentTypes": null,
                                                                "id": 1414,
                                                                "name": "externalGasLimit",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1142,
                                                                "src": "9437:16:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "-",
                                                            "rightExpression": {
                                                                "argumentTypes": null,
                                                                "arguments": [],
                                                                "expression": {
                                                                    "argumentTypes": [],
                                                                    "id": 1415,
                                                                    "name": "gasleft",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": -7,
                                                                    "src": "9456:7:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                                        "typeString": "function () view returns (uint256)"
                                                                    }
                                                                },
                                                                "id": 1416,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "9456:9:5",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "src": "9437:28:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "id": 1418,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "9436:30:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "+",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1419,
                                                    "name": "gasOverhead",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 729,
                                                    "src": "9469:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "9436:44:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "9418:62:5"
                                        },
                                        {
                                            "assignments": [
                                                1423
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1423,
                                                    "mutability": "mutable",
                                                    "name": "charge",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1489,
                                                    "src": "9490:14:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "typeName": {
                                                        "id": 1422,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "9490:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1429,
                                            "initialValue": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 1425,
                                                        "name": "gasUsed",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1413,
                                                        "src": "9523:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1426,
                                                            "name": "relayRequest",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1136,
                                                            "src": "9532:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            }
                                                        },
                                                        "id": 1427,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "relayData",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3231,
                                                        "src": "9532:22:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayData calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayData calldata"
                                                        }
                                                    ],
                                                    "id": 1424,
                                                    "name": "calculateCharge",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1793,
                                                    "src": "9507:15:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_struct$_RelayData_$3227_calldata_ptr_$returns$_t_uint256_$",
                                                        "typeString": "function (uint256,struct GsnTypes.RelayData calldata) view returns (uint256)"
                                                    }
                                                },
                                                "id": 1428,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "9507:48:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "9490:65:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1443,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1430,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 758,
                                                        "src": "9566:8:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 1434,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1431,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1136,
                                                                "src": "9575:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 1432,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayData",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3231,
                                                            "src": "9575:22:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayData calldata"
                                                            }
                                                        },
                                                        "id": 1433,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "paymaster",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3220,
                                                        "src": "9575:32:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "IndexAccess",
                                                    "src": "9566:42:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1441,
                                                            "name": "charge",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1423,
                                                            "src": "9658:6:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "baseExpression": {
                                                                "argumentTypes": null,
                                                                "id": 1435,
                                                                "name": "balances",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 758,
                                                                "src": "9611:8:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                    "typeString": "mapping(address => uint256)"
                                                                }
                                                            },
                                                            "id": 1439,
                                                            "indexExpression": {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1436,
                                                                        "name": "relayRequest",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1136,
                                                                        "src": "9620:12:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                        }
                                                                    },
                                                                    "id": 1437,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayData",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 3231,
                                                                    "src": "9620:22:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                    }
                                                                },
                                                                "id": 1438,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "paymaster",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 3220,
                                                                "src": "9620:32:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "9611:42:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "id": 1440,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "sub",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 6611,
                                                        "src": "9611:46:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                        }
                                                    },
                                                    "id": 1442,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "9611:54:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "9566:99:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 1444,
                                            "nodeType": "ExpressionStatement",
                                            "src": "9566:99:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1460,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1445,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 758,
                                                        "src": "9675:8:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 1450,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                            "argumentTypes": null,
                                                            "id": 1446,
                                                            "name": "workerToManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 749,
                                                            "src": "9684:15:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                "typeString": "mapping(address => address)"
                                                            }
                                                        },
                                                        "id": 1449,
                                                        "indexExpression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1447,
                                                                "name": "msg",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -15,
                                                                "src": "9700:3:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_message",
                                                                    "typeString": "msg"
                                                                }
                                                            },
                                                            "id": 1448,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "sender",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "9700:10:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "9684:27:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "IndexAccess",
                                                    "src": "9675:37:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1458,
                                                            "name": "charge",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1423,
                                                            "src": "9757:6:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "baseExpression": {
                                                                "argumentTypes": null,
                                                                "id": 1451,
                                                                "name": "balances",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 758,
                                                                "src": "9715:8:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                    "typeString": "mapping(address => uint256)"
                                                                }
                                                            },
                                                            "id": 1456,
                                                            "indexExpression": {
                                                                "argumentTypes": null,
                                                                "baseExpression": {
                                                                    "argumentTypes": null,
                                                                    "id": 1452,
                                                                    "name": "workerToManager",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 749,
                                                                    "src": "9724:15:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                        "typeString": "mapping(address => address)"
                                                                    }
                                                                },
                                                                "id": 1455,
                                                                "indexExpression": {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1453,
                                                                        "name": "msg",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": -15,
                                                                        "src": "9740:3:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_magic_message",
                                                                            "typeString": "msg"
                                                                        }
                                                                    },
                                                                    "id": 1454,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "sender",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": null,
                                                                    "src": "9740:10:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_address_payable",
                                                                        "typeString": "address payable"
                                                                    }
                                                                },
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "IndexAccess",
                                                                "src": "9724:27:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "9715:37:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "id": 1457,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "add",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 6594,
                                                        "src": "9715:41:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                        }
                                                    },
                                                    "id": 1459,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "9715:49:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "9675:89:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 1461,
                                            "nodeType": "ExpressionStatement",
                                            "src": "9675:89:5"
                                        },
                                        {
                                            "eventCall": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                            "argumentTypes": null,
                                                            "id": 1463,
                                                            "name": "workerToManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 749,
                                                            "src": "9812:15:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                "typeString": "mapping(address => address)"
                                                            }
                                                        },
                                                        "id": 1466,
                                                        "indexExpression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1464,
                                                                "name": "msg",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -15,
                                                                "src": "9828:3:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_message",
                                                                    "typeString": "msg"
                                                                }
                                                            },
                                                            "id": 1465,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "sender",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "9828:10:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "9812:27:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1467,
                                                            "name": "msg",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -15,
                                                            "src": "9853:3:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_message",
                                                                "typeString": "msg"
                                                            }
                                                        },
                                                        "id": 1468,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "sender",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "9853:10:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1469,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1136,
                                                                "src": "9877:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 1470,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "request",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3229,
                                                            "src": "9877:20:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 1471,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "from",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2939,
                                                        "src": "9877:25:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1472,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1136,
                                                                "src": "9916:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 1473,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "request",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3229,
                                                            "src": "9916:20:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 1474,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "to",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2941,
                                                        "src": "9916:23:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1475,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1136,
                                                                "src": "9953:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 1476,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayData",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3231,
                                                            "src": "9953:22:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayData calldata"
                                                            }
                                                        },
                                                        "id": 1477,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "paymaster",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3220,
                                                        "src": "9953:32:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1478,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1154,
                                                            "src": "9999:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 1479,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "functionSelector",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1115,
                                                        "src": "9999:21:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1480,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1154,
                                                            "src": "10034:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 1481,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "status",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1123,
                                                        "src": "10034:11:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 1482,
                                                        "name": "charge",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1423,
                                                        "src": "10059:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "id": 1462,
                                                    "name": "TransactionRelayed",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3433,
                                                    "src": "9780:18:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_bytes4_$_t_enum$_RelayCallStatus_$3447_$_t_uint256_$returns$__$",
                                                        "typeString": "function (address,address,address,address,address,bytes4,enum IRelayHub.RelayCallStatus,uint256)"
                                                    }
                                                },
                                                "id": 1483,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "9780:286:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 1484,
                                            "nodeType": "EmitStatement",
                                            "src": "9775:291:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "components": [
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "74727565",
                                                        "id": 1485,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "bool",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "10084:4:5",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        },
                                                        "value": "true"
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "",
                                                        "id": 1486,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "10090:2:5",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                            "typeString": "literal_string \"\""
                                                        },
                                                        "value": ""
                                                    }
                                                ],
                                                "id": 1487,
                                                "isConstant": false,
                                                "isInlineArray": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "TupleExpression",
                                                "src": "10083:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$_t_bool_$_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_$",
                                                    "typeString": "tuple(bool,literal_string \"\")"
                                                }
                                            },
                                            "functionReturnParameters": 1149,
                                            "id": 1488,
                                            "nodeType": "Return",
                                            "src": "10076:17:5"
                                        }
                                    ]
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "27b4256a",
                        "id": 1491,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "relayCall",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1144,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "6100:8:5"
                        },
                        "parameters": {
                            "id": 1143,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1134,
                                    "mutability": "mutable",
                                    "name": "paymasterMaxAcceptanceBudget",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1491,
                                    "src": "5888:33:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1133,
                                        "name": "uint",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5888:4:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1136,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1491,
                                    "src": "5931:43:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1135,
                                        "name": "GsnTypes.RelayRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3232,
                                        "src": "5931:21:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1138,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1491,
                                    "src": "5984:24:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1137,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5984:5:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1140,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1491,
                                    "src": "6018:27:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1139,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6018:5:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1142,
                                    "mutability": "mutable",
                                    "name": "externalGasLimit",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1491,
                                    "src": "6055:21:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1141,
                                        "name": "uint",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6055:4:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5878:204:5"
                        },
                        "returnParameters": {
                            "id": 1149,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1146,
                                    "mutability": "mutable",
                                    "name": "paymasterAccepted",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1491,
                                    "src": "6122:22:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 1145,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6122:4:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1148,
                                    "mutability": "mutable",
                                    "name": "returnValue",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1491,
                                    "src": "6146:24:5",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1147,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6146:5:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6121:50:5"
                        },
                        "scope": 1878,
                        "src": "5860:4246:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "canonicalName": "RelayHub.InnerRelayCallData",
                        "id": 1506,
                        "members": [
                            {
                                "constant": false,
                                "id": 1493,
                                "mutability": "mutable",
                                "name": "balanceBefore",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1506,
                                "src": "10148:21:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1492,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10148:7:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1495,
                                "mutability": "mutable",
                                "name": "preReturnValue",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1506,
                                "src": "10179:22:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                },
                                "typeName": {
                                    "id": 1494,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10179:7:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1497,
                                "mutability": "mutable",
                                "name": "relayedCallSuccess",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1506,
                                "src": "10211:23:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                },
                                "typeName": {
                                    "id": 1496,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10211:4:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1499,
                                "mutability": "mutable",
                                "name": "relayedCallReturnValue",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1506,
                                "src": "10244:28:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1498,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10244:5:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1501,
                                "mutability": "mutable",
                                "name": "recipientContext",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1506,
                                "src": "10282:22:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1500,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10282:5:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1503,
                                "mutability": "mutable",
                                "name": "data",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1506,
                                "src": "10314:10:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1502,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10314:5:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1505,
                                "mutability": "mutable",
                                "name": "rejectOnRecipientRevert",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1506,
                                "src": "10334:28:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                },
                                "typeName": {
                                    "id": 1504,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10334:4:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            }
                        ],
                        "name": "InnerRelayCallData",
                        "nodeType": "StructDefinition",
                        "scope": 1878,
                        "src": "10112:257:5",
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 1736,
                            "nodeType": "Block",
                            "src": "10704:3601:5",
                            "statements": [
                                {
                                    "assignments": [
                                        1526
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1526,
                                            "mutability": "mutable",
                                            "name": "vars",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 1736,
                                            "src": "10714:30:5",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                "typeString": "struct RelayHub.InnerRelayCallData"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 1525,
                                                "name": "InnerRelayCallData",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 1506,
                                                "src": "10714:18:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_storage_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1527,
                                    "initialValue": null,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "10714:30:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 1535,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1529,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "11172:3:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 1530,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "11172:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1533,
                                                            "name": "this",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -28,
                                                            "src": "11194:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_RelayHub_$1878",
                                                                "typeString": "contract RelayHub"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_contract$_RelayHub_$1878",
                                                                "typeString": "contract RelayHub"
                                                            }
                                                        ],
                                                        "id": 1532,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "11186:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 1531,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "11186:7:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 1534,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "11186:13:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "11172:27:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "4f6e6c792052656c61794875622073686f756c642063616c6c20746869732066756e6374696f6e",
                                                "id": 1536,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11201:41:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2f3778b0cbc3f3aaa4b72bdce294e5d98b204a5d103af0bd759eae414f007819",
                                                    "typeString": "literal_string \"Only RelayHub should call this function\""
                                                },
                                                "value": "Only RelayHub should call this function"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2f3778b0cbc3f3aaa4b72bdce294e5d98b204a5d103af0bd759eae414f007819",
                                                    "typeString": "literal_string \"Only RelayHub should call this function\""
                                                }
                                            ],
                                            "id": 1528,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "11164:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1537,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11164:79:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1538,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11164:79:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1547,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1539,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1526,
                                                "src": "11642:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 1541,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "balanceBefore",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1493,
                                            "src": "11642:18:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 1542,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 758,
                                                "src": "11663:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 1546,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1543,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1508,
                                                        "src": "11672:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 1544,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3231,
                                                    "src": "11672:22:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 1545,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "paymaster",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3220,
                                                "src": "11672:32:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "11663:42:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "11642:63:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1548,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11642:63:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1562,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1549,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1526,
                                                "src": "11835:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 1551,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "data",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1503,
                                            "src": "11835:9:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1554,
                                                            "name": "IPaymaster",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3310,
                                                            "src": "11883:10:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IPaymaster_$3310_$",
                                                                "typeString": "type(contract IPaymaster)"
                                                            }
                                                        },
                                                        "id": 1555,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "preRelayedCall",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3292,
                                                        "src": "11883:25:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_declaration_nonpayable$_t_struct$_RelayRequest_$3232_calldata_ptr_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$_t_bool_$",
                                                            "typeString": "function IPaymaster.preRelayedCall(struct GsnTypes.RelayRequest calldata,bytes calldata,bytes calldata,uint256) returns (bytes memory,bool)"
                                                        }
                                                    },
                                                    "id": 1556,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "selector",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "11883:34:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "id": 1557,
                                                    "name": "relayRequest",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1508,
                                                    "src": "11935:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "id": 1558,
                                                    "name": "signature",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1510,
                                                    "src": "11949:9:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "id": 1559,
                                                    "name": "approvalData",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1512,
                                                    "src": "11960:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "id": 1560,
                                                    "name": "maxPossibleGas",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1518,
                                                    "src": "11974:14:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 1552,
                                                    "name": "abi",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -1,
                                                    "src": "11847:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_abi",
                                                        "typeString": "abi"
                                                    }
                                                },
                                                "id": 1553,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "encodeWithSelector",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "11847:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                    "typeString": "function (bytes4) pure returns (bytes memory)"
                                                }
                                            },
                                            "id": 1561,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "11847:151:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                            }
                                        },
                                        "src": "11835:163:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "id": 1563,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11835:163:5"
                                },
                                {
                                    "id": 1618,
                                    "nodeType": "Block",
                                    "src": "12008:477:5",
                                    "statements": [
                                        {
                                            "assignments": [
                                                1565
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1565,
                                                    "mutability": "mutable",
                                                    "name": "success",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1618,
                                                    "src": "12022:12:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "typeName": {
                                                        "id": 1564,
                                                        "name": "bool",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "12022:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1566,
                                            "initialValue": null,
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "12022:12:5"
                                        },
                                        {
                                            "assignments": [
                                                1568
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1568,
                                                    "mutability": "mutable",
                                                    "name": "retData",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1618,
                                                    "src": "12048:20:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "memory",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes"
                                                    },
                                                    "typeName": {
                                                        "id": 1567,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "12048:5:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_storage_ptr",
                                                            "typeString": "bytes"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1569,
                                            "initialValue": null,
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "12048:20:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1583,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1570,
                                                            "name": "success",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1565,
                                                            "src": "12083:7:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1571,
                                                            "name": "retData",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1568,
                                                            "src": "12092:7:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "id": 1572,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "12082:18:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bytes memory)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1580,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1526,
                                                                "src": "12179:4:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 1581,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "data",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1503,
                                                            "src": "12179:9:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1573,
                                                                        "name": "relayRequest",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1508,
                                                                        "src": "12103:12:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                        }
                                                                    },
                                                                    "id": 1574,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayData",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 3231,
                                                                    "src": "12103:22:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                    }
                                                                },
                                                                "id": 1575,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "paymaster",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 3220,
                                                                "src": "12103:32:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "id": 1576,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "call",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "12103:37:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                            }
                                                        },
                                                        "id": 1579,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "names": [
                                                            "gas"
                                                        ],
                                                        "nodeType": "FunctionCallOptions",
                                                        "options": [
                                                            {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "id": 1577,
                                                                    "name": "gasLimits",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1514,
                                                                    "src": "12145:9:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_GasLimits_$3253_calldata_ptr",
                                                                        "typeString": "struct IPaymaster.GasLimits calldata"
                                                                    }
                                                                },
                                                                "id": 1578,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "preRelayedCallGasLimit",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 3250,
                                                                "src": "12145:32:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "src": "12103:75:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas",
                                                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 1582,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "12103:86:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bytes memory)"
                                                    }
                                                },
                                                "src": "12082:107:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 1584,
                                            "nodeType": "ExpressionStatement",
                                            "src": "12082:107:5"
                                        },
                                        {
                                            "condition": {
                                                "argumentTypes": null,
                                                "id": 1586,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "12207:8:5",
                                                "subExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1585,
                                                    "name": "success",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1565,
                                                    "src": "12208:7:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "falseBody": null,
                                            "id": 1600,
                                            "nodeType": "IfStatement",
                                            "src": "12203:169:5",
                                            "trueBody": {
                                                "id": 1599,
                                                "nodeType": "Block",
                                                "src": "12217:155:5",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "id": 1590,
                                                                    "name": "retData",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1568,
                                                                    "src": "12268:7:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "id": 1587,
                                                                    "name": "GsnEip712Library",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 5527,
                                                                    "src": "12235:16:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_contract$_GsnEip712Library_$5527_$",
                                                                        "typeString": "type(library GsnEip712Library)"
                                                                    }
                                                                },
                                                                "id": 1589,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "truncateInPlace",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 5435,
                                                                "src": "12235:32:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 1591,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "12235:41:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 1592,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "12235:41:5"
                                                    },
                                                    {
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1594,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 3447,
                                                                        "src": "12311:15:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 1595,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "RejectedByPreRelayed",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": null,
                                                                    "src": "12311:36:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "argumentTypes": null,
                                                                    "id": 1596,
                                                                    "name": "retData",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1568,
                                                                    "src": "12349:7:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 1593,
                                                                "name": "revertWithStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1761,
                                                                "src": "12294:16:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 1597,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "12294:63:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 1598,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "12294:63:5"
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1616,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1601,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1526,
                                                                "src": "12386:4:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 1603,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "recipientContext",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1501,
                                                            "src": "12386:21:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1604,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1526,
                                                                "src": "12409:4:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 1605,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "rejectOnRecipientRevert",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1505,
                                                            "src": "12409:28:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        }
                                                    ],
                                                    "id": 1606,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "12385:53:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_bool_$",
                                                        "typeString": "tuple(bytes memory,bool)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1609,
                                                            "name": "retData",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1568,
                                                            "src": "12452:7:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "components": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "id": 1611,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "12462:5:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                        "typeString": "type(bytes storage pointer)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 1610,
                                                                        "name": "bytes",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "12462:5:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": null,
                                                                            "typeString": null
                                                                        }
                                                                    }
                                                                },
                                                                {
                                                                    "argumentTypes": null,
                                                                    "id": 1613,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "12468:4:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_bool_$",
                                                                        "typeString": "type(bool)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 1612,
                                                                        "name": "bool",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "12468:4:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": null,
                                                                            "typeString": null
                                                                        }
                                                                    }
                                                                }
                                                            ],
                                                            "id": 1614,
                                                            "isConstant": false,
                                                            "isInlineArray": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "TupleExpression",
                                                            "src": "12461:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_bool_$_$",
                                                                "typeString": "tuple(type(bytes storage pointer),type(bool))"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_tuple$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_bool_$_$",
                                                                "typeString": "tuple(type(bytes storage pointer),type(bool))"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1607,
                                                            "name": "abi",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -1,
                                                            "src": "12441:3:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_abi",
                                                                "typeString": "abi"
                                                            }
                                                        },
                                                        "id": 1608,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "decode",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "12441:10:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                            "typeString": "function () pure"
                                                        }
                                                    },
                                                    "id": 1615,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "12441:33:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_bool_$",
                                                        "typeString": "tuple(bytes memory,bool)"
                                                    }
                                                },
                                                "src": "12385:89:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 1617,
                                            "nodeType": "ExpressionStatement",
                                            "src": "12385:89:5"
                                        }
                                    ]
                                },
                                {
                                    "id": 1661,
                                    "nodeType": "Block",
                                    "src": "12616:597:5",
                                    "statements": [
                                        {
                                            "assignments": [
                                                1620
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1620,
                                                    "mutability": "mutable",
                                                    "name": "forwarderSuccess",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1661,
                                                    "src": "12630:21:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "typeName": {
                                                        "id": 1619,
                                                        "name": "bool",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "12630:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1621,
                                            "initialValue": null,
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "12630:21:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1633,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1622,
                                                            "name": "forwarderSuccess",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1620,
                                                            "src": "12666:16:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1623,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1526,
                                                                "src": "12684:4:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 1624,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "relayedCallSuccess",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1497,
                                                            "src": "12684:23:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1625,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1526,
                                                                "src": "12709:4:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 1626,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "relayedCallReturnValue",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1499,
                                                            "src": "12709:27:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "id": 1627,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "12665:72:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bool,bytes memory)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1630,
                                                            "name": "relayRequest",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1508,
                                                            "src": "12765:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1631,
                                                            "name": "signature",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1510,
                                                            "src": "12779:9:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_calldata_ptr",
                                                                "typeString": "bytes calldata"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_bytes_calldata_ptr",
                                                                "typeString": "bytes calldata"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1628,
                                                            "name": "GsnEip712Library",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5527,
                                                            "src": "12740:16:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_GsnEip712Library_$5527_$",
                                                                "typeString": "type(library GsnEip712Library)"
                                                            }
                                                        },
                                                        "id": 1629,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "execute",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5422,
                                                        "src": "12740:24:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_RelayRequest_$3232_calldata_ptr_$_t_bytes_calldata_ptr_$returns$_t_bool_$_t_bool_$_t_bytes_memory_ptr_$",
                                                            "typeString": "function (struct GsnTypes.RelayRequest calldata,bytes calldata) returns (bool,bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 1632,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "12740:49:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bool,bytes memory)"
                                                    }
                                                },
                                                "src": "12665:124:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 1634,
                                            "nodeType": "ExpressionStatement",
                                            "src": "12665:124:5"
                                        },
                                        {
                                            "condition": {
                                                "argumentTypes": null,
                                                "id": 1636,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "12808:17:5",
                                                "subExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1635,
                                                    "name": "forwarderSuccess",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1620,
                                                    "src": "12809:16:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "falseBody": null,
                                            "id": 1645,
                                            "nodeType": "IfStatement",
                                            "src": "12803:140:5",
                                            "trueBody": {
                                                "id": 1644,
                                                "nodeType": "Block",
                                                "src": "12828:115:5",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1638,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 3447,
                                                                        "src": "12863:15:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 1639,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "RejectedByForwarder",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": null,
                                                                    "src": "12863:35:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1640,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1526,
                                                                        "src": "12900:4:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 1641,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayedCallReturnValue",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1499,
                                                                    "src": "12900:27:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 1637,
                                                                "name": "revertWithStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1761,
                                                                "src": "12846:16:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 1642,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "12846:82:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 1643,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "12846:82:5"
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            "condition": {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 1651,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1646,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1526,
                                                        "src": "12961:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1647,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "rejectOnRecipientRevert",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1505,
                                                    "src": "12961:28:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "&&",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1650,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "UnaryOperation",
                                                    "operator": "!",
                                                    "prefix": true,
                                                    "src": "12993:24:5",
                                                    "subExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1648,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1526,
                                                            "src": "12994:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                            }
                                                        },
                                                        "id": 1649,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "relayedCallSuccess",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1497,
                                                        "src": "12994:23:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "12961:56:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "falseBody": null,
                                            "id": 1660,
                                            "nodeType": "IfStatement",
                                            "src": "12957:246:5",
                                            "trueBody": {
                                                "id": 1659,
                                                "nodeType": "Block",
                                                "src": "13019:184:5",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1653,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 3447,
                                                                        "src": "13117:15:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 1654,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "RejectedByRecipientRevert",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": null,
                                                                    "src": "13117:41:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1655,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1526,
                                                                        "src": "13160:4:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 1656,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayedCallReturnValue",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1499,
                                                                    "src": "13160:27:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 1652,
                                                                "name": "revertWithStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1761,
                                                                "src": "13100:16:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 1657,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "13100:88:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 1658,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "13100:88:5"
                                                    }
                                                ]
                                            }
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1681,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1662,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1526,
                                                "src": "13475:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 1664,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "data",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1503,
                                            "src": "13475:9:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1667,
                                                            "name": "IPaymaster",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3310,
                                                            "src": "13523:10:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IPaymaster_$3310_$",
                                                                "typeString": "type(contract IPaymaster)"
                                                            }
                                                        },
                                                        "id": 1668,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "postRelayedCall",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3304,
                                                        "src": "13523:26:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_declaration_nonpayable$_t_bytes_calldata_ptr_$_t_bool_$_t_uint256_$_t_struct$_RelayData_$3227_calldata_ptr_$returns$__$",
                                                            "typeString": "function IPaymaster.postRelayedCall(bytes calldata,bool,uint256,struct GsnTypes.RelayData calldata)"
                                                        }
                                                    },
                                                    "id": 1669,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "selector",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "13523:35:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1670,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1526,
                                                        "src": "13572:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1671,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "recipientContext",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1501,
                                                    "src": "13572:21:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1672,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1526,
                                                        "src": "13607:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1673,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayedCallSuccess",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1497,
                                                    "src": "13607:23:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 1677,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1674,
                                                        "name": "totalInitialGas",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1516,
                                                        "src": "13644:15:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "-",
                                                    "rightExpression": {
                                                        "argumentTypes": null,
                                                        "arguments": [],
                                                        "expression": {
                                                            "argumentTypes": [],
                                                            "id": 1675,
                                                            "name": "gasleft",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -7,
                                                            "src": "13662:7:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                                "typeString": "function () view returns (uint256)"
                                                            }
                                                        },
                                                        "id": 1676,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "13662:9:5",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "13644:27:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1678,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1508,
                                                        "src": "13707:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 1679,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3231,
                                                    "src": "13707:22:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 1665,
                                                    "name": "abi",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -1,
                                                    "src": "13487:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_abi",
                                                        "typeString": "abi"
                                                    }
                                                },
                                                "id": 1666,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "encodeWithSelector",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "13487:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                    "typeString": "function (bytes4) pure returns (bytes memory)"
                                                }
                                            },
                                            "id": 1680,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "13487:252:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                            }
                                        },
                                        "src": "13475:264:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "id": 1682,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13475:264:5"
                                },
                                {
                                    "id": 1708,
                                    "nodeType": "Block",
                                    "src": "13750:255:5",
                                    "statements": [
                                        {
                                            "assignments": [
                                                1684,
                                                1686
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1684,
                                                    "mutability": "mutable",
                                                    "name": "successPost",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1708,
                                                    "src": "13761:16:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "typeName": {
                                                        "id": 1683,
                                                        "name": "bool",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "13761:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                },
                                                {
                                                    "constant": false,
                                                    "id": 1686,
                                                    "mutability": "mutable",
                                                    "name": "ret",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1708,
                                                    "src": "13778:16:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "memory",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes"
                                                    },
                                                    "typeName": {
                                                        "id": 1685,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "13778:5:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_storage_ptr",
                                                            "typeString": "bytes"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1697,
                                            "initialValue": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1694,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1526,
                                                            "src": "13875:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                            }
                                                        },
                                                        "id": 1695,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "data",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1503,
                                                        "src": "13875:9:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "id": 1687,
                                                                    "name": "relayRequest",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1508,
                                                                    "src": "13798:12:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                    }
                                                                },
                                                                "id": 1688,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayData",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 3231,
                                                                "src": "13798:22:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                                }
                                                            },
                                                            "id": 1689,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "paymaster",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3220,
                                                            "src": "13798:32:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "id": 1690,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "call",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "13798:37:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 1693,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        "gas"
                                                    ],
                                                    "nodeType": "FunctionCallOptions",
                                                    "options": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1691,
                                                                "name": "gasLimits",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1514,
                                                                "src": "13840:9:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_GasLimits_$3253_calldata_ptr",
                                                                    "typeString": "struct IPaymaster.GasLimits calldata"
                                                                }
                                                            },
                                                            "id": 1692,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "postRelayedCallGasLimit",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3252,
                                                            "src": "13840:33:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "src": "13798:76:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas",
                                                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                    }
                                                },
                                                "id": 1696,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "13798:87:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                    "typeString": "tuple(bool,bytes memory)"
                                                }
                                            },
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "13760:125:5"
                                        },
                                        {
                                            "condition": {
                                                "argumentTypes": null,
                                                "id": 1699,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "13900:12:5",
                                                "subExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1698,
                                                    "name": "successPost",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1684,
                                                    "src": "13901:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "falseBody": null,
                                            "id": 1707,
                                            "nodeType": "IfStatement",
                                            "src": "13896:99:5",
                                            "trueBody": {
                                                "id": 1706,
                                                "nodeType": "Block",
                                                "src": "13914:81:5",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1701,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 3447,
                                                                        "src": "13945:15:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 1702,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "PostRelayedFailed",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": null,
                                                                    "src": "13945:33:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "argumentTypes": null,
                                                                    "id": 1703,
                                                                    "name": "ret",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1686,
                                                                    "src": "13980:3:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 1700,
                                                                "name": "revertWithStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1761,
                                                                "src": "13928:16:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 1704,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "13928:56:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 1705,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "13928:56:5"
                                                    }
                                                ]
                                            }
                                        }
                                    ]
                                },
                                {
                                    "condition": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 1716,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 1709,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 758,
                                                "src": "14019:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 1713,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1710,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1508,
                                                        "src": "14028:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 1711,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3231,
                                                    "src": "14028:22:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 1712,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "paymaster",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3220,
                                                "src": "14028:32:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "14019:42:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1714,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1526,
                                                "src": "14064:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 1715,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "balanceBefore",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1493,
                                            "src": "14064:18:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "14019:63:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "falseBody": null,
                                    "id": 1724,
                                    "nodeType": "IfStatement",
                                    "src": "14015:155:5",
                                    "trueBody": {
                                        "id": 1723,
                                        "nodeType": "Block",
                                        "src": "14084:86:5",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1718,
                                                                "name": "RelayCallStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3447,
                                                                "src": "14115:15:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                    "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                }
                                                            },
                                                            "id": 1719,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "PaymasterBalanceChanged",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "14115:39:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                "typeString": "enum IRelayHub.RelayCallStatus"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "",
                                                            "id": 1720,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "14156:2:5",
                                                            "subdenomination": null,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                                "typeString": "literal_string \"\""
                                                            },
                                                            "value": ""
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                "typeString": "enum IRelayHub.RelayCallStatus"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                                "typeString": "literal_string \"\""
                                                            }
                                                        ],
                                                        "id": 1717,
                                                        "name": "revertWithStatus",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1761,
                                                        "src": "14098:16:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$returns$__$",
                                                            "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                        }
                                                    },
                                                    "id": 1721,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "14098:61:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 1722,
                                                "nodeType": "ExpressionStatement",
                                                "src": "14098:61:5"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "components": [
                                            {
                                                "argumentTypes": null,
                                                "condition": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1725,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1526,
                                                        "src": "14188:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1726,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayedCallSuccess",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1497,
                                                    "src": "14188:23:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "falseExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1729,
                                                        "name": "RelayCallStatus",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3447,
                                                        "src": "14235:15:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                        }
                                                    },
                                                    "id": 1730,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "RelayedCallFailed",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "14235:33:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                    }
                                                },
                                                "id": 1731,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "Conditional",
                                                "src": "14188:80:5",
                                                "trueExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1727,
                                                        "name": "RelayCallStatus",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3447,
                                                        "src": "14214:15:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                        }
                                                    },
                                                    "id": 1728,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "OK",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "14214:18:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 1732,
                                                    "name": "vars",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1526,
                                                    "src": "14270:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                        "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                    }
                                                },
                                                "id": 1733,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "relayedCallReturnValue",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 1499,
                                                "src": "14270:27:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "id": 1734,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "14187:111:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(enum IRelayHub.RelayCallStatus,bytes memory)"
                                        }
                                    },
                                    "functionReturnParameters": 1524,
                                    "id": 1735,
                                    "nodeType": "Return",
                                    "src": "14180:118:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "fbb44607",
                        "id": 1737,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "innerRelayCall",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 1519,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1508,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1737,
                                    "src": "10408:43:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1507,
                                        "name": "GsnTypes.RelayRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3232,
                                        "src": "10408:21:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1510,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1737,
                                    "src": "10461:24:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1509,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10461:5:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1512,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1737,
                                    "src": "10495:27:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1511,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10495:5:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1514,
                                    "mutability": "mutable",
                                    "name": "gasLimits",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1737,
                                    "src": "10532:39:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GasLimits_$3253_calldata_ptr",
                                        "typeString": "struct IPaymaster.GasLimits"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1513,
                                        "name": "IPaymaster.GasLimits",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3253,
                                        "src": "10532:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasLimits_$3253_storage_ptr",
                                            "typeString": "struct IPaymaster.GasLimits"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1516,
                                    "mutability": "mutable",
                                    "name": "totalInitialGas",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1737,
                                    "src": "10581:23:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1515,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10581:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1518,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1737,
                                    "src": "10614:22:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1517,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10614:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10398:244:5"
                        },
                        "returnParameters": {
                            "id": 1524,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1521,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1737,
                                    "src": "10669:15:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1520,
                                        "name": "RelayCallStatus",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3447,
                                        "src": "10669:15:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1523,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1737,
                                    "src": "10686:12:5",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1522,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10686:5:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10668:31:5"
                        },
                        "scope": 1878,
                        "src": "10375:3930:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 1760,
                            "nodeType": "Block",
                            "src": "14533:258:5",
                            "statements": [
                                {
                                    "assignments": [
                                        1746
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1746,
                                            "mutability": "mutable",
                                            "name": "data",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 1760,
                                            "src": "14543:17:5",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 1745,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "14543:5:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1752,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1749,
                                                "name": "status",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1740,
                                                "src": "14574:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 1750,
                                                "name": "ret",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1742,
                                                "src": "14582:3:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1747,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -1,
                                                "src": "14563:3:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 1748,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encode",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "14563:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 1751,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "14563:23:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "14543:43:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1756,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1746,
                                                "src": "14629:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1753,
                                                "name": "GsnEip712Library",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5527,
                                                "src": "14596:16:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_GsnEip712Library_$5527_$",
                                                    "typeString": "type(library GsnEip712Library)"
                                                }
                                            },
                                            "id": 1755,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "truncateInPlace",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5435,
                                            "src": "14596:32:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes memory) pure"
                                            }
                                        },
                                        "id": 1757,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "14596:38:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1758,
                                    "nodeType": "ExpressionStatement",
                                    "src": "14596:38:5"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "14654:131:5",
                                        "statements": [
                                            {
                                                "nodeType": "YulVariableDeclaration",
                                                "src": "14668:27:5",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "name": "data",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "14690:4:5"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "mload",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "14684:5:5"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "14684:11:5"
                                                },
                                                "variables": [
                                                    {
                                                        "name": "dataSize",
                                                        "nodeType": "YulTypedName",
                                                        "src": "14672:8:5",
                                                        "type": ""
                                                    }
                                                ]
                                            },
                                            {
                                                "nodeType": "YulVariableDeclaration",
                                                "src": "14708:28:5",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "name": "data",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "14727:4:5"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "14733:2:5",
                                                            "type": "",
                                                            "value": "32"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "add",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "14723:3:5"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "14723:13:5"
                                                },
                                                "variables": [
                                                    {
                                                        "name": "dataPtr",
                                                        "nodeType": "YulTypedName",
                                                        "src": "14712:7:5",
                                                        "type": ""
                                                    }
                                                ]
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "name": "dataPtr",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "14757:7:5"
                                                        },
                                                        {
                                                            "name": "dataSize",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "14766:8:5"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "revert",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "14750:6:5"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "14750:25:5"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "14750:25:5"
                                            }
                                        ]
                                    },
                                    "evmVersion": "istanbul",
                                    "externalReferences": [
                                        {
                                            "declaration": 1746,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "14690:4:5",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 1746,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "14727:4:5",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 1759,
                                    "nodeType": "InlineAssembly",
                                    "src": "14645:140:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1738,
                            "nodeType": "StructuredDocumentation",
                            "src": "14311:136:5",
                            "text": " @dev Reverts the transaction with return data set to the ABI encoding of the status argument (and revert reason data)"
                        },
                        "id": 1761,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "revertWithStatus",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 1743,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1740,
                                    "mutability": "mutable",
                                    "name": "status",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1761,
                                    "src": "14478:22:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1739,
                                        "name": "RelayCallStatus",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3447,
                                        "src": "14478:15:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1742,
                                    "mutability": "mutable",
                                    "name": "ret",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1761,
                                    "src": "14502:16:5",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1741,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14502:5:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14477:42:5"
                        },
                        "returnParameters": {
                            "id": 1744,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "14533:0:5"
                        },
                        "scope": 1878,
                        "src": "14452:339:5",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "private"
                    },
                    {
                        "baseFunctions": [
                            3510
                        ],
                        "body": {
                            "id": 1792,
                            "nodeType": "Block",
                            "src": "14925:242:5",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "313030",
                                                        "id": 1788,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "15155:3:5",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_100_by_1",
                                                            "typeString": "int_const 100"
                                                        },
                                                        "value": "100"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_rational_100_by_1",
                                                            "typeString": "int_const 100"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "components": [
                                                            {
                                                                "argumentTypes": null,
                                                                "arguments": [
                                                                    {
                                                                        "argumentTypes": null,
                                                                        "arguments": [
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "hexValue": "313030",
                                                                                "id": 1783,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": true,
                                                                                "kind": "number",
                                                                                "lValueRequested": false,
                                                                                "nodeType": "Literal",
                                                                                "src": "15144:3:5",
                                                                                "subdenomination": null,
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_rational_100_by_1",
                                                                                    "typeString": "int_const 100"
                                                                                },
                                                                                "value": "100"
                                                                            }
                                                                        ],
                                                                        "expression": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_rational_100_by_1",
                                                                                    "typeString": "int_const 100"
                                                                                }
                                                                            ],
                                                                            "expression": {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1780,
                                                                                    "name": "relayData",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 1765,
                                                                                    "src": "15118:9:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                                    }
                                                                                },
                                                                                "id": 1781,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "pctRelayFee",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 3214,
                                                                                "src": "15118:21:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            },
                                                                            "id": 1782,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "memberName": "add",
                                                                            "nodeType": "MemberAccess",
                                                                            "referencedDeclaration": 6594,
                                                                            "src": "15118:25:5",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                                            }
                                                                        },
                                                                        "id": 1784,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "kind": "functionCall",
                                                                        "lValueRequested": false,
                                                                        "names": [],
                                                                        "nodeType": "FunctionCall",
                                                                        "src": "15118:30:5",
                                                                        "tryCall": false,
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    ],
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "arguments": [
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1776,
                                                                                    "name": "relayData",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 1765,
                                                                                    "src": "15094:9:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                                    }
                                                                                },
                                                                                "id": 1777,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "gasPrice",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 3212,
                                                                                "src": "15094:18:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "expression": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            ],
                                                                            "expression": {
                                                                                "argumentTypes": null,
                                                                                "id": 1774,
                                                                                "name": "gasUsed",
                                                                                "nodeType": "Identifier",
                                                                                "overloadedDeclarations": [],
                                                                                "referencedDeclaration": 1763,
                                                                                "src": "15082:7:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            },
                                                                            "id": 1775,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "memberName": "mul",
                                                                            "nodeType": "MemberAccess",
                                                                            "referencedDeclaration": 6674,
                                                                            "src": "15082:11:5",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                                            }
                                                                        },
                                                                        "id": 1778,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "kind": "functionCall",
                                                                        "lValueRequested": false,
                                                                        "names": [],
                                                                        "nodeType": "FunctionCall",
                                                                        "src": "15082:31:5",
                                                                        "tryCall": false,
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "id": 1779,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "mul",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 6674,
                                                                    "src": "15082:35:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                                    }
                                                                },
                                                                "id": 1785,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "15082:67:5",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "id": 1786,
                                                        "isConstant": false,
                                                        "isInlineArray": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "TupleExpression",
                                                        "src": "15081:69:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "id": 1787,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "div",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6691,
                                                    "src": "15081:73:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                    }
                                                },
                                                "id": 1789,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "15081:78:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 1771,
                                                    "name": "relayData",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1765,
                                                    "src": "15054:9:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 1772,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "baseRelayFee",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3216,
                                                "src": "15054:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 1773,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "add",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6594,
                                            "src": "15054:26:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                        },
                                        "id": 1790,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "15054:106:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1770,
                                    "id": 1791,
                                    "nodeType": "Return",
                                    "src": "15047:113:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "86a16f8f",
                        "id": 1793,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "calculateCharge",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1767,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "14885:8:5"
                        },
                        "parameters": {
                            "id": 1766,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1763,
                                    "mutability": "mutable",
                                    "name": "gasUsed",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1793,
                                    "src": "14822:15:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1762,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14822:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1765,
                                    "mutability": "mutable",
                                    "name": "relayData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1793,
                                    "src": "14839:37:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayData"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1764,
                                        "name": "GsnTypes.RelayData",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3227,
                                        "src": "14839:18:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayData_$3227_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayData"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14821:56:5"
                        },
                        "returnParameters": {
                            "id": 1770,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1769,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1793,
                                    "src": "14916:7:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1768,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14916:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14915:9:5"
                        },
                        "scope": 1878,
                        "src": "14797:370:5",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3580
                        ],
                        "body": {
                            "id": 1812,
                            "nodeType": "Block",
                            "src": "15261:121:5",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1803,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1795,
                                                "src": "15312:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 1806,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -28,
                                                        "src": "15334:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_RelayHub_$1878",
                                                            "typeString": "contract RelayHub"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_RelayHub_$1878",
                                                            "typeString": "contract RelayHub"
                                                        }
                                                    ],
                                                    "id": 1805,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "15326:7:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 1804,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "15326:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                        }
                                                    }
                                                },
                                                "id": 1807,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "15326:13:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 1808,
                                                "name": "minimumStake",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 720,
                                                "src": "15341:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 1809,
                                                "name": "minimumUnstakeDelay",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 723,
                                                "src": "15355:19:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1801,
                                                "name": "stakeManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 741,
                                                "src": "15278:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                                    "typeString": "contract IStakeManager"
                                                }
                                            },
                                            "id": 1802,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "isRelayManagerStaked",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3744,
                                            "src": "15278:33:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                                "typeString": "function (address,address,uint256,uint256) view external returns (bool)"
                                            }
                                        },
                                        "id": 1810,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "15278:97:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 1800,
                                    "id": 1811,
                                    "nodeType": "Return",
                                    "src": "15271:104:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "2ad311b5",
                        "id": 1813,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isRelayManagerStaked",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1797,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "15232:8:5"
                        },
                        "parameters": {
                            "id": 1796,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1795,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1813,
                                    "src": "15203:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1794,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15203:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15202:22:5"
                        },
                        "returnParameters": {
                            "id": 1800,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1799,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1813,
                                    "src": "15255:4:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 1798,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15255:4:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15254:6:5"
                        },
                        "scope": 1878,
                        "src": "15173:209:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 1824,
                            "nodeType": "Block",
                            "src": "15414:77:5",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 1819,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1816,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "15432:3:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 1817,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "15432:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1818,
                                                    "name": "penalizer",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 744,
                                                    "src": "15446:9:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "15432:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "4e6f742070656e616c697a6572",
                                                "id": 1820,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "15457:15:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_886a466d231c3780d2dc7e6026a25f2aa3a5d564e008d7019e86b25a60adaaea",
                                                    "typeString": "literal_string \"Not penalizer\""
                                                },
                                                "value": "Not penalizer"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_886a466d231c3780d2dc7e6026a25f2aa3a5d564e008d7019e86b25a60adaaea",
                                                    "typeString": "literal_string \"Not penalizer\""
                                                }
                                            ],
                                            "id": 1815,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "15424:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1821,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "15424:49:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1822,
                                    "nodeType": "ExpressionStatement",
                                    "src": "15424:49:5"
                                },
                                {
                                    "id": 1823,
                                    "nodeType": "PlaceholderStatement",
                                    "src": "15483:1:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 1825,
                        "name": "penalizerOnly",
                        "nodeType": "ModifierDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 1814,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "15411:2:5"
                        },
                        "src": "15388:103:5",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            3500
                        ],
                        "body": {
                            "id": 1876,
                            "nodeType": "Block",
                            "src": "15597:505:5",
                            "statements": [
                                {
                                    "assignments": [
                                        1836
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1836,
                                            "mutability": "mutable",
                                            "name": "relayManager",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 1876,
                                            "src": "15607:20:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 1835,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "15607:7:5",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1840,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 1837,
                                            "name": "workerToManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 749,
                                            "src": "15630:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                "typeString": "mapping(address => address)"
                                            }
                                        },
                                        "id": 1839,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 1838,
                                            "name": "relayWorker",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1827,
                                            "src": "15646:11:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "15630:28:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "15607:51:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 1847,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1842,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1836,
                                                    "src": "15750:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "30",
                                                            "id": 1845,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "15774:1:5",
                                                            "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": 1844,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "15766:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 1843,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "15766:7:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 1846,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "15766:10:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "15750:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "556e6b6e6f776e2072656c617920776f726b6572",
                                                "id": 1848,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "15778:22:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_eed0e9b6d0da987b652b17222b3b1438a69cd35d1622a2548adf0f40e3047c47",
                                                    "typeString": "literal_string \"Unknown relay worker\""
                                                },
                                                "value": "Unknown relay worker"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_eed0e9b6d0da987b652b17222b3b1438a69cd35d1622a2548adf0f40e3047c47",
                                                    "typeString": "literal_string \"Unknown relay worker\""
                                                }
                                            ],
                                            "id": 1841,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "15742:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1849,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "15742:59:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1850,
                                    "nodeType": "ExpressionStatement",
                                    "src": "15742:59:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 1853,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1836,
                                                        "src": "15853:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 1852,
                                                    "name": "isRelayManagerStaked",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1813,
                                                    "src": "15832:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view returns (bool)"
                                                    }
                                                },
                                                "id": 1854,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "15832:34:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "72656c6179206d616e61676572206e6f74207374616b6564",
                                                "id": 1855,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "15880:26:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                },
                                                "value": "relay manager not staked"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                }
                                            ],
                                            "id": 1851,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "15811:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1856,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "15811:105:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1857,
                                    "nodeType": "ExpressionStatement",
                                    "src": "15811:105:5"
                                },
                                {
                                    "assignments": [
                                        1861
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1861,
                                            "mutability": "mutable",
                                            "name": "stakeInfo",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 1876,
                                            "src": "15926:40:5",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_memory_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 1860,
                                                "name": "IStakeManager.StakeInfo",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3686,
                                                "src": "15926:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1866,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1864,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1836,
                                                "src": "15995:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1862,
                                                "name": "stakeManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 741,
                                                "src": "15969:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                                    "typeString": "contract IStakeManager"
                                                }
                                            },
                                            "id": 1863,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "getStakeInfo",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3761,
                                            "src": "15969:25:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_struct$_StakeInfo_$3686_memory_ptr_$",
                                                "typeString": "function (address) view external returns (struct IStakeManager.StakeInfo memory)"
                                            }
                                        },
                                        "id": 1865,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "15969:39:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_memory_ptr",
                                            "typeString": "struct IStakeManager.StakeInfo memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "15926:82:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1870,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1836,
                                                "src": "16052:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 1871,
                                                "name": "beneficiary",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1829,
                                                "src": "16066:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 1872,
                                                    "name": "stakeInfo",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1861,
                                                    "src": "16079:9:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$3686_memory_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo memory"
                                                    }
                                                },
                                                "id": 1873,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "stake",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3679,
                                                "src": "16079:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1867,
                                                "name": "stakeManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 741,
                                                "src": "16018:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                                    "typeString": "contract IStakeManager"
                                                }
                                            },
                                            "id": 1869,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "penalizeRelayManager",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3754,
                                            "src": "16018:33:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_payable_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address payable,uint256) external"
                                            }
                                        },
                                        "id": 1874,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "16018:77:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1875,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16018:77:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "ebcd31ac",
                        "id": 1877,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": null,
                                "id": 1833,
                                "modifierName": {
                                    "argumentTypes": null,
                                    "id": 1832,
                                    "name": "penalizerOnly",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1825,
                                    "src": "15583:13:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$__$",
                                        "typeString": "modifier ()"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "15583:13:5"
                            }
                        ],
                        "name": "penalize",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1831,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "15574:8:5"
                        },
                        "parameters": {
                            "id": 1830,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1827,
                                    "mutability": "mutable",
                                    "name": "relayWorker",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1877,
                                    "src": "15515:19:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1826,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15515:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1829,
                                    "mutability": "mutable",
                                    "name": "beneficiary",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1877,
                                    "src": "15536:27:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 1828,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15536:15:5",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15514:50:5"
                        },
                        "returnParameters": {
                            "id": 1834,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "15597:0:5"
                        },
                        "scope": 1878,
                        "src": "15497:605:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    }
                ],
                "scope": 1879,
                "src": "635:15469:5"
            }
        ],
        "src": "229:15876:5"
    },
    "legacyAST": {
        "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/RelayHub.sol",
        "exportedSymbols": {
            "RelayHub": [
                1878
            ]
        },
        "id": 1879,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 698,
                "literals": [
                    "solidity",
                    "^",
                    "0.6",
                    ".9"
                ],
                "nodeType": "PragmaDirective",
                "src": "229:23:5"
            },
            {
                "id": 699,
                "literals": [
                    "experimental",
                    "ABIEncoderV2"
                ],
                "nodeType": "PragmaDirective",
                "src": "253:33:5"
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/utils/MinLibBytes.sol",
                "file": "./utils/MinLibBytes.sol",
                "id": 700,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 5690,
                "src": "288:33:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
                "file": "@openzeppelin/contracts/math/SafeMath.sol",
                "id": 701,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 6762,
                "src": "322:51:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/utils/GsnUtils.sol",
                "file": "./utils/GsnUtils.sol",
                "id": 702,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 5575,
                "src": "375:30:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/utils/GsnEip712Library.sol",
                "file": "./utils/GsnEip712Library.sol",
                "id": 703,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 5528,
                "src": "406:38:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/interfaces/GsnTypes.sol",
                "file": "./interfaces/GsnTypes.sol",
                "id": 704,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 3234,
                "src": "445:35:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/interfaces/IRelayHub.sol",
                "file": "./interfaces/IRelayHub.sol",
                "id": 705,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 3593,
                "src": "481:36:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/interfaces/IPaymaster.sol",
                "file": "./interfaces/IPaymaster.sol",
                "id": 706,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 3311,
                "src": "518:37:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/forwarder/IForwarder.sol",
                "file": "./forwarder/IForwarder.sol",
                "id": 707,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 3007,
                "src": "556:36:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/interfaces/IStakeManager.sol",
                "file": "./interfaces/IStakeManager.sol",
                "id": 708,
                "nodeType": "ImportDirective",
                "scope": 1879,
                "sourceUnit": 3768,
                "src": "593:40:5",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "arguments": null,
                        "baseName": {
                            "contractScope": null,
                            "id": 709,
                            "name": "IRelayHub",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 3592,
                            "src": "656:9:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                "typeString": "contract IRelayHub"
                            }
                        },
                        "id": 710,
                        "nodeType": "InheritanceSpecifier",
                        "src": "656:9:5"
                    }
                ],
                "contractDependencies": [
                    3592
                ],
                "contractKind": "contract",
                "documentation": null,
                "fullyImplemented": true,
                "id": 1878,
                "linearizedBaseContracts": [
                    1878,
                    3592
                ],
                "name": "RelayHub",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 713,
                        "libraryName": {
                            "contractScope": null,
                            "id": 711,
                            "name": "SafeMath",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 6761,
                            "src": "678:8:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_SafeMath_$6761",
                                "typeString": "library SafeMath"
                            }
                        },
                        "nodeType": "UsingForDirective",
                        "src": "672:27:5",
                        "typeName": {
                            "id": 712,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "691:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        }
                    },
                    {
                        "baseFunctions": [
                            3591
                        ],
                        "constant": false,
                        "functionSelector": "d904c732",
                        "id": 717,
                        "mutability": "mutable",
                        "name": "versionHub",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 715,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "719:8:5"
                        },
                        "scope": 1878,
                        "src": "705:65:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 714,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "705:6:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "value": {
                            "argumentTypes": null,
                            "hexValue": "322e302e302b6f70656e67736e2e6875622e6972656c6179687562",
                            "id": 716,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "741:29:5",
                            "subdenomination": null,
                            "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8dbb7717601ec4321cd3ca2253547b51860838fc3b92afe3ae51f08d81c32ec4",
                                "typeString": "literal_string \"2.0.0+opengsn.hub.irelayhub\""
                            },
                            "value": "2.0.0+opengsn.hub.irelayhub"
                        },
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3534
                        ],
                        "constant": false,
                        "functionSelector": "ec5ffac2",
                        "id": 720,
                        "mutability": "mutable",
                        "name": "minimumStake",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 719,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "792:8:5"
                        },
                        "scope": 1878,
                        "src": "777:36:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 718,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "777:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3539
                        ],
                        "constant": false,
                        "functionSelector": "71116320",
                        "id": 723,
                        "mutability": "mutable",
                        "name": "minimumUnstakeDelay",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 722,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "834:8:5"
                        },
                        "scope": 1878,
                        "src": "819:43:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 721,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "819:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3544
                        ],
                        "constant": false,
                        "functionSelector": "3a3e83ac",
                        "id": 726,
                        "mutability": "mutable",
                        "name": "maximumRecipientDeposit",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 725,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "883:8:5"
                        },
                        "scope": 1878,
                        "src": "868:47:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 724,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "868:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3586
                        ],
                        "constant": false,
                        "functionSelector": "83fea4ef",
                        "id": 729,
                        "mutability": "mutable",
                        "name": "gasOverhead",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 728,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "936:8:5"
                        },
                        "scope": 1878,
                        "src": "921:35:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 727,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "921:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3549
                        ],
                        "constant": false,
                        "functionSelector": "ba3ecc5b",
                        "id": 732,
                        "mutability": "mutable",
                        "name": "postOverhead",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 731,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "977:8:5"
                        },
                        "scope": 1878,
                        "src": "962:36:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 730,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "962:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3554
                        ],
                        "constant": false,
                        "functionSelector": "eea7570e",
                        "id": 735,
                        "mutability": "mutable",
                        "name": "gasReserve",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 734,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1019:8:5"
                        },
                        "scope": 1878,
                        "src": "1004:34:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 733,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1004:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3559
                        ],
                        "constant": false,
                        "functionSelector": "e5fad978",
                        "id": 738,
                        "mutability": "mutable",
                        "name": "maxWorkerCount",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 737,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1059:8:5"
                        },
                        "scope": 1878,
                        "src": "1044:38:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 736,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1044:7:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3516
                        ],
                        "constant": false,
                        "functionSelector": "7542ff95",
                        "id": 741,
                        "mutability": "mutable",
                        "name": "stakeManager",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 740,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1102:8:5"
                        },
                        "scope": 1878,
                        "src": "1088:42:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IStakeManager_$3767",
                            "typeString": "contract IStakeManager"
                        },
                        "typeName": {
                            "contractScope": null,
                            "id": 739,
                            "name": "IStakeManager",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 3767,
                            "src": "1088:13:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                "typeString": "contract IStakeManager"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3521
                        ],
                        "constant": false,
                        "functionSelector": "c4775a68",
                        "id": 744,
                        "mutability": "mutable",
                        "name": "penalizer",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 743,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1144:8:5"
                        },
                        "scope": 1878,
                        "src": "1136:33:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                        },
                        "typeName": {
                            "id": 742,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1136:7:5",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3566
                        ],
                        "constant": false,
                        "functionSelector": "ca998f56",
                        "id": 749,
                        "mutability": "mutable",
                        "name": "workerToManager",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 748,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1271:8:5"
                        },
                        "scope": 1878,
                        "src": "1236:59:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                            "typeString": "mapping(address => address)"
                        },
                        "typeName": {
                            "id": 747,
                            "keyType": {
                                "id": 745,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1244:7:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "1236:27:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                            },
                            "valueType": {
                                "id": 746,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1255:7:5",
                                "stateMutability": "nonpayable",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3573
                        ],
                        "constant": false,
                        "functionSelector": "194ac307",
                        "id": 754,
                        "mutability": "mutable",
                        "name": "workerCount",
                        "nodeType": "VariableDeclaration",
                        "overrides": {
                            "id": 753,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1395:8:5"
                        },
                        "scope": 1878,
                        "src": "1360:55:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                        },
                        "typeName": {
                            "id": 752,
                            "keyType": {
                                "id": 750,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1368:7:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "1360:27:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                            },
                            "valueType": {
                                "id": 751,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1379:7:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                }
                            }
                        },
                        "value": null,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 758,
                        "mutability": "mutable",
                        "name": "balances",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1878,
                        "src": "1422:44:5",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                        },
                        "typeName": {
                            "id": 757,
                            "keyType": {
                                "id": 755,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1430:7:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "1422:27:5",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                            },
                            "valueType": {
                                "id": 756,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1441:7:5",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                }
                            }
                        },
                        "value": null,
                        "visibility": "private"
                    },
                    {
                        "body": {
                            "id": 815,
                            "nodeType": "Block",
                            "src": "1798:378:5",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 781,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 779,
                                            "name": "stakeManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 741,
                                            "src": "1808:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                                "typeString": "contract IStakeManager"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 780,
                                            "name": "_stakeManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 760,
                                            "src": "1823:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                                "typeString": "contract IStakeManager"
                                            }
                                        },
                                        "src": "1808:28:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "id": 782,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1808:28:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 785,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 783,
                                            "name": "penalizer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 744,
                                            "src": "1846:9:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 784,
                                            "name": "_penalizer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 762,
                                            "src": "1858:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "1846:22:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "id": 786,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1846:22:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 789,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 787,
                                            "name": "maxWorkerCount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 738,
                                            "src": "1878:14:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 788,
                                            "name": "_maxWorkerCount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 764,
                                            "src": "1895:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1878:32:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 790,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1878:32:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 793,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 791,
                                            "name": "gasReserve",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 735,
                                            "src": "1920:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 792,
                                            "name": "_gasReserve",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 766,
                                            "src": "1933:11:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1920:24:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 794,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1920:24:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 797,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 795,
                                            "name": "postOverhead",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 732,
                                            "src": "1954:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 796,
                                            "name": "_postOverhead",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 768,
                                            "src": "1969:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1954:28:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 798,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1954:28:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 801,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 799,
                                            "name": "gasOverhead",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 729,
                                            "src": "1992:11:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 800,
                                            "name": "_gasOverhead",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 770,
                                            "src": "2006:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1992:26:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 802,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1992:26:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 805,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 803,
                                            "name": "maximumRecipientDeposit",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 726,
                                            "src": "2028:23:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 804,
                                            "name": "_maximumRecipientDeposit",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 772,
                                            "src": "2054:24:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2028:50:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 806,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2028:50:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 809,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 807,
                                            "name": "minimumUnstakeDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 723,
                                            "src": "2088:19:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 808,
                                            "name": "_minimumUnstakeDelay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 774,
                                            "src": "2110:20:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2088:42:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 810,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2088:42:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 813,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 811,
                                            "name": "minimumStake",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 720,
                                            "src": "2140:12:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "id": 812,
                                            "name": "_minimumStake",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 776,
                                            "src": "2156:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2140:29:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 814,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2140:29:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 816,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [],
                        "name": "",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 777,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 760,
                                    "mutability": "mutable",
                                    "name": "_stakeManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1495:27:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                        "typeString": "contract IStakeManager"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 759,
                                        "name": "IStakeManager",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3767,
                                        "src": "1495:13:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 762,
                                    "mutability": "mutable",
                                    "name": "_penalizer",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1532:18:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 761,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1532:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 764,
                                    "mutability": "mutable",
                                    "name": "_maxWorkerCount",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1560:23:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 763,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1560:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 766,
                                    "mutability": "mutable",
                                    "name": "_gasReserve",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1593:19:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 765,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1593:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 768,
                                    "mutability": "mutable",
                                    "name": "_postOverhead",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1622:21:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 767,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1622:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 770,
                                    "mutability": "mutable",
                                    "name": "_gasOverhead",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1653:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 769,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1653:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 772,
                                    "mutability": "mutable",
                                    "name": "_maximumRecipientDeposit",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1683:32:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 771,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1683:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 774,
                                    "mutability": "mutable",
                                    "name": "_minimumUnstakeDelay",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1725:28:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 773,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1725:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 776,
                                    "mutability": "mutable",
                                    "name": "_minimumStake",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 816,
                                    "src": "1763:21:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 775,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1763:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1485:305:5"
                        },
                        "returnParameters": {
                            "id": 778,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1798:0:5"
                        },
                        "scope": 1878,
                        "src": "1473:703:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3463
                        ],
                        "body": {
                            "id": 854,
                            "nodeType": "Block",
                            "src": "2293:315:5",
                            "statements": [
                                {
                                    "assignments": [
                                        827
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 827,
                                            "mutability": "mutable",
                                            "name": "relayManager",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 854,
                                            "src": "2303:20:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 826,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2303:7:5",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 830,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "expression": {
                                            "argumentTypes": null,
                                            "id": 828,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -15,
                                            "src": "2326:3:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                            }
                                        },
                                        "id": 829,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "2326:10:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2303:33:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 833,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 827,
                                                        "src": "2388:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 832,
                                                    "name": "isRelayManagerStaked",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1813,
                                                    "src": "2367:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view returns (bool)"
                                                    }
                                                },
                                                "id": 834,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2367:34:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "72656c6179206d616e61676572206e6f74207374616b6564",
                                                "id": 835,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2415:26:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                },
                                                "value": "relay manager not staked"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                }
                                            ],
                                            "id": 831,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2346:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 836,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2346:105:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 837,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2346:105:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 843,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 839,
                                                        "name": "workerCount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 754,
                                                        "src": "2469:11:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 841,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 840,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 827,
                                                        "src": "2481:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "2469:25:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "30",
                                                    "id": 842,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "2497:1:5",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "2469:29:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6e6f2072656c617920776f726b657273",
                                                "id": 844,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2500:18:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_8062fca8667cf03baf0898f152a7583ecdcf036db8aaa1e73c68558b552d910a",
                                                    "typeString": "literal_string \"no relay workers\""
                                                },
                                                "value": "no relay workers"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_8062fca8667cf03baf0898f152a7583ecdcf036db8aaa1e73c68558b552d910a",
                                                    "typeString": "literal_string \"no relay workers\""
                                                }
                                            ],
                                            "id": 838,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2461:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 845,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2461:58:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 846,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2461:58:5"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 848,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 827,
                                                "src": "2556:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 849,
                                                "name": "baseRelayFee",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 818,
                                                "src": "2570:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 850,
                                                "name": "pctRelayFee",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 820,
                                                "src": "2584:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 851,
                                                "name": "url",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 822,
                                                "src": "2597:3:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                    "typeString": "string calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_string_calldata_ptr",
                                                    "typeString": "string calldata"
                                                }
                                            ],
                                            "id": 847,
                                            "name": "RelayServerRegistered",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3370,
                                            "src": "2534:21:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (address,uint256,uint256,string memory)"
                                            }
                                        },
                                        "id": 852,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2534:67:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 853,
                                    "nodeType": "EmitStatement",
                                    "src": "2529:72:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "83b71871",
                        "id": 855,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "registerRelayServer",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 824,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2284:8:5"
                        },
                        "parameters": {
                            "id": 823,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 818,
                                    "mutability": "mutable",
                                    "name": "baseRelayFee",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 855,
                                    "src": "2211:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 817,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2211:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 820,
                                    "mutability": "mutable",
                                    "name": "pctRelayFee",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 855,
                                    "src": "2233:19:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 819,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2233:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 822,
                                    "mutability": "mutable",
                                    "name": "url",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 855,
                                    "src": "2254:19:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_calldata_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 821,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2254:6:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2210:64:5"
                        },
                        "returnParameters": {
                            "id": 825,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2293:0:5"
                        },
                        "scope": 1878,
                        "src": "2182:426:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3454
                        ],
                        "body": {
                            "id": 937,
                            "nodeType": "Block",
                            "src": "2693:666:5",
                            "statements": [
                                {
                                    "assignments": [
                                        863
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 863,
                                            "mutability": "mutable",
                                            "name": "relayManager",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 937,
                                            "src": "2703:20:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 862,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2703:7:5",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 866,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "expression": {
                                            "argumentTypes": null,
                                            "id": 864,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -15,
                                            "src": "2726:3:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                            }
                                        },
                                        "id": 865,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "2726:10:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2703:33:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 876,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 867,
                                                "name": "workerCount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 754,
                                                "src": "2746:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 869,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 868,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 863,
                                                "src": "2758:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "2746:25:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "id": 875,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 870,
                                                    "name": "workerCount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 754,
                                                    "src": "2774:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                        "typeString": "mapping(address => uint256)"
                                                    }
                                                },
                                                "id": 872,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 871,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 863,
                                                    "src": "2786:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "2774:25:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 873,
                                                    "name": "newRelayWorkers",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 858,
                                                    "src": "2802:15:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                        "typeString": "address[] calldata"
                                                    }
                                                },
                                                "id": 874,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "length",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "2802:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "src": "2774:50:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "2746:78:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 877,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2746:78:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 883,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 879,
                                                        "name": "workerCount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 754,
                                                        "src": "2842:11:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 881,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 880,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 863,
                                                        "src": "2854:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "2842:25:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 882,
                                                    "name": "maxWorkerCount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 738,
                                                    "src": "2871:14:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "2842:43:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "746f6f206d616e7920776f726b657273",
                                                "id": 884,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2887:18:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_b8b3bf20e6bad4d8ec9d04cc1a6fa92d0c0feaf33cdb977513deb374c838da6c",
                                                    "typeString": "literal_string \"too many workers\""
                                                },
                                                "value": "too many workers"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_b8b3bf20e6bad4d8ec9d04cc1a6fa92d0c0feaf33cdb977513deb374c838da6c",
                                                    "typeString": "literal_string \"too many workers\""
                                                }
                                            ],
                                            "id": 878,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2834:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 885,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2834:72:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 886,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2834:72:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 889,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 863,
                                                        "src": "2959:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 888,
                                                    "name": "isRelayManagerStaked",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1813,
                                                    "src": "2938:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view returns (bool)"
                                                    }
                                                },
                                                "id": 890,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2938:34:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "72656c6179206d616e61676572206e6f74207374616b6564",
                                                "id": 891,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2986:26:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                },
                                                "value": "relay manager not staked"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                }
                                            ],
                                            "id": 887,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2917:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 892,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2917:105:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 893,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2917:105:5"
                                },
                                {
                                    "body": {
                                        "id": 927,
                                        "nodeType": "Block",
                                        "src": "3086:176:5",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "id": 915,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "argumentTypes": null,
                                                                "baseExpression": {
                                                                    "argumentTypes": null,
                                                                    "id": 906,
                                                                    "name": "workerToManager",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 749,
                                                                    "src": "3108:15:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                        "typeString": "mapping(address => address)"
                                                                    }
                                                                },
                                                                "id": 910,
                                                                "indexExpression": {
                                                                    "argumentTypes": null,
                                                                    "baseExpression": {
                                                                        "argumentTypes": null,
                                                                        "id": 907,
                                                                        "name": "newRelayWorkers",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 858,
                                                                        "src": "3124:15:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                                            "typeString": "address[] calldata"
                                                                        }
                                                                    },
                                                                    "id": 909,
                                                                    "indexExpression": {
                                                                        "argumentTypes": null,
                                                                        "id": 908,
                                                                        "name": "i",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 895,
                                                                        "src": "3140:1:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "IndexAccess",
                                                                    "src": "3124:18:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_address",
                                                                        "typeString": "address"
                                                                    }
                                                                },
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "IndexAccess",
                                                                "src": "3108:35:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "==",
                                                            "rightExpression": {
                                                                "argumentTypes": null,
                                                                "arguments": [
                                                                    {
                                                                        "argumentTypes": null,
                                                                        "hexValue": "30",
                                                                        "id": 913,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": true,
                                                                        "kind": "number",
                                                                        "lValueRequested": false,
                                                                        "nodeType": "Literal",
                                                                        "src": "3155:1:5",
                                                                        "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": 912,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "3147:7:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_address_$",
                                                                        "typeString": "type(address)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 911,
                                                                        "name": "address",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "3147:7:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": null,
                                                                            "typeString": null
                                                                        }
                                                                    }
                                                                },
                                                                "id": 914,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "3147:10:5",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                }
                                                            },
                                                            "src": "3108:49:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "7468697320776f726b6572206861732061206d616e61676572",
                                                            "id": 916,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "3159:27:5",
                                                            "subdenomination": null,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_1ed2aaf157438763c9d09abeb404cf0934813cbb51a61f32a0f54a0f1941ce31",
                                                                "typeString": "literal_string \"this worker has a manager\""
                                                            },
                                                            "value": "this worker has a manager"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_1ed2aaf157438763c9d09abeb404cf0934813cbb51a61f32a0f54a0f1941ce31",
                                                                "typeString": "literal_string \"this worker has a manager\""
                                                            }
                                                        ],
                                                        "id": 905,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            -18,
                                                            -18
                                                        ],
                                                        "referencedDeclaration": -18,
                                                        "src": "3100:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 917,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3100:87:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 918,
                                                "nodeType": "ExpressionStatement",
                                                "src": "3100:87:5"
                                            },
                                            {
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 925,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                            "argumentTypes": null,
                                                            "id": 919,
                                                            "name": "workerToManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 749,
                                                            "src": "3201:15:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                "typeString": "mapping(address => address)"
                                                            }
                                                        },
                                                        "id": 923,
                                                        "indexExpression": {
                                                            "argumentTypes": null,
                                                            "baseExpression": {
                                                                "argumentTypes": null,
                                                                "id": 920,
                                                                "name": "newRelayWorkers",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 858,
                                                                "src": "3217:15:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                                    "typeString": "address[] calldata"
                                                                }
                                                            },
                                                            "id": 922,
                                                            "indexExpression": {
                                                                "argumentTypes": null,
                                                                "id": 921,
                                                                "name": "i",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 895,
                                                                "src": "3233:1:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "3217:18:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": true,
                                                        "nodeType": "IndexAccess",
                                                        "src": "3201:35:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "argumentTypes": null,
                                                        "id": 924,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 863,
                                                        "src": "3239:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "src": "3201:50:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "id": 926,
                                                "nodeType": "ExpressionStatement",
                                                "src": "3201:50:5"
                                            }
                                        ]
                                    },
                                    "condition": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 901,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "id": 898,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 895,
                                            "src": "3053:1:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 899,
                                                "name": "newRelayWorkers",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 858,
                                                "src": "3057:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                    "typeString": "address[] calldata"
                                                }
                                            },
                                            "id": 900,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "3057:22:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3053:26:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 928,
                                    "initializationExpression": {
                                        "assignments": [
                                            895
                                        ],
                                        "declarations": [
                                            {
                                                "constant": false,
                                                "id": 895,
                                                "mutability": "mutable",
                                                "name": "i",
                                                "nodeType": "VariableDeclaration",
                                                "overrides": null,
                                                "scope": 928,
                                                "src": "3038:9:5",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "typeName": {
                                                    "id": 894,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "3038:7:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "value": null,
                                                "visibility": "internal"
                                            }
                                        ],
                                        "id": 897,
                                        "initialValue": {
                                            "argumentTypes": null,
                                            "hexValue": "30",
                                            "id": 896,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "3050:1:5",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                        },
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "3038:13:5"
                                    },
                                    "loopExpression": {
                                        "expression": {
                                            "argumentTypes": null,
                                            "id": 903,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "++",
                                            "prefix": false,
                                            "src": "3081:3:5",
                                            "subExpression": {
                                                "argumentTypes": null,
                                                "id": 902,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 895,
                                                "src": "3081:1:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "id": 904,
                                        "nodeType": "ExpressionStatement",
                                        "src": "3081:3:5"
                                    },
                                    "nodeType": "ForStatement",
                                    "src": "3033:229:5"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 930,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 863,
                                                "src": "3295:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 931,
                                                "name": "newRelayWorkers",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 858,
                                                "src": "3309:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                    "typeString": "address[] calldata"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "baseExpression": {
                                                    "argumentTypes": null,
                                                    "id": 932,
                                                    "name": "workerCount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 754,
                                                    "src": "3326:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                        "typeString": "mapping(address => uint256)"
                                                    }
                                                },
                                                "id": 934,
                                                "indexExpression": {
                                                    "argumentTypes": null,
                                                    "id": 933,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 863,
                                                    "src": "3338:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "3326:25:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                                    "typeString": "address[] calldata"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 929,
                                            "name": "RelayWorkersAdded",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3380,
                                            "src": "3277:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address[] memory,uint256)"
                                            }
                                        },
                                        "id": 935,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3277:75:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 936,
                                    "nodeType": "EmitStatement",
                                    "src": "3272:80:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "c2da0786",
                        "id": 938,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "addRelayWorkers",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 860,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "2684:8:5"
                        },
                        "parameters": {
                            "id": 859,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 858,
                                    "mutability": "mutable",
                                    "name": "newRelayWorkers",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 938,
                                    "src": "2639:34:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                        "typeString": "address[]"
                                    },
                                    "typeName": {
                                        "baseType": {
                                            "id": 856,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2639:7:5",
                                            "stateMutability": "nonpayable",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "id": 857,
                                        "length": null,
                                        "nodeType": "ArrayTypeName",
                                        "src": "2639:9:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                            "typeString": "address[]"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2638:36:5"
                        },
                        "returnParameters": {
                            "id": 861,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2693:0:5"
                        },
                        "scope": 1878,
                        "src": "2614:745:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3468
                        ],
                        "body": {
                            "id": 974,
                            "nodeType": "Block",
                            "src": "3425:225:5",
                            "statements": [
                                {
                                    "assignments": [
                                        945
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 945,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 974,
                                            "src": "3435:14:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 944,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3435:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 948,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "expression": {
                                            "argumentTypes": null,
                                            "id": 946,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -15,
                                            "src": "3452:3:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                            }
                                        },
                                        "id": 947,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "value",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "3452:9:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3435:26:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 952,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 950,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 945,
                                                    "src": "3479:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 951,
                                                    "name": "maximumRecipientDeposit",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 726,
                                                    "src": "3489:23:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "3479:33:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6465706f73697420746f6f20626967",
                                                "id": 953,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3514:17:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_506396ef765804f70def85c51caf8719b4ef1454fc9835f7f8f316845f414c1a",
                                                    "typeString": "literal_string \"deposit too big\""
                                                },
                                                "value": "deposit too big"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_506396ef765804f70def85c51caf8719b4ef1454fc9835f7f8f316845f414c1a",
                                                    "typeString": "literal_string \"deposit too big\""
                                                }
                                            ],
                                            "id": 949,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "3471:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 954,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3471:61:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 955,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3471:61:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 965,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 956,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 758,
                                                "src": "3543:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 958,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 957,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 940,
                                                "src": "3552:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "3543:16:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "id": 963,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 945,
                                                    "src": "3583:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 959,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 758,
                                                        "src": "3562:8:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 961,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 960,
                                                        "name": "target",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 940,
                                                        "src": "3571:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "3562:16:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 962,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "add",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6594,
                                                "src": "3562:20:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                }
                                            },
                                            "id": 964,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3562:28:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3543:47:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 966,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3543:47:5"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 968,
                                                "name": "target",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 940,
                                                "src": "3616:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 969,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "3624:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 970,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "3624:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 971,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 945,
                                                "src": "3636:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 967,
                                            "name": "Deposited",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3396,
                                            "src": "3606:9:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 972,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3606:37:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 973,
                                    "nodeType": "EmitStatement",
                                    "src": "3601:42:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "aa67c919",
                        "id": 975,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "depositFor",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 942,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3408:8:5"
                        },
                        "parameters": {
                            "id": 941,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 940,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 975,
                                    "src": "3385:14:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 939,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3385:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3384:16:5"
                        },
                        "returnParameters": {
                            "id": 943,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3425:0:5"
                        },
                        "scope": 1878,
                        "src": "3365:285:5",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3529
                        ],
                        "body": {
                            "id": 987,
                            "nodeType": "Block",
                            "src": "3732:40:5",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 983,
                                            "name": "balances",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 758,
                                            "src": "3749:8:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 985,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 984,
                                            "name": "target",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 977,
                                            "src": "3758:6:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "3749:16:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 982,
                                    "id": 986,
                                    "nodeType": "Return",
                                    "src": "3742:23:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "70a08231",
                        "id": 988,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "balanceOf",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 979,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3700:8:5"
                        },
                        "parameters": {
                            "id": 978,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 977,
                                    "mutability": "mutable",
                                    "name": "target",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 988,
                                    "src": "3675:14:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 976,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3675:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3674:16:5"
                        },
                        "returnParameters": {
                            "id": 982,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 981,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 988,
                                    "src": "3723:7:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 980,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3723:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3722:9:5"
                        },
                        "scope": 1878,
                        "src": "3656:116:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3475
                        ],
                        "body": {
                            "id": 1033,
                            "nodeType": "Block",
                            "src": "3850:260:5",
                            "statements": [
                                {
                                    "assignments": [
                                        997
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 997,
                                            "mutability": "mutable",
                                            "name": "account",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 1033,
                                            "src": "3860:23:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                            },
                                            "typeName": {
                                                "id": 996,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3860:15:5",
                                                "stateMutability": "payable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1000,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "expression": {
                                            "argumentTypes": null,
                                            "id": 998,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -15,
                                            "src": "3886:3:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                            }
                                        },
                                        "id": 999,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "3886:10:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3860:36:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1006,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1002,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 758,
                                                        "src": "3914:8:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 1004,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1003,
                                                        "name": "account",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 997,
                                                        "src": "3923:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "3914:17:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1005,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 990,
                                                    "src": "3935:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "3914:27:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "696e73756666696369656e742066756e6473",
                                                "id": 1007,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3943:20:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_c6bc4f5b747fbbc581777f92b42c6eac56dbbb4e624c68b8c1a6001ff2001fc5",
                                                    "typeString": "literal_string \"insufficient funds\""
                                                },
                                                "value": "insufficient funds"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_c6bc4f5b747fbbc581777f92b42c6eac56dbbb4e624c68b8c1a6001ff2001fc5",
                                                    "typeString": "literal_string \"insufficient funds\""
                                                }
                                            ],
                                            "id": 1001,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "3906:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1008,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3906:58:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1009,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3906:58:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1019,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 1010,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 758,
                                                "src": "3975:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 1012,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 1011,
                                                "name": "account",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 997,
                                                "src": "3984:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "3975:17:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "id": 1017,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 990,
                                                    "src": "4017:6:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1013,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 758,
                                                        "src": "3995:8:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 1015,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1014,
                                                        "name": "account",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 997,
                                                        "src": "4004:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "3995:17:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 1016,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sub",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6611,
                                                "src": "3995:21:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                }
                                            },
                                            "id": 1018,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "3995:29:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "3975:49:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1020,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3975:49:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1024,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 990,
                                                "src": "4048:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1021,
                                                "name": "dest",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 992,
                                                "src": "4034:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            "id": 1023,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "transfer",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "4034:13:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                                "typeString": "function (uint256)"
                                            }
                                        },
                                        "id": 1025,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4034:21:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1026,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4034:21:5"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1028,
                                                "name": "account",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 997,
                                                "src": "4081:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 1029,
                                                "name": "dest",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 992,
                                                "src": "4090:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 1030,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 990,
                                                "src": "4096:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 1027,
                                            "name": "Withdrawn",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3388,
                                            "src": "4071:9:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 1031,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4071:32:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1032,
                                    "nodeType": "EmitStatement",
                                    "src": "4066:37:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "00f714ce",
                        "id": 1034,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdraw",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 994,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3841:8:5"
                        },
                        "parameters": {
                            "id": 993,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 990,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1034,
                                    "src": "3796:14:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 989,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3796:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 992,
                                    "mutability": "mutable",
                                    "name": "dest",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1034,
                                    "src": "3812:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 991,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3812:15:5",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3795:38:5"
                        },
                        "returnParameters": {
                            "id": 995,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3850:0:5"
                        },
                        "scope": 1878,
                        "src": "3778:332:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 1110,
                            "nodeType": "Block",
                            "src": "4371:1135:5",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1057,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 1047,
                                            "name": "gasLimits",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1043,
                                            "src": "4381:9:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                "typeString": "struct IPaymaster.GasLimits memory"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [],
                                            "expression": {
                                                "argumentTypes": [],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1049,
                                                                        "name": "relayRequest",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1038,
                                                                        "src": "4416:12:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                        }
                                                                    },
                                                                    "id": 1050,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayData",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 3231,
                                                                    "src": "4416:22:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                    }
                                                                },
                                                                "id": 1051,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "paymaster",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 3220,
                                                                "src": "4416:32:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            ],
                                                            "id": 1048,
                                                            "name": "IPaymaster",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3310,
                                                            "src": "4405:10:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IPaymaster_$3310_$",
                                                                "typeString": "type(contract IPaymaster)"
                                                            }
                                                        },
                                                        "id": 1052,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4405:44:5",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_IPaymaster_$3310",
                                                            "typeString": "contract IPaymaster"
                                                        }
                                                    },
                                                    "id": 1053,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "getGasLimits",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3259,
                                                    "src": "4405:57:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_external_view$__$returns$_t_struct$_GasLimits_$3253_memory_ptr_$",
                                                        "typeString": "function () view external returns (struct IPaymaster.GasLimits memory)"
                                                    }
                                                },
                                                "id": 1055,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "names": [
                                                    "gas"
                                                ],
                                                "nodeType": "FunctionCallOptions",
                                                "options": [
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "3530303030",
                                                        "id": 1054,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "4467:5:5",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_50000_by_1",
                                                            "typeString": "int_const 50000"
                                                        },
                                                        "value": "50000"
                                                    }
                                                ],
                                                "src": "4405:68:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_view$__$returns$_t_struct$_GasLimits_$3253_memory_ptr_$gas",
                                                    "typeString": "function () view external returns (struct IPaymaster.GasLimits memory)"
                                                }
                                            },
                                            "id": 1056,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "4405:70:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                "typeString": "struct IPaymaster.GasLimits memory"
                                            }
                                        },
                                        "src": "4381:94:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                            "typeString": "struct IPaymaster.GasLimits memory"
                                        }
                                    },
                                    "id": 1058,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4381:94:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1063,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1060,
                                                    "name": "paymasterMaxAcceptanceBudget",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1036,
                                                    "src": "4494:28:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1061,
                                                        "name": "gasLimits",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1043,
                                                        "src": "4526:9:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                            "typeString": "struct IPaymaster.GasLimits memory"
                                                        }
                                                    },
                                                    "id": 1062,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "acceptanceBudget",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3248,
                                                    "src": "4526:26:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "4494:58:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "756e6578706563746564206869676820616363657074616e6365427564676574",
                                                "id": 1064,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4554:34:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_49b1ce0b68c58b3a30a8d784e41887ebdc50fb871feede781a4b90e1a4d586f7",
                                                    "typeString": "literal_string \"unexpected high acceptanceBudget\""
                                                },
                                                "value": "unexpected high acceptanceBudget"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_49b1ce0b68c58b3a30a8d784e41887ebdc50fb871feede781a4b90e1a4d586f7",
                                                    "typeString": "literal_string \"unexpected high acceptanceBudget\""
                                                }
                                            ],
                                            "id": 1059,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "4486:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1065,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4486:103:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1066,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4486:103:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1082,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "id": 1067,
                                            "name": "maxPossibleGas",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1045,
                                            "src": "4600:14:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1078,
                                                            "name": "relayRequest",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1038,
                                                            "src": "4761:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            }
                                                        },
                                                        "id": 1079,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "request",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3229,
                                                        "src": "4761:20:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_calldata_ptr",
                                                            "typeString": "struct IForwarder.ForwardRequest calldata"
                                                        }
                                                    },
                                                    "id": 1080,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "gas",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 2945,
                                                    "src": "4761:24:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1074,
                                                                "name": "gasLimits",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1043,
                                                                "src": "4709:9:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                                    "typeString": "struct IPaymaster.GasLimits memory"
                                                                }
                                                            },
                                                            "id": 1075,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "postRelayedCallGasLimit",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3252,
                                                            "src": "4709:33:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1070,
                                                                        "name": "gasLimits",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1043,
                                                                        "src": "4658:9:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                                            "typeString": "struct IPaymaster.GasLimits memory"
                                                                        }
                                                                    },
                                                                    "id": 1071,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "preRelayedCallGasLimit",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 3250,
                                                                    "src": "4658:32:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "id": 1068,
                                                                    "name": "gasOverhead",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 729,
                                                                    "src": "4629:11:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "id": 1069,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "add",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 6594,
                                                                "src": "4629:15:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                                }
                                                            },
                                                            "id": 1072,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "4629:62:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "id": 1073,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "add",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 6594,
                                                        "src": "4629:66:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                        }
                                                    },
                                                    "id": 1076,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "4629:114:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 1077,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "add",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 6594,
                                                "src": "4629:118:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                }
                                            },
                                            "id": 1081,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "4629:157:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "4600:186:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1083,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4600:186:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1087,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1085,
                                                    "name": "initialGas",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1040,
                                                    "src": "4989:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1086,
                                                    "name": "maxPossibleGas",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1045,
                                                    "src": "5003:14:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "4989:28:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "4e6f7420656e6f75676820676173206c65667420666f7220696e6e657252656c617943616c6c20746f20636f6d706c657465",
                                                "id": 1088,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5031:52:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_501b7723a73318066ae227251da124e20338d3dd46fb7fabaf05a1255af8c763",
                                                    "typeString": "literal_string \"Not enough gas left for innerRelayCall to complete\""
                                                },
                                                "value": "Not enough gas left for innerRelayCall to complete"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_501b7723a73318066ae227251da124e20338d3dd46fb7fabaf05a1255af8c763",
                                                    "typeString": "literal_string \"Not enough gas left for innerRelayCall to complete\""
                                                }
                                            ],
                                            "id": 1084,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "4968:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1089,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4968:116:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1090,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4968:116:5"
                                },
                                {
                                    "assignments": [
                                        1092
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1092,
                                            "mutability": "mutable",
                                            "name": "maxPossibleCharge",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 1110,
                                            "src": "5095:25:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 1091,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "5095:7:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1098,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1094,
                                                "name": "maxPossibleGas",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1045,
                                                "src": "5152:14:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 1095,
                                                    "name": "relayRequest",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1038,
                                                    "src": "5180:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    }
                                                },
                                                "id": 1096,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "relayData",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3231,
                                                "src": "5180:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            ],
                                            "id": 1093,
                                            "name": "calculateCharge",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1793,
                                            "src": "5123:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_struct$_RelayData_$3227_calldata_ptr_$returns$_t_uint256_$",
                                                "typeString": "function (uint256,struct GsnTypes.RelayData calldata) view returns (uint256)"
                                            }
                                        },
                                        "id": 1097,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5123:89:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5095:117:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1106,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1100,
                                                    "name": "maxPossibleCharge",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1092,
                                                    "src": "5394:17:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1101,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 758,
                                                        "src": "5415:8:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 1105,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1102,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1038,
                                                                "src": "5424:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 1103,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayData",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3231,
                                                            "src": "5424:22:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayData calldata"
                                                            }
                                                        },
                                                        "id": 1104,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "paymaster",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3220,
                                                        "src": "5424:32:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "5415:42:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "5394:63:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "5061796d61737465722062616c616e636520746f6f206c6f77",
                                                "id": 1107,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "5471:27:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_df7fcc398e13fae71e43850eb984e7c26a72dbc1d3671abbe30909e226dd9406",
                                                    "typeString": "literal_string \"Paymaster balance too low\""
                                                },
                                                "value": "Paymaster balance too low"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_df7fcc398e13fae71e43850eb984e7c26a72dbc1d3671abbe30909e226dd9406",
                                                    "typeString": "literal_string \"Paymaster balance too low\""
                                                }
                                            ],
                                            "id": 1099,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "5386:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1108,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5386:113:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1109,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5386:113:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 1111,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "verifyGasLimits",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 1041,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1036,
                                    "mutability": "mutable",
                                    "name": "paymasterMaxAcceptanceBudget",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1111,
                                    "src": "4150:36:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1035,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4150:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1038,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1111,
                                    "src": "4196:43:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1037,
                                        "name": "GsnTypes.RelayRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3232,
                                        "src": "4196:21:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1040,
                                    "mutability": "mutable",
                                    "name": "initialGas",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1111,
                                    "src": "4249:18:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1039,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4249:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4140:133:5"
                        },
                        "returnParameters": {
                            "id": 1046,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1043,
                                    "mutability": "mutable",
                                    "name": "gasLimits",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1111,
                                    "src": "4308:37:5",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                        "typeString": "struct IPaymaster.GasLimits"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1042,
                                        "name": "IPaymaster.GasLimits",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3253,
                                        "src": "4308:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasLimits_$3253_storage_ptr",
                                            "typeString": "struct IPaymaster.GasLimits"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1045,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1111,
                                    "src": "4347:22:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1044,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4347:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4307:63:5"
                        },
                        "scope": 1878,
                        "src": "4116:1390:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "private"
                    },
                    {
                        "canonicalName": "RelayHub.RelayCallData",
                        "id": 1132,
                        "members": [
                            {
                                "constant": false,
                                "id": 1113,
                                "mutability": "mutable",
                                "name": "success",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5543:12:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                },
                                "typeName": {
                                    "id": 1112,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5543:4:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1115,
                                "mutability": "mutable",
                                "name": "functionSelector",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5565:23:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                },
                                "typeName": {
                                    "id": 1114,
                                    "name": "bytes4",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5565:6:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1117,
                                "mutability": "mutable",
                                "name": "recipientContext",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5598:22:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1116,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5598:5:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1119,
                                "mutability": "mutable",
                                "name": "relayedCallReturnValue",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5630:28:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1118,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5630:5:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1121,
                                "mutability": "mutable",
                                "name": "gasLimits",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5668:30:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_GasLimits_$3253_storage_ptr",
                                    "typeString": "struct IPaymaster.GasLimits"
                                },
                                "typeName": {
                                    "contractScope": null,
                                    "id": 1120,
                                    "name": "IPaymaster.GasLimits",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 3253,
                                    "src": "5668:20:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GasLimits_$3253_storage_ptr",
                                        "typeString": "struct IPaymaster.GasLimits"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1123,
                                "mutability": "mutable",
                                "name": "status",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5708:22:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                },
                                "typeName": {
                                    "contractScope": null,
                                    "id": 1122,
                                    "name": "RelayCallStatus",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 3447,
                                    "src": "5708:15:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1125,
                                "mutability": "mutable",
                                "name": "innerGasUsed",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5740:20:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1124,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5740:7:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1127,
                                "mutability": "mutable",
                                "name": "maxPossibleGas",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5770:22:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1126,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5770:7:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1129,
                                "mutability": "mutable",
                                "name": "gasBeforeInner",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5802:22:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1128,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5802:7:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1131,
                                "mutability": "mutable",
                                "name": "retData",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1132,
                                "src": "5834:13:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1130,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5834:5:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            }
                        ],
                        "name": "RelayCallData",
                        "nodeType": "StructDefinition",
                        "scope": 1878,
                        "src": "5512:342:5",
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3493
                        ],
                        "body": {
                            "id": 1490,
                            "nodeType": "Block",
                            "src": "6176:3930:5",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "components": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1150,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1138,
                                                "src": "6187:9:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "id": 1151,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "6186:11:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                            "typeString": "bytes calldata"
                                        }
                                    },
                                    "id": 1152,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6186:11:5"
                                },
                                {
                                    "assignments": [
                                        1154
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1154,
                                            "mutability": "mutable",
                                            "name": "vars",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 1490,
                                            "src": "6207:25:5",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                "typeString": "struct RelayHub.RelayCallData"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 1153,
                                                "name": "RelayCallData",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 1132,
                                                "src": "6207:13:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayCallData_$1132_storage_ptr",
                                                    "typeString": "struct RelayHub.RelayCallData"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1155,
                                    "initialValue": null,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "6207:25:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1166,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1156,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1154,
                                                "src": "6242:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                }
                                            },
                                            "id": 1158,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "functionSelector",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1115,
                                            "src": "6242:21:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1161,
                                                            "name": "relayRequest",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1136,
                                                            "src": "6289:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            }
                                                        },
                                                        "id": 1162,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "request",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3229,
                                                        "src": "6289:20:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_ForwardRequest_$2950_calldata_ptr",
                                                            "typeString": "struct IForwarder.ForwardRequest calldata"
                                                        }
                                                    },
                                                    "id": 1163,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "data",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 2949,
                                                    "src": "6289:25:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "hexValue": "30",
                                                    "id": 1164,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "6316:1:5",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 1159,
                                                    "name": "MinLibBytes",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5689,
                                                    "src": "6266:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_contract$_MinLibBytes_$5689_$",
                                                        "typeString": "type(library MinLibBytes)"
                                                    }
                                                },
                                                "id": 1160,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "readBytes4",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5688,
                                                "src": "6266:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes4_$",
                                                    "typeString": "function (bytes memory,uint256) pure returns (bytes4)"
                                                }
                                            },
                                            "id": 1165,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "6266:52:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                            }
                                        },
                                        "src": "6242:76:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                        }
                                    },
                                    "id": 1167,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6242:76:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                "id": 1173,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1169,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "6336:3:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 1170,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "6336:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1171,
                                                        "name": "tx",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -26,
                                                        "src": "6350:2:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_transaction",
                                                            "typeString": "tx"
                                                        }
                                                    },
                                                    "id": 1172,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "origin",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "6350:9:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "6336:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "72656c617920776f726b65722063616e6e6f74206265206120736d61727420636f6e7472616374",
                                                "id": 1174,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6361:41:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_5941a735b6d320b436d371063affea6fc5b048702688d9567f06d82cb2064282",
                                                    "typeString": "literal_string \"relay worker cannot be a smart contract\""
                                                },
                                                "value": "relay worker cannot be a smart contract"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_5941a735b6d320b436d371063affea6fc5b048702688d9567f06d82cb2064282",
                                                    "typeString": "literal_string \"relay worker cannot be a smart contract\""
                                                }
                                            ],
                                            "id": 1168,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "6328:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1175,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6328:75:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1176,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6328:75:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 1186,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1178,
                                                        "name": "workerToManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 749,
                                                        "src": "6421:15:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                            "typeString": "mapping(address => address)"
                                                        }
                                                    },
                                                    "id": 1181,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1179,
                                                            "name": "msg",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -15,
                                                            "src": "6437:3:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_message",
                                                                "typeString": "msg"
                                                            }
                                                        },
                                                        "id": 1180,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "sender",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "6437:10:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "6421:27:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "30",
                                                            "id": 1184,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "6460:1:5",
                                                            "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": 1183,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "6452:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 1182,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "6452:7:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 1185,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "6452:10:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "6421:41:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "556e6b6e6f776e2072656c617920776f726b6572",
                                                "id": 1187,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6464:22:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_eed0e9b6d0da987b652b17222b3b1438a69cd35d1622a2548adf0f40e3047c47",
                                                    "typeString": "literal_string \"Unknown relay worker\""
                                                },
                                                "value": "Unknown relay worker"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_eed0e9b6d0da987b652b17222b3b1438a69cd35d1622a2548adf0f40e3047c47",
                                                    "typeString": "literal_string \"Unknown relay worker\""
                                                }
                                            ],
                                            "id": 1177,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "6413:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1188,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6413:74:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1189,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6413:74:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 1196,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1191,
                                                            "name": "relayRequest",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1136,
                                                            "src": "6505:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            }
                                                        },
                                                        "id": 1192,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "relayData",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3231,
                                                        "src": "6505:22:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayData calldata"
                                                        }
                                                    },
                                                    "id": 1193,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayWorker",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3218,
                                                    "src": "6505:34:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1194,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "6543:3:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 1195,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "6543:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "6505:48:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "4e6f74206120726967687420776f726b6572",
                                                "id": 1197,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6555:20:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_ce37613246c89ab281b956f13602a84514f73374c13f132cad59dd1507841eb2",
                                                    "typeString": "literal_string \"Not a right worker\""
                                                },
                                                "value": "Not a right worker"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_ce37613246c89ab281b956f13602a84514f73374c13f132cad59dd1507841eb2",
                                                    "typeString": "literal_string \"Not a right worker\""
                                                }
                                            ],
                                            "id": 1190,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "6497:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1198,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6497:79:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1199,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6497:79:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                            "argumentTypes": null,
                                                            "id": 1202,
                                                            "name": "workerToManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 749,
                                                            "src": "6628:15:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                "typeString": "mapping(address => address)"
                                                            }
                                                        },
                                                        "id": 1205,
                                                        "indexExpression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1203,
                                                                "name": "msg",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -15,
                                                                "src": "6644:3:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_message",
                                                                    "typeString": "msg"
                                                                }
                                                            },
                                                            "id": 1204,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "sender",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "6644:10:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "6628:27:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 1201,
                                                    "name": "isRelayManagerStaked",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1813,
                                                    "src": "6607:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view returns (bool)"
                                                    }
                                                },
                                                "id": 1206,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6607:49:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "72656c6179206d616e61676572206e6f74207374616b6564",
                                                "id": 1207,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6670:26:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                },
                                                "value": "relay manager not staked"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                }
                                            ],
                                            "id": 1200,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "6586:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1208,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6586:120:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1209,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6586:120:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1216,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1211,
                                                            "name": "relayRequest",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1136,
                                                            "src": "6724:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            }
                                                        },
                                                        "id": 1212,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "relayData",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3231,
                                                        "src": "6724:22:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayData calldata"
                                                        }
                                                    },
                                                    "id": 1213,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "gasPrice",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3212,
                                                    "src": "6724:31:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1214,
                                                        "name": "tx",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -26,
                                                        "src": "6759:2:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_transaction",
                                                            "typeString": "tx"
                                                        }
                                                    },
                                                    "id": 1215,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "gasprice",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "6759:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "6724:46:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "496e76616c696420676173207072696365",
                                                "id": 1217,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6772:19:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_4275ac04d780bf08c964f46440b811276a7686db43cb75c6cc307112f0b16871",
                                                    "typeString": "literal_string \"Invalid gas price\""
                                                },
                                                "value": "Invalid gas price"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_4275ac04d780bf08c964f46440b811276a7686db43cb75c6cc307112f0b16871",
                                                    "typeString": "literal_string \"Invalid gas price\""
                                                }
                                            ],
                                            "id": 1210,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "6716:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1218,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6716:76:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1219,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6716:76:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1224,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1221,
                                                    "name": "externalGasLimit",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1142,
                                                    "src": "6810:16:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1222,
                                                        "name": "block",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -4,
                                                        "src": "6830:5:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_block",
                                                            "typeString": "block"
                                                        }
                                                    },
                                                    "id": 1223,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "gaslimit",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "6830:14:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "6810:34:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "496d706f737369626c6520676173206c696d6974",
                                                "id": 1225,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6846:22:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_0dba9dbc8c541cb19a506e0bb8d3e5d1440c9ef9791ea6671fa5f6eca0e96c15",
                                                    "typeString": "literal_string \"Impossible gas limit\""
                                                },
                                                "value": "Impossible gas limit"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_0dba9dbc8c541cb19a506e0bb8d3e5d1440c9ef9791ea6671fa5f6eca0e96c15",
                                                    "typeString": "literal_string \"Impossible gas limit\""
                                                }
                                            ],
                                            "id": 1220,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "6802:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1226,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6802:67:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1227,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6802:67:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1239,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "components": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1228,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1154,
                                                        "src": "6881:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1230,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "gasLimits",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1121,
                                                    "src": "6881:14:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                        "typeString": "struct IPaymaster.GasLimits memory"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1231,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1154,
                                                        "src": "6897:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1232,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "maxPossibleGas",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1127,
                                                    "src": "6897:19:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "id": 1233,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "TupleExpression",
                                            "src": "6880:37:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_struct$_GasLimits_$3253_memory_ptr_$_t_uint256_$",
                                                "typeString": "tuple(struct IPaymaster.GasLimits memory,uint256)"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "id": 1235,
                                                    "name": "paymasterMaxAcceptanceBudget",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1134,
                                                    "src": "6949:28:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "id": 1236,
                                                    "name": "relayRequest",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1136,
                                                    "src": "6979:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "id": 1237,
                                                    "name": "externalGasLimit",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1142,
                                                    "src": "6993:16:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "id": 1234,
                                                "name": "verifyGasLimits",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1111,
                                                "src": "6933:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_struct$_RelayRequest_$3232_calldata_ptr_$_t_uint256_$returns$_t_struct$_GasLimits_$3253_memory_ptr_$_t_uint256_$",
                                                    "typeString": "function (uint256,struct GsnTypes.RelayRequest calldata,uint256) view returns (struct IPaymaster.GasLimits memory,uint256)"
                                                }
                                            },
                                            "id": 1238,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "6933:77:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_struct$_GasLimits_$3253_memory_ptr_$_t_uint256_$",
                                                "typeString": "tuple(struct IPaymaster.GasLimits memory,uint256)"
                                            }
                                        },
                                        "src": "6880:130:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1240,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6880:130:5"
                                },
                                {
                                    "id": 1345,
                                    "nodeType": "Block",
                                    "src": "7017:1302:5",
                                    "statements": [
                                        {
                                            "assignments": [
                                                1242
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1242,
                                                    "mutability": "mutable",
                                                    "name": "innerGasLimit",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1345,
                                                    "src": "7198:21:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "typeName": {
                                                        "id": 1241,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "7198:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1251,
                                            "initialValue": {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1250,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 1248,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "argumentTypes": null,
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 1246,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "argumentTypes": null,
                                                            "arguments": [],
                                                            "expression": {
                                                                "argumentTypes": [],
                                                                "id": 1243,
                                                                "name": "gasleft",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -7,
                                                                "src": "7222:7:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                                    "typeString": "function () view returns (uint256)"
                                                                }
                                                            },
                                                            "id": 1244,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "7222:9:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "*",
                                                        "rightExpression": {
                                                            "argumentTypes": null,
                                                            "hexValue": "3633",
                                                            "id": 1245,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "7232:2:5",
                                                            "subdenomination": null,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_63_by_1",
                                                                "typeString": "int_const 63"
                                                            },
                                                            "value": "63"
                                                        },
                                                        "src": "7222:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "/",
                                                    "rightExpression": {
                                                        "argumentTypes": null,
                                                        "hexValue": "3634",
                                                        "id": 1247,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "7235:2:5",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_64_by_1",
                                                            "typeString": "int_const 64"
                                                        },
                                                        "value": "64"
                                                    },
                                                    "src": "7222:15:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "-",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1249,
                                                    "name": "gasReserve",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 735,
                                                    "src": "7238:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "7222:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "7198:50:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1257,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1252,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1154,
                                                        "src": "7258:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1254,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "gasBeforeInner",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1129,
                                                    "src": "7258:19:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "arguments": [],
                                                    "expression": {
                                                        "argumentTypes": [],
                                                        "id": 1255,
                                                        "name": "gasleft",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -7,
                                                        "src": "7280:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                            "typeString": "function () view returns (uint256)"
                                                        }
                                                    },
                                                    "id": 1256,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "7280:9:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "7258:31:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 1258,
                                            "nodeType": "ExpressionStatement",
                                            "src": "7258:31:5"
                                        },
                                        {
                                            "assignments": [
                                                1260
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1260,
                                                    "mutability": "mutable",
                                                    "name": "_tmpInitialGas",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1345,
                                                    "src": "7300:22:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "typeName": {
                                                        "id": 1259,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "7300:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1268,
                                            "initialValue": {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1267,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 1265,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "argumentTypes": null,
                                                        "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        "id": 1263,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "argumentTypes": null,
                                                            "id": 1261,
                                                            "name": "innerGasLimit",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1242,
                                                            "src": "7325:13:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "+",
                                                        "rightExpression": {
                                                            "argumentTypes": null,
                                                            "id": 1262,
                                                            "name": "externalGasLimit",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1142,
                                                            "src": "7341:16:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "src": "7325:32:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "+",
                                                    "rightExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1264,
                                                        "name": "gasOverhead",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 729,
                                                        "src": "7360:11:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "7325:46:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "+",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1266,
                                                    "name": "postOverhead",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 732,
                                                    "src": "7374:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "7325:61:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "7300:86:5"
                                        },
                                        {
                                            "assignments": [
                                                1270,
                                                1272
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1270,
                                                    "mutability": "mutable",
                                                    "name": "success",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1345,
                                                    "src": "7655:12:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "typeName": {
                                                        "id": 1269,
                                                        "name": "bool",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "7655:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                },
                                                {
                                                    "constant": false,
                                                    "id": 1272,
                                                    "mutability": "mutable",
                                                    "name": "relayCallStatus",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1345,
                                                    "src": "7669:28:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "memory",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes"
                                                    },
                                                    "typeName": {
                                                        "id": 1271,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "7669:5:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_storage_ptr",
                                                            "typeString": "bytes"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1298,
                                            "initialValue": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "arguments": [
                                                            {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1282,
                                                                        "name": "RelayHub",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1878,
                                                                        "src": "7775:8:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_contract$_RelayHub_$1878_$",
                                                                            "typeString": "type(contract RelayHub)"
                                                                        }
                                                                    },
                                                                    "id": 1283,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "innerRelayCall",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1737,
                                                                    "src": "7775:23:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_declaration_nonpayable$_t_struct$_RelayRequest_$3232_calldata_ptr_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$_t_struct$_GasLimits_$3253_calldata_ptr_$_t_uint256_$_t_uint256_$returns$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$",
                                                                        "typeString": "function RelayHub.innerRelayCall(struct GsnTypes.RelayRequest calldata,bytes calldata,bytes calldata,struct IPaymaster.GasLimits calldata,uint256,uint256) returns (enum IRelayHub.RelayCallStatus,bytes memory)"
                                                                    }
                                                                },
                                                                "id": 1284,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "memberName": "selector",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": null,
                                                                "src": "7775:32:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes4",
                                                                    "typeString": "bytes4"
                                                                }
                                                            },
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 1285,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1136,
                                                                "src": "7809:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 1286,
                                                                "name": "signature",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1138,
                                                                "src": "7823:9:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                                    "typeString": "bytes calldata"
                                                                }
                                                            },
                                                            {
                                                                "argumentTypes": null,
                                                                "id": 1287,
                                                                "name": "approvalData",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1140,
                                                                "src": "7834:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                                    "typeString": "bytes calldata"
                                                                }
                                                            },
                                                            {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "id": 1288,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1154,
                                                                    "src": "7848:4:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 1289,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "gasLimits",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1121,
                                                                "src": "7848:14:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                                    "typeString": "struct IPaymaster.GasLimits memory"
                                                                }
                                                            },
                                                            {
                                                                "argumentTypes": null,
                                                                "commonType": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                "id": 1293,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                    "argumentTypes": null,
                                                                    "id": 1290,
                                                                    "name": "_tmpInitialGas",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1260,
                                                                    "src": "7880:14:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "-",
                                                                "rightExpression": {
                                                                    "argumentTypes": null,
                                                                    "arguments": [],
                                                                    "expression": {
                                                                        "argumentTypes": [],
                                                                        "id": 1291,
                                                                        "name": "gasleft",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": -7,
                                                                        "src": "7897:7:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                                            "typeString": "function () view returns (uint256)"
                                                                        }
                                                                    },
                                                                    "id": 1292,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "kind": "functionCall",
                                                                    "lValueRequested": false,
                                                                    "names": [],
                                                                    "nodeType": "FunctionCall",
                                                                    "src": "7897:9:5",
                                                                    "tryCall": false,
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_uint256",
                                                                        "typeString": "uint256"
                                                                    }
                                                                },
                                                                "src": "7880:26:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "id": 1294,
                                                                    "name": "vars",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1154,
                                                                    "src": "7924:4:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                    }
                                                                },
                                                                "id": 1295,
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "maxPossibleGas",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 1127,
                                                                "src": "7924:19:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes4",
                                                                    "typeString": "bytes4"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                                    "typeString": "bytes calldata"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                                    "typeString": "bytes calldata"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                                    "typeString": "struct IPaymaster.GasLimits memory"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1280,
                                                                "name": "abi",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -1,
                                                                "src": "7752:3:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_abi",
                                                                    "typeString": "abi"
                                                                }
                                                            },
                                                            "id": 1281,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "encodeWithSelector",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "7752:22:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                                "typeString": "function (bytes4) pure returns (bytes memory)"
                                                            }
                                                        },
                                                        "id": 1296,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "7752:209:5",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "id": 1275,
                                                                    "name": "this",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": -28,
                                                                    "src": "7709:4:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_contract$_RelayHub_$1878",
                                                                        "typeString": "contract RelayHub"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_contract$_RelayHub_$1878",
                                                                        "typeString": "contract RelayHub"
                                                                    }
                                                                ],
                                                                "id": 1274,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "7701:7:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_$",
                                                                    "typeString": "type(address)"
                                                                },
                                                                "typeName": {
                                                                    "id": 1273,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "7701:7:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": null,
                                                                        "typeString": null
                                                                    }
                                                                }
                                                            },
                                                            "id": 1276,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "7701:13:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "id": 1277,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "call",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "7701:18:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 1279,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        "gas"
                                                    ],
                                                    "nodeType": "FunctionCallOptions",
                                                    "options": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1278,
                                                            "name": "innerGasLimit",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1242,
                                                            "src": "7724:13:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "src": "7701:37:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas",
                                                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                    }
                                                },
                                                "id": 1297,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "7701:270:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                    "typeString": "tuple(bool,bytes memory)"
                                                }
                                            },
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "7654:317:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1303,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1299,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1154,
                                                        "src": "7981:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1301,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "success",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1113,
                                                    "src": "7981:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "id": 1302,
                                                    "name": "success",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1270,
                                                    "src": "7996:7:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "7981:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "id": 1304,
                                            "nodeType": "ExpressionStatement",
                                            "src": "7981:22:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1313,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1305,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1154,
                                                        "src": "8013:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1307,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "memberName": "innerGasUsed",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1125,
                                                    "src": "8013:17:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 1312,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1308,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1154,
                                                            "src": "8033:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 1309,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "gasBeforeInner",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1129,
                                                        "src": "8033:19:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "-",
                                                    "rightExpression": {
                                                        "argumentTypes": null,
                                                        "arguments": [],
                                                        "expression": {
                                                            "argumentTypes": [],
                                                            "id": 1310,
                                                            "name": "gasleft",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -7,
                                                            "src": "8053:7:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                                "typeString": "function () view returns (uint256)"
                                                            }
                                                        },
                                                        "id": 1311,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "8053:9:5",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "8033:29:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "8013:49:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 1314,
                                            "nodeType": "ExpressionStatement",
                                            "src": "8013:49:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1329,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1315,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1154,
                                                                "src": "8073:4:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 1317,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "status",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1123,
                                                            "src": "8073:11:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                "typeString": "enum IRelayHub.RelayCallStatus"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1318,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1154,
                                                                "src": "8086:4:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                }
                                                            },
                                                            "id": 1319,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "relayedCallReturnValue",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1119,
                                                            "src": "8086:27:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "id": 1320,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "8072:42:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(enum IRelayHub.RelayCallStatus,bytes memory)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1323,
                                                            "name": "relayCallStatus",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1272,
                                                            "src": "8128:15:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "components": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "id": 1324,
                                                                    "name": "RelayCallStatus",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 3447,
                                                                    "src": "8146:15:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                        "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                    }
                                                                },
                                                                {
                                                                    "argumentTypes": null,
                                                                    "id": 1326,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "8163:5:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                        "typeString": "type(bytes storage pointer)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 1325,
                                                                        "name": "bytes",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "8163:5:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": null,
                                                                            "typeString": null
                                                                        }
                                                                    }
                                                                }
                                                            ],
                                                            "id": 1327,
                                                            "isConstant": false,
                                                            "isInlineArray": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "TupleExpression",
                                                            "src": "8145:24:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$_t_type$_t_enum$_RelayCallStatus_$3447_$_$_t_type$_t_bytes_storage_ptr_$_$",
                                                                "typeString": "tuple(type(enum IRelayHub.RelayCallStatus),type(bytes storage pointer))"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_tuple$_t_type$_t_enum$_RelayCallStatus_$3447_$_$_t_type$_t_bytes_storage_ptr_$_$",
                                                                "typeString": "tuple(type(enum IRelayHub.RelayCallStatus),type(bytes storage pointer))"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1321,
                                                            "name": "abi",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -1,
                                                            "src": "8117:3:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_abi",
                                                                "typeString": "abi"
                                                            }
                                                        },
                                                        "id": 1322,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "decode",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "8117:10:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                            "typeString": "function () pure"
                                                        }
                                                    },
                                                    "id": 1328,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "8117:53:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(enum IRelayHub.RelayCallStatus,bytes memory)"
                                                    }
                                                },
                                                "src": "8072:98:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 1330,
                                            "nodeType": "ExpressionStatement",
                                            "src": "8072:98:5"
                                        },
                                        {
                                            "condition": {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1335,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1331,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1154,
                                                            "src": "8185:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 1332,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "relayedCallReturnValue",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1119,
                                                        "src": "8185:27:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    },
                                                    "id": 1333,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "length",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "8185:34:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": ">",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "30",
                                                    "id": 1334,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "8220:1:5",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                },
                                                "src": "8185:36:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "falseBody": null,
                                            "id": 1344,
                                            "nodeType": "IfStatement",
                                            "src": "8180:133:5",
                                            "trueBody": {
                                                "id": 1343,
                                                "nodeType": "Block",
                                                "src": "8224:89:5",
                                                "statements": [
                                                    {
                                                        "eventCall": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1337,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1154,
                                                                        "src": "8261:4:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 1338,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "status",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1123,
                                                                    "src": "8261:11:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1339,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1154,
                                                                        "src": "8274:4:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 1340,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayedCallReturnValue",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1119,
                                                                    "src": "8274:27:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 1336,
                                                                "name": "TransactionResult",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3439,
                                                                "src": "8243:17:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_event_nonpayable$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory)"
                                                                }
                                                            },
                                                            "id": 1341,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "8243:59:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 1342,
                                                        "nodeType": "EmitStatement",
                                                        "src": "8238:64:5"
                                                    }
                                                ]
                                            }
                                        }
                                    ]
                                },
                                {
                                    "id": 1489,
                                    "nodeType": "Block",
                                    "src": "8324:1776:5",
                                    "statements": [
                                        {
                                            "condition": {
                                                "argumentTypes": null,
                                                "id": 1348,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "8338:13:5",
                                                "subExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1346,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1154,
                                                        "src": "8339:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1347,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "success",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1113,
                                                    "src": "8339:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "falseBody": null,
                                            "id": 1411,
                                            "nodeType": "IfStatement",
                                            "src": "8334:987:5",
                                            "trueBody": {
                                                "id": 1410,
                                                "nodeType": "Block",
                                                "src": "8353:968:5",
                                                "statements": [
                                                    {
                                                        "condition": {
                                                            "argumentTypes": null,
                                                            "commonType": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            "id": 1374,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "argumentTypes": null,
                                                                "components": [
                                                                    {
                                                                        "argumentTypes": null,
                                                                        "commonType": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        },
                                                                        "id": 1354,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "leftExpression": {
                                                                            "argumentTypes": null,
                                                                            "expression": {
                                                                                "argumentTypes": null,
                                                                                "id": 1349,
                                                                                "name": "vars",
                                                                                "nodeType": "Identifier",
                                                                                "overloadedDeclarations": [],
                                                                                "referencedDeclaration": 1154,
                                                                                "src": "8426:4:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                    "typeString": "struct RelayHub.RelayCallData memory"
                                                                                }
                                                                            },
                                                                            "id": 1350,
                                                                            "isConstant": false,
                                                                            "isLValue": true,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "memberName": "innerGasUsed",
                                                                            "nodeType": "MemberAccess",
                                                                            "referencedDeclaration": 1125,
                                                                            "src": "8426:17:5",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_uint256",
                                                                                "typeString": "uint256"
                                                                            }
                                                                        },
                                                                        "nodeType": "BinaryOperation",
                                                                        "operator": "<",
                                                                        "rightExpression": {
                                                                            "argumentTypes": null,
                                                                            "expression": {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1351,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 1154,
                                                                                    "src": "8446:4:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 1352,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "gasLimits",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1121,
                                                                                "src": "8446:14:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_struct$_GasLimits_$3253_memory_ptr",
                                                                                    "typeString": "struct IPaymaster.GasLimits memory"
                                                                                }
                                                                            },
                                                                            "id": 1353,
                                                                            "isConstant": false,
                                                                            "isLValue": true,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "memberName": "acceptanceBudget",
                                                                            "nodeType": "MemberAccess",
                                                                            "referencedDeclaration": 3248,
                                                                            "src": "8446:31:5",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_uint256",
                                                                                "typeString": "uint256"
                                                                            }
                                                                        },
                                                                        "src": "8426:51:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_bool",
                                                                            "typeString": "bool"
                                                                        }
                                                                    }
                                                                ],
                                                                "id": 1355,
                                                                "isConstant": false,
                                                                "isInlineArray": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "TupleExpression",
                                                                "src": "8425:54:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "&&",
                                                            "rightExpression": {
                                                                "argumentTypes": null,
                                                                "components": [
                                                                    {
                                                                        "argumentTypes": null,
                                                                        "commonType": {
                                                                            "typeIdentifier": "t_bool",
                                                                            "typeString": "bool"
                                                                        },
                                                                        "id": 1372,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "leftExpression": {
                                                                            "argumentTypes": null,
                                                                            "commonType": {
                                                                                "typeIdentifier": "t_bool",
                                                                                "typeString": "bool"
                                                                            },
                                                                            "id": 1366,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "leftExpression": {
                                                                                "argumentTypes": null,
                                                                                "commonType": {
                                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                },
                                                                                "id": 1360,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "leftExpression": {
                                                                                    "argumentTypes": null,
                                                                                    "expression": {
                                                                                        "argumentTypes": null,
                                                                                        "id": 1356,
                                                                                        "name": "vars",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 1154,
                                                                                        "src": "8505:4:5",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                                        }
                                                                                    },
                                                                                    "id": 1357,
                                                                                    "isConstant": false,
                                                                                    "isLValue": true,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "status",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 1123,
                                                                                    "src": "8505:11:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                    }
                                                                                },
                                                                                "nodeType": "BinaryOperation",
                                                                                "operator": "==",
                                                                                "rightExpression": {
                                                                                    "argumentTypes": null,
                                                                                    "expression": {
                                                                                        "argumentTypes": null,
                                                                                        "id": 1358,
                                                                                        "name": "RelayCallStatus",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 3447,
                                                                                        "src": "8520:15:5",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                                        }
                                                                                    },
                                                                                    "id": 1359,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": true,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "RejectedByPreRelayed",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": null,
                                                                                    "src": "8520:36:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                    }
                                                                                },
                                                                                "src": "8505:51:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bool",
                                                                                    "typeString": "bool"
                                                                                }
                                                                            },
                                                                            "nodeType": "BinaryOperation",
                                                                            "operator": "||",
                                                                            "rightExpression": {
                                                                                "argumentTypes": null,
                                                                                "commonType": {
                                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                },
                                                                                "id": 1365,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "leftExpression": {
                                                                                    "argumentTypes": null,
                                                                                    "expression": {
                                                                                        "argumentTypes": null,
                                                                                        "id": 1361,
                                                                                        "name": "vars",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 1154,
                                                                                        "src": "8580:4:5",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                            "typeString": "struct RelayHub.RelayCallData memory"
                                                                                        }
                                                                                    },
                                                                                    "id": 1362,
                                                                                    "isConstant": false,
                                                                                    "isLValue": true,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "status",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 1123,
                                                                                    "src": "8580:11:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                    }
                                                                                },
                                                                                "nodeType": "BinaryOperation",
                                                                                "operator": "==",
                                                                                "rightExpression": {
                                                                                    "argumentTypes": null,
                                                                                    "expression": {
                                                                                        "argumentTypes": null,
                                                                                        "id": 1363,
                                                                                        "name": "RelayCallStatus",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 3447,
                                                                                        "src": "8595:15:5",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                                        }
                                                                                    },
                                                                                    "id": 1364,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": true,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "RejectedByForwarder",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": null,
                                                                                    "src": "8595:35:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                    }
                                                                                },
                                                                                "src": "8580:50:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bool",
                                                                                    "typeString": "bool"
                                                                                }
                                                                            },
                                                                            "src": "8505:125:5",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_bool",
                                                                                "typeString": "bool"
                                                                            }
                                                                        },
                                                                        "nodeType": "BinaryOperation",
                                                                        "operator": "||",
                                                                        "rightExpression": {
                                                                            "argumentTypes": null,
                                                                            "commonType": {
                                                                                "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                "typeString": "enum IRelayHub.RelayCallStatus"
                                                                            },
                                                                            "id": 1371,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "leftExpression": {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1367,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 1154,
                                                                                    "src": "8654:4:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 1368,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "status",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1123,
                                                                                "src": "8654:11:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                }
                                                                            },
                                                                            "nodeType": "BinaryOperation",
                                                                            "operator": "==",
                                                                            "rightExpression": {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1369,
                                                                                    "name": "RelayCallStatus",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 3447,
                                                                                    "src": "8669:15:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                                        "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                                    }
                                                                                },
                                                                                "id": 1370,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": true,
                                                                                "lValueRequested": false,
                                                                                "memberName": "RejectedByRecipientRevert",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": null,
                                                                                "src": "8669:41:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                                                }
                                                                            },
                                                                            "src": "8654:56:5",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_bool",
                                                                                "typeString": "bool"
                                                                            }
                                                                        },
                                                                        "src": "8505:205:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_bool",
                                                                            "typeString": "bool"
                                                                        }
                                                                    }
                                                                ],
                                                                "id": 1373,
                                                                "isConstant": false,
                                                                "isInlineArray": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "TupleExpression",
                                                                "src": "8483:296:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            },
                                                            "src": "8425:354:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        "falseBody": null,
                                                        "id": 1409,
                                                        "nodeType": "IfStatement",
                                                        "src": "8420:891:5",
                                                        "trueBody": {
                                                            "id": 1408,
                                                            "nodeType": "Block",
                                                            "src": "8781:530:5",
                                                            "statements": [
                                                                {
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1377,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "leftHandSide": {
                                                                            "argumentTypes": null,
                                                                            "id": 1375,
                                                                            "name": "paymasterAccepted",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 1146,
                                                                            "src": "8799:17:5",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_bool",
                                                                                "typeString": "bool"
                                                                            }
                                                                        },
                                                                        "nodeType": "Assignment",
                                                                        "operator": "=",
                                                                        "rightHandSide": {
                                                                            "argumentTypes": null,
                                                                            "hexValue": "66616c7365",
                                                                            "id": 1376,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "kind": "bool",
                                                                            "lValueRequested": false,
                                                                            "nodeType": "Literal",
                                                                            "src": "8817:5:5",
                                                                            "subdenomination": null,
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_bool",
                                                                                "typeString": "bool"
                                                                            },
                                                                            "value": "false"
                                                                        },
                                                                        "src": "8799:23:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_bool",
                                                                            "typeString": "bool"
                                                                        }
                                                                    },
                                                                    "id": 1378,
                                                                    "nodeType": "ExpressionStatement",
                                                                    "src": "8799:23:5"
                                                                },
                                                                {
                                                                    "eventCall": {
                                                                        "argumentTypes": null,
                                                                        "arguments": [
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "baseExpression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1380,
                                                                                    "name": "workerToManager",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 749,
                                                                                    "src": "8898:15:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                                        "typeString": "mapping(address => address)"
                                                                                    }
                                                                                },
                                                                                "id": 1383,
                                                                                "indexExpression": {
                                                                                    "argumentTypes": null,
                                                                                    "expression": {
                                                                                        "argumentTypes": null,
                                                                                        "id": 1381,
                                                                                        "name": "msg",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": -15,
                                                                                        "src": "8914:3:5",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_magic_message",
                                                                                            "typeString": "msg"
                                                                                        }
                                                                                    },
                                                                                    "id": 1382,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "sender",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": null,
                                                                                    "src": "8914:10:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_address_payable",
                                                                                        "typeString": "address payable"
                                                                                    }
                                                                                },
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "nodeType": "IndexAccess",
                                                                                "src": "8898:27:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "expression": {
                                                                                        "argumentTypes": null,
                                                                                        "id": 1384,
                                                                                        "name": "relayRequest",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 1136,
                                                                                        "src": "8947:12:5",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                                        }
                                                                                    },
                                                                                    "id": 1385,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "relayData",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 3231,
                                                                                    "src": "8947:22:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                                    }
                                                                                },
                                                                                "id": 1386,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "paymaster",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 3220,
                                                                                "src": "8947:32:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "expression": {
                                                                                        "argumentTypes": null,
                                                                                        "id": 1387,
                                                                                        "name": "relayRequest",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 1136,
                                                                                        "src": "9001:12:5",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                                        }
                                                                                    },
                                                                                    "id": 1388,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "request",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 3229,
                                                                                    "src": "9001:20:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_calldata_ptr",
                                                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                                    }
                                                                                },
                                                                                "id": 1389,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "from",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 2939,
                                                                                "src": "9001:25:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "expression": {
                                                                                        "argumentTypes": null,
                                                                                        "id": 1390,
                                                                                        "name": "relayRequest",
                                                                                        "nodeType": "Identifier",
                                                                                        "overloadedDeclarations": [],
                                                                                        "referencedDeclaration": 1136,
                                                                                        "src": "9048:12:5",
                                                                                        "typeDescriptions": {
                                                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                                        }
                                                                                    },
                                                                                    "id": 1391,
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "memberName": "request",
                                                                                    "nodeType": "MemberAccess",
                                                                                    "referencedDeclaration": 3229,
                                                                                    "src": "9048:20:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_ForwardRequest_$2950_calldata_ptr",
                                                                                        "typeString": "struct IForwarder.ForwardRequest calldata"
                                                                                    }
                                                                                },
                                                                                "id": 1392,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "to",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 2941,
                                                                                "src": "9048:23:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                }
                                                                            },
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1393,
                                                                                    "name": "msg",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": -15,
                                                                                    "src": "9093:3:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_magic_message",
                                                                                        "typeString": "msg"
                                                                                    }
                                                                                },
                                                                                "id": 1394,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "sender",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": null,
                                                                                "src": "9093:10:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_address_payable",
                                                                                    "typeString": "address payable"
                                                                                }
                                                                            },
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1395,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 1154,
                                                                                    "src": "9125:4:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 1396,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "functionSelector",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1115,
                                                                                "src": "9125:21:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bytes4",
                                                                                    "typeString": "bytes4"
                                                                                }
                                                                            },
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1397,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 1154,
                                                                                    "src": "9168:4:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 1398,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "innerGasUsed",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1125,
                                                                                "src": "9168:17:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            },
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1399,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 1154,
                                                                                    "src": "9207:4:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 1400,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "relayedCallReturnValue",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1119,
                                                                                "src": "9207:27:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                                    "typeString": "bytes memory"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "expression": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_address",
                                                                                    "typeString": "address"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_address_payable",
                                                                                    "typeString": "address payable"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_bytes4",
                                                                                    "typeString": "bytes4"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                },
                                                                                {
                                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                                    "typeString": "bytes memory"
                                                                                }
                                                                            ],
                                                                            "id": 1379,
                                                                            "name": "TransactionRejectedByPaymaster",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 3415,
                                                                            "src": "8846:30:5",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_bytes4_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                                                                                "typeString": "function (address,address,address,address,address,bytes4,uint256,bytes memory)"
                                                                            }
                                                                        },
                                                                        "id": 1401,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "kind": "functionCall",
                                                                        "lValueRequested": false,
                                                                        "names": [],
                                                                        "nodeType": "FunctionCall",
                                                                        "src": "8846:389:5",
                                                                        "tryCall": false,
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_tuple$__$",
                                                                            "typeString": "tuple()"
                                                                        }
                                                                    },
                                                                    "id": 1402,
                                                                    "nodeType": "EmitStatement",
                                                                    "src": "8841:394:5"
                                                                },
                                                                {
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "components": [
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "hexValue": "66616c7365",
                                                                                "id": 1403,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": true,
                                                                                "kind": "bool",
                                                                                "lValueRequested": false,
                                                                                "nodeType": "Literal",
                                                                                "src": "9261:5:5",
                                                                                "subdenomination": null,
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bool",
                                                                                    "typeString": "bool"
                                                                                },
                                                                                "value": "false"
                                                                            },
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1404,
                                                                                    "name": "vars",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 1154,
                                                                                    "src": "9268:4:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                                        "typeString": "struct RelayHub.RelayCallData memory"
                                                                                    }
                                                                                },
                                                                                "id": 1405,
                                                                                "isConstant": false,
                                                                                "isLValue": true,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "relayedCallReturnValue",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 1119,
                                                                                "src": "9268:27:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                                                    "typeString": "bytes memory"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "id": 1406,
                                                                        "isConstant": false,
                                                                        "isInlineArray": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "lValueRequested": false,
                                                                        "nodeType": "TupleExpression",
                                                                        "src": "9260:36:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                                            "typeString": "tuple(bool,bytes memory)"
                                                                        }
                                                                    },
                                                                    "functionReturnParameters": 1149,
                                                                    "id": 1407,
                                                                    "nodeType": "Return",
                                                                    "src": "9253:43:5"
                                                                }
                                                            ]
                                                        }
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            "assignments": [
                                                1413
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1413,
                                                    "mutability": "mutable",
                                                    "name": "gasUsed",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1489,
                                                    "src": "9418:15:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "typeName": {
                                                        "id": 1412,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "9418:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1421,
                                            "initialValue": {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1420,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                        {
                                                            "argumentTypes": null,
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 1417,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "argumentTypes": null,
                                                                "id": 1414,
                                                                "name": "externalGasLimit",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1142,
                                                                "src": "9437:16:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "-",
                                                            "rightExpression": {
                                                                "argumentTypes": null,
                                                                "arguments": [],
                                                                "expression": {
                                                                    "argumentTypes": [],
                                                                    "id": 1415,
                                                                    "name": "gasleft",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": -7,
                                                                    "src": "9456:7:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                                        "typeString": "function () view returns (uint256)"
                                                                    }
                                                                },
                                                                "id": 1416,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "9456:9:5",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "src": "9437:28:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "id": 1418,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "9436:30:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "+",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1419,
                                                    "name": "gasOverhead",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 729,
                                                    "src": "9469:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "9436:44:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "9418:62:5"
                                        },
                                        {
                                            "assignments": [
                                                1423
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1423,
                                                    "mutability": "mutable",
                                                    "name": "charge",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1489,
                                                    "src": "9490:14:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "typeName": {
                                                        "id": 1422,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "9490:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1429,
                                            "initialValue": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 1425,
                                                        "name": "gasUsed",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1413,
                                                        "src": "9523:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1426,
                                                            "name": "relayRequest",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1136,
                                                            "src": "9532:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            }
                                                        },
                                                        "id": 1427,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "relayData",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3231,
                                                        "src": "9532:22:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayData calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayData calldata"
                                                        }
                                                    ],
                                                    "id": 1424,
                                                    "name": "calculateCharge",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1793,
                                                    "src": "9507:15:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_struct$_RelayData_$3227_calldata_ptr_$returns$_t_uint256_$",
                                                        "typeString": "function (uint256,struct GsnTypes.RelayData calldata) view returns (uint256)"
                                                    }
                                                },
                                                "id": 1428,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "9507:48:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "9490:65:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1443,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1430,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 758,
                                                        "src": "9566:8:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 1434,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1431,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1136,
                                                                "src": "9575:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 1432,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayData",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3231,
                                                            "src": "9575:22:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayData calldata"
                                                            }
                                                        },
                                                        "id": 1433,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "paymaster",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3220,
                                                        "src": "9575:32:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "IndexAccess",
                                                    "src": "9566:42:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1441,
                                                            "name": "charge",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1423,
                                                            "src": "9658:6:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "baseExpression": {
                                                                "argumentTypes": null,
                                                                "id": 1435,
                                                                "name": "balances",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 758,
                                                                "src": "9611:8:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                    "typeString": "mapping(address => uint256)"
                                                                }
                                                            },
                                                            "id": 1439,
                                                            "indexExpression": {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1436,
                                                                        "name": "relayRequest",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1136,
                                                                        "src": "9620:12:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                        }
                                                                    },
                                                                    "id": 1437,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayData",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 3231,
                                                                    "src": "9620:22:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                    }
                                                                },
                                                                "id": 1438,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "paymaster",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 3220,
                                                                "src": "9620:32:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "9611:42:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "id": 1440,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "sub",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 6611,
                                                        "src": "9611:46:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                        }
                                                    },
                                                    "id": 1442,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "9611:54:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "9566:99:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 1444,
                                            "nodeType": "ExpressionStatement",
                                            "src": "9566:99:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1460,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "baseExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1445,
                                                        "name": "balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 758,
                                                        "src": "9675:8:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 1450,
                                                    "indexExpression": {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                            "argumentTypes": null,
                                                            "id": 1446,
                                                            "name": "workerToManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 749,
                                                            "src": "9684:15:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                "typeString": "mapping(address => address)"
                                                            }
                                                        },
                                                        "id": 1449,
                                                        "indexExpression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1447,
                                                                "name": "msg",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -15,
                                                                "src": "9700:3:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_message",
                                                                    "typeString": "msg"
                                                                }
                                                            },
                                                            "id": 1448,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "sender",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "9700:10:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "9684:27:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "IndexAccess",
                                                    "src": "9675:37:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1458,
                                                            "name": "charge",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1423,
                                                            "src": "9757:6:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "baseExpression": {
                                                                "argumentTypes": null,
                                                                "id": 1451,
                                                                "name": "balances",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 758,
                                                                "src": "9715:8:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                    "typeString": "mapping(address => uint256)"
                                                                }
                                                            },
                                                            "id": 1456,
                                                            "indexExpression": {
                                                                "argumentTypes": null,
                                                                "baseExpression": {
                                                                    "argumentTypes": null,
                                                                    "id": 1452,
                                                                    "name": "workerToManager",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 749,
                                                                    "src": "9724:15:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                        "typeString": "mapping(address => address)"
                                                                    }
                                                                },
                                                                "id": 1455,
                                                                "indexExpression": {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1453,
                                                                        "name": "msg",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": -15,
                                                                        "src": "9740:3:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_magic_message",
                                                                            "typeString": "msg"
                                                                        }
                                                                    },
                                                                    "id": 1454,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "sender",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": null,
                                                                    "src": "9740:10:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_address_payable",
                                                                        "typeString": "address payable"
                                                                    }
                                                                },
                                                                "isConstant": false,
                                                                "isLValue": true,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "nodeType": "IndexAccess",
                                                                "src": "9724:27:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "9715:37:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        },
                                                        "id": 1457,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "add",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 6594,
                                                        "src": "9715:41:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                        }
                                                    },
                                                    "id": 1459,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "9715:49:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "9675:89:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 1461,
                                            "nodeType": "ExpressionStatement",
                                            "src": "9675:89:5"
                                        },
                                        {
                                            "eventCall": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "baseExpression": {
                                                            "argumentTypes": null,
                                                            "id": 1463,
                                                            "name": "workerToManager",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 749,
                                                            "src": "9812:15:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                                "typeString": "mapping(address => address)"
                                                            }
                                                        },
                                                        "id": 1466,
                                                        "indexExpression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1464,
                                                                "name": "msg",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -15,
                                                                "src": "9828:3:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_magic_message",
                                                                    "typeString": "msg"
                                                                }
                                                            },
                                                            "id": 1465,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "sender",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "9828:10:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "9812:27:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1467,
                                                            "name": "msg",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -15,
                                                            "src": "9853:3:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_message",
                                                                "typeString": "msg"
                                                            }
                                                        },
                                                        "id": 1468,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "sender",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "9853:10:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1469,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1136,
                                                                "src": "9877:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 1470,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "request",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3229,
                                                            "src": "9877:20:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 1471,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "from",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2939,
                                                        "src": "9877:25:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1472,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1136,
                                                                "src": "9916:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 1473,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "request",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3229,
                                                            "src": "9916:20:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_ForwardRequest_$2950_calldata_ptr",
                                                                "typeString": "struct IForwarder.ForwardRequest calldata"
                                                            }
                                                        },
                                                        "id": 1474,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "to",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 2941,
                                                        "src": "9916:23:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1475,
                                                                "name": "relayRequest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1136,
                                                                "src": "9953:12:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                }
                                                            },
                                                            "id": 1476,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "relayData",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3231,
                                                            "src": "9953:22:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayData calldata"
                                                            }
                                                        },
                                                        "id": 1477,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "paymaster",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3220,
                                                        "src": "9953:32:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1478,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1154,
                                                            "src": "9999:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 1479,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "functionSelector",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1115,
                                                        "src": "9999:21:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1480,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1154,
                                                            "src": "10034:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayCallData_$1132_memory_ptr",
                                                                "typeString": "struct RelayHub.RelayCallData memory"
                                                            }
                                                        },
                                                        "id": 1481,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "status",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1123,
                                                        "src": "10034:11:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                                        }
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 1482,
                                                        "name": "charge",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1423,
                                                        "src": "10059:6:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address_payable",
                                                            "typeString": "address payable"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes4",
                                                            "typeString": "bytes4"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "id": 1462,
                                                    "name": "TransactionRelayed",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3433,
                                                    "src": "9780:18:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_bytes4_$_t_enum$_RelayCallStatus_$3447_$_t_uint256_$returns$__$",
                                                        "typeString": "function (address,address,address,address,address,bytes4,enum IRelayHub.RelayCallStatus,uint256)"
                                                    }
                                                },
                                                "id": 1483,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "9780:286:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 1484,
                                            "nodeType": "EmitStatement",
                                            "src": "9775:291:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "components": [
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "74727565",
                                                        "id": 1485,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "bool",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "10084:4:5",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        },
                                                        "value": "true"
                                                    },
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "",
                                                        "id": 1486,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "10090:2:5",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                            "typeString": "literal_string \"\""
                                                        },
                                                        "value": ""
                                                    }
                                                ],
                                                "id": 1487,
                                                "isConstant": false,
                                                "isInlineArray": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "TupleExpression",
                                                "src": "10083:10:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$_t_bool_$_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_$",
                                                    "typeString": "tuple(bool,literal_string \"\")"
                                                }
                                            },
                                            "functionReturnParameters": 1149,
                                            "id": 1488,
                                            "nodeType": "Return",
                                            "src": "10076:17:5"
                                        }
                                    ]
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "27b4256a",
                        "id": 1491,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "relayCall",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1144,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "6100:8:5"
                        },
                        "parameters": {
                            "id": 1143,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1134,
                                    "mutability": "mutable",
                                    "name": "paymasterMaxAcceptanceBudget",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1491,
                                    "src": "5888:33:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1133,
                                        "name": "uint",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5888:4:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1136,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1491,
                                    "src": "5931:43:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1135,
                                        "name": "GsnTypes.RelayRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3232,
                                        "src": "5931:21:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1138,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1491,
                                    "src": "5984:24:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1137,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5984:5:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1140,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1491,
                                    "src": "6018:27:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1139,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6018:5:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1142,
                                    "mutability": "mutable",
                                    "name": "externalGasLimit",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1491,
                                    "src": "6055:21:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1141,
                                        "name": "uint",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6055:4:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5878:204:5"
                        },
                        "returnParameters": {
                            "id": 1149,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1146,
                                    "mutability": "mutable",
                                    "name": "paymasterAccepted",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1491,
                                    "src": "6122:22:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 1145,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6122:4:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1148,
                                    "mutability": "mutable",
                                    "name": "returnValue",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1491,
                                    "src": "6146:24:5",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1147,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6146:5:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6121:50:5"
                        },
                        "scope": 1878,
                        "src": "5860:4246:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "canonicalName": "RelayHub.InnerRelayCallData",
                        "id": 1506,
                        "members": [
                            {
                                "constant": false,
                                "id": 1493,
                                "mutability": "mutable",
                                "name": "balanceBefore",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1506,
                                "src": "10148:21:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 1492,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10148:7:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1495,
                                "mutability": "mutable",
                                "name": "preReturnValue",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1506,
                                "src": "10179:22:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                },
                                "typeName": {
                                    "id": 1494,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10179:7:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1497,
                                "mutability": "mutable",
                                "name": "relayedCallSuccess",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1506,
                                "src": "10211:23:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                },
                                "typeName": {
                                    "id": 1496,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10211:4:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1499,
                                "mutability": "mutable",
                                "name": "relayedCallReturnValue",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1506,
                                "src": "10244:28:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1498,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10244:5:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1501,
                                "mutability": "mutable",
                                "name": "recipientContext",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1506,
                                "src": "10282:22:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1500,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10282:5:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1503,
                                "mutability": "mutable",
                                "name": "data",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1506,
                                "src": "10314:10:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage_ptr",
                                    "typeString": "bytes"
                                },
                                "typeName": {
                                    "id": 1502,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10314:5:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage_ptr",
                                        "typeString": "bytes"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 1505,
                                "mutability": "mutable",
                                "name": "rejectOnRecipientRevert",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 1506,
                                "src": "10334:28:5",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                },
                                "typeName": {
                                    "id": 1504,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10334:4:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    }
                                },
                                "value": null,
                                "visibility": "internal"
                            }
                        ],
                        "name": "InnerRelayCallData",
                        "nodeType": "StructDefinition",
                        "scope": 1878,
                        "src": "10112:257:5",
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 1736,
                            "nodeType": "Block",
                            "src": "10704:3601:5",
                            "statements": [
                                {
                                    "assignments": [
                                        1526
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1526,
                                            "mutability": "mutable",
                                            "name": "vars",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 1736,
                                            "src": "10714:30:5",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                "typeString": "struct RelayHub.InnerRelayCallData"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 1525,
                                                "name": "InnerRelayCallData",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 1506,
                                                "src": "10714:18:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_storage_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1527,
                                    "initialValue": null,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "10714:30:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 1535,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1529,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "11172:3:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 1530,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "11172:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1533,
                                                            "name": "this",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -28,
                                                            "src": "11194:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_RelayHub_$1878",
                                                                "typeString": "contract RelayHub"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_contract$_RelayHub_$1878",
                                                                "typeString": "contract RelayHub"
                                                            }
                                                        ],
                                                        "id": 1532,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "11186:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 1531,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "11186:7:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 1534,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "11186:13:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "11172:27:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "4f6e6c792052656c61794875622073686f756c642063616c6c20746869732066756e6374696f6e",
                                                "id": 1536,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "11201:41:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2f3778b0cbc3f3aaa4b72bdce294e5d98b204a5d103af0bd759eae414f007819",
                                                    "typeString": "literal_string \"Only RelayHub should call this function\""
                                                },
                                                "value": "Only RelayHub should call this function"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2f3778b0cbc3f3aaa4b72bdce294e5d98b204a5d103af0bd759eae414f007819",
                                                    "typeString": "literal_string \"Only RelayHub should call this function\""
                                                }
                                            ],
                                            "id": 1528,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "11164:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1537,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "11164:79:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1538,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11164:79:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1547,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1539,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1526,
                                                "src": "11642:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 1541,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "balanceBefore",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1493,
                                            "src": "11642:18:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 1542,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 758,
                                                "src": "11663:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 1546,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1543,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1508,
                                                        "src": "11672:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 1544,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3231,
                                                    "src": "11672:22:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 1545,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "paymaster",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3220,
                                                "src": "11672:32:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "11663:42:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "11642:63:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1548,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11642:63:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1562,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1549,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1526,
                                                "src": "11835:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 1551,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "data",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1503,
                                            "src": "11835:9:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1554,
                                                            "name": "IPaymaster",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3310,
                                                            "src": "11883:10:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IPaymaster_$3310_$",
                                                                "typeString": "type(contract IPaymaster)"
                                                            }
                                                        },
                                                        "id": 1555,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "preRelayedCall",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3292,
                                                        "src": "11883:25:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_declaration_nonpayable$_t_struct$_RelayRequest_$3232_calldata_ptr_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$_t_bool_$",
                                                            "typeString": "function IPaymaster.preRelayedCall(struct GsnTypes.RelayRequest calldata,bytes calldata,bytes calldata,uint256) returns (bytes memory,bool)"
                                                        }
                                                    },
                                                    "id": 1556,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "selector",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "11883:34:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "id": 1557,
                                                    "name": "relayRequest",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1508,
                                                    "src": "11935:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "id": 1558,
                                                    "name": "signature",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1510,
                                                    "src": "11949:9:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "id": 1559,
                                                    "name": "approvalData",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1512,
                                                    "src": "11960:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "id": 1560,
                                                    "name": "maxPossibleGas",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1518,
                                                    "src": "11974:14:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 1552,
                                                    "name": "abi",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -1,
                                                    "src": "11847:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_abi",
                                                        "typeString": "abi"
                                                    }
                                                },
                                                "id": 1553,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "encodeWithSelector",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "11847:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                    "typeString": "function (bytes4) pure returns (bytes memory)"
                                                }
                                            },
                                            "id": 1561,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "11847:151:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                            }
                                        },
                                        "src": "11835:163:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "id": 1563,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11835:163:5"
                                },
                                {
                                    "id": 1618,
                                    "nodeType": "Block",
                                    "src": "12008:477:5",
                                    "statements": [
                                        {
                                            "assignments": [
                                                1565
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1565,
                                                    "mutability": "mutable",
                                                    "name": "success",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1618,
                                                    "src": "12022:12:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "typeName": {
                                                        "id": 1564,
                                                        "name": "bool",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "12022:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1566,
                                            "initialValue": null,
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "12022:12:5"
                                        },
                                        {
                                            "assignments": [
                                                1568
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1568,
                                                    "mutability": "mutable",
                                                    "name": "retData",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1618,
                                                    "src": "12048:20:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "memory",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes"
                                                    },
                                                    "typeName": {
                                                        "id": 1567,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "12048:5:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_storage_ptr",
                                                            "typeString": "bytes"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1569,
                                            "initialValue": null,
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "12048:20:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1583,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1570,
                                                            "name": "success",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1565,
                                                            "src": "12083:7:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1571,
                                                            "name": "retData",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1568,
                                                            "src": "12092:7:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "id": 1572,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "12082:18:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bytes memory)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1580,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1526,
                                                                "src": "12179:4:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 1581,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "data",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1503,
                                                            "src": "12179:9:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1573,
                                                                        "name": "relayRequest",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1508,
                                                                        "src": "12103:12:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                        }
                                                                    },
                                                                    "id": 1574,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayData",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 3231,
                                                                    "src": "12103:22:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                    }
                                                                },
                                                                "id": 1575,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "paymaster",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 3220,
                                                                "src": "12103:32:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "id": 1576,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "call",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "12103:37:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                            }
                                                        },
                                                        "id": 1579,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "names": [
                                                            "gas"
                                                        ],
                                                        "nodeType": "FunctionCallOptions",
                                                        "options": [
                                                            {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "id": 1577,
                                                                    "name": "gasLimits",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1514,
                                                                    "src": "12145:9:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_GasLimits_$3253_calldata_ptr",
                                                                        "typeString": "struct IPaymaster.GasLimits calldata"
                                                                    }
                                                                },
                                                                "id": 1578,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "preRelayedCallGasLimit",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 3250,
                                                                "src": "12145:32:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "src": "12103:75:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas",
                                                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 1582,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "12103:86:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bytes memory)"
                                                    }
                                                },
                                                "src": "12082:107:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 1584,
                                            "nodeType": "ExpressionStatement",
                                            "src": "12082:107:5"
                                        },
                                        {
                                            "condition": {
                                                "argumentTypes": null,
                                                "id": 1586,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "12207:8:5",
                                                "subExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1585,
                                                    "name": "success",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1565,
                                                    "src": "12208:7:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "falseBody": null,
                                            "id": 1600,
                                            "nodeType": "IfStatement",
                                            "src": "12203:169:5",
                                            "trueBody": {
                                                "id": 1599,
                                                "nodeType": "Block",
                                                "src": "12217:155:5",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "id": 1590,
                                                                    "name": "retData",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1568,
                                                                    "src": "12268:7:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "id": 1587,
                                                                    "name": "GsnEip712Library",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 5527,
                                                                    "src": "12235:16:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_contract$_GsnEip712Library_$5527_$",
                                                                        "typeString": "type(library GsnEip712Library)"
                                                                    }
                                                                },
                                                                "id": 1589,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "truncateInPlace",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 5435,
                                                                "src": "12235:32:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 1591,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "12235:41:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 1592,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "12235:41:5"
                                                    },
                                                    {
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1594,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 3447,
                                                                        "src": "12311:15:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 1595,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "RejectedByPreRelayed",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": null,
                                                                    "src": "12311:36:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "argumentTypes": null,
                                                                    "id": 1596,
                                                                    "name": "retData",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1568,
                                                                    "src": "12349:7:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 1593,
                                                                "name": "revertWithStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1761,
                                                                "src": "12294:16:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 1597,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "12294:63:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 1598,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "12294:63:5"
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1616,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1601,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1526,
                                                                "src": "12386:4:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 1603,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "recipientContext",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1501,
                                                            "src": "12386:21:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1604,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1526,
                                                                "src": "12409:4:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 1605,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "rejectOnRecipientRevert",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1505,
                                                            "src": "12409:28:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        }
                                                    ],
                                                    "id": 1606,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "12385:53:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_bool_$",
                                                        "typeString": "tuple(bytes memory,bool)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1609,
                                                            "name": "retData",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1568,
                                                            "src": "12452:7:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "components": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "id": 1611,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "12462:5:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                                        "typeString": "type(bytes storage pointer)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 1610,
                                                                        "name": "bytes",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "12462:5:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": null,
                                                                            "typeString": null
                                                                        }
                                                                    }
                                                                },
                                                                {
                                                                    "argumentTypes": null,
                                                                    "id": 1613,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "12468:4:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_bool_$",
                                                                        "typeString": "type(bool)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 1612,
                                                                        "name": "bool",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "12468:4:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": null,
                                                                            "typeString": null
                                                                        }
                                                                    }
                                                                }
                                                            ],
                                                            "id": 1614,
                                                            "isConstant": false,
                                                            "isInlineArray": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "TupleExpression",
                                                            "src": "12461:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_bool_$_$",
                                                                "typeString": "tuple(type(bytes storage pointer),type(bool))"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_tuple$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_bool_$_$",
                                                                "typeString": "tuple(type(bytes storage pointer),type(bool))"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1607,
                                                            "name": "abi",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -1,
                                                            "src": "12441:3:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_abi",
                                                                "typeString": "abi"
                                                            }
                                                        },
                                                        "id": 1608,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "decode",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "12441:10:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                            "typeString": "function () pure"
                                                        }
                                                    },
                                                    "id": 1615,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "12441:33:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_bool_$",
                                                        "typeString": "tuple(bytes memory,bool)"
                                                    }
                                                },
                                                "src": "12385:89:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 1617,
                                            "nodeType": "ExpressionStatement",
                                            "src": "12385:89:5"
                                        }
                                    ]
                                },
                                {
                                    "id": 1661,
                                    "nodeType": "Block",
                                    "src": "12616:597:5",
                                    "statements": [
                                        {
                                            "assignments": [
                                                1620
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1620,
                                                    "mutability": "mutable",
                                                    "name": "forwarderSuccess",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1661,
                                                    "src": "12630:21:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "typeName": {
                                                        "id": 1619,
                                                        "name": "bool",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "12630:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1621,
                                            "initialValue": null,
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "12630:21:5"
                                        },
                                        {
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1633,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1622,
                                                            "name": "forwarderSuccess",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1620,
                                                            "src": "12666:16:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1623,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1526,
                                                                "src": "12684:4:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 1624,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "relayedCallSuccess",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1497,
                                                            "src": "12684:23:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1625,
                                                                "name": "vars",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1526,
                                                                "src": "12709:4:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                }
                                                            },
                                                            "id": 1626,
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "memberName": "relayedCallReturnValue",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 1499,
                                                            "src": "12709:27:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        }
                                                    ],
                                                    "id": 1627,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "TupleExpression",
                                                    "src": "12665:72:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bool,bytes memory)"
                                                    }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1630,
                                                            "name": "relayRequest",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1508,
                                                            "src": "12765:12:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 1631,
                                                            "name": "signature",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1510,
                                                            "src": "12779:9:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_calldata_ptr",
                                                                "typeString": "bytes calldata"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                "typeString": "struct GsnTypes.RelayRequest calldata"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_bytes_calldata_ptr",
                                                                "typeString": "bytes calldata"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1628,
                                                            "name": "GsnEip712Library",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5527,
                                                            "src": "12740:16:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_GsnEip712Library_$5527_$",
                                                                "typeString": "type(library GsnEip712Library)"
                                                            }
                                                        },
                                                        "id": 1629,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "execute",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 5422,
                                                        "src": "12740:24:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_RelayRequest_$3232_calldata_ptr_$_t_bytes_calldata_ptr_$returns$_t_bool_$_t_bool_$_t_bytes_memory_ptr_$",
                                                            "typeString": "function (struct GsnTypes.RelayRequest calldata,bytes calldata) returns (bool,bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 1632,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "12740:49:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_bool_$_t_bool_$_t_bytes_memory_ptr_$",
                                                        "typeString": "tuple(bool,bool,bytes memory)"
                                                    }
                                                },
                                                "src": "12665:124:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                }
                                            },
                                            "id": 1634,
                                            "nodeType": "ExpressionStatement",
                                            "src": "12665:124:5"
                                        },
                                        {
                                            "condition": {
                                                "argumentTypes": null,
                                                "id": 1636,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "12808:17:5",
                                                "subExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1635,
                                                    "name": "forwarderSuccess",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1620,
                                                    "src": "12809:16:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "falseBody": null,
                                            "id": 1645,
                                            "nodeType": "IfStatement",
                                            "src": "12803:140:5",
                                            "trueBody": {
                                                "id": 1644,
                                                "nodeType": "Block",
                                                "src": "12828:115:5",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1638,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 3447,
                                                                        "src": "12863:15:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 1639,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "RejectedByForwarder",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": null,
                                                                    "src": "12863:35:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1640,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1526,
                                                                        "src": "12900:4:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 1641,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayedCallReturnValue",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1499,
                                                                    "src": "12900:27:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 1637,
                                                                "name": "revertWithStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1761,
                                                                "src": "12846:16:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 1642,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "12846:82:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 1643,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "12846:82:5"
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            "condition": {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "id": 1651,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1646,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1526,
                                                        "src": "12961:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1647,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "rejectOnRecipientRevert",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1505,
                                                    "src": "12961:28:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "&&",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1650,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "UnaryOperation",
                                                    "operator": "!",
                                                    "prefix": true,
                                                    "src": "12993:24:5",
                                                    "subExpression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1648,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1526,
                                                            "src": "12994:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                            }
                                                        },
                                                        "id": 1649,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "relayedCallSuccess",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1497,
                                                        "src": "12994:23:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "src": "12961:56:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "falseBody": null,
                                            "id": 1660,
                                            "nodeType": "IfStatement",
                                            "src": "12957:246:5",
                                            "trueBody": {
                                                "id": 1659,
                                                "nodeType": "Block",
                                                "src": "13019:184:5",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1653,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 3447,
                                                                        "src": "13117:15:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 1654,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "RejectedByRecipientRevert",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": null,
                                                                    "src": "13117:41:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1655,
                                                                        "name": "vars",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 1526,
                                                                        "src": "13160:4:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                                        }
                                                                    },
                                                                    "id": 1656,
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "relayedCallReturnValue",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 1499,
                                                                    "src": "13160:27:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 1652,
                                                                "name": "revertWithStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1761,
                                                                "src": "13100:16:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 1657,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "13100:88:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 1658,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "13100:88:5"
                                                    }
                                                ]
                                            }
                                        }
                                    ]
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "id": 1681,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1662,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1526,
                                                "src": "13475:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 1664,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "data",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1503,
                                            "src": "13475:9:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "argumentTypes": null,
                                            "arguments": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1667,
                                                            "name": "IPaymaster",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 3310,
                                                            "src": "13523:10:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_contract$_IPaymaster_$3310_$",
                                                                "typeString": "type(contract IPaymaster)"
                                                            }
                                                        },
                                                        "id": 1668,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "postRelayedCall",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 3304,
                                                        "src": "13523:26:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_declaration_nonpayable$_t_bytes_calldata_ptr_$_t_bool_$_t_uint256_$_t_struct$_RelayData_$3227_calldata_ptr_$returns$__$",
                                                            "typeString": "function IPaymaster.postRelayedCall(bytes calldata,bool,uint256,struct GsnTypes.RelayData calldata)"
                                                        }
                                                    },
                                                    "id": 1669,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "selector",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "13523:35:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1670,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1526,
                                                        "src": "13572:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1671,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "recipientContext",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1501,
                                                    "src": "13572:21:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1672,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1526,
                                                        "src": "13607:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1673,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayedCallSuccess",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1497,
                                                    "src": "13607:23:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    "id": 1677,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "argumentTypes": null,
                                                        "id": 1674,
                                                        "name": "totalInitialGas",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1516,
                                                        "src": "13644:15:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "-",
                                                    "rightExpression": {
                                                        "argumentTypes": null,
                                                        "arguments": [],
                                                        "expression": {
                                                            "argumentTypes": [],
                                                            "id": 1675,
                                                            "name": "gasleft",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -7,
                                                            "src": "13662:7:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                                "typeString": "function () view returns (uint256)"
                                                            }
                                                        },
                                                        "id": 1676,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "13662:9:5",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "src": "13644:27:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1678,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1508,
                                                        "src": "13707:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 1679,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3231,
                                                    "src": "13707:22:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes4",
                                                        "typeString": "bytes4"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 1665,
                                                    "name": "abi",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -1,
                                                    "src": "13487:3:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_abi",
                                                        "typeString": "abi"
                                                    }
                                                },
                                                "id": 1666,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "encodeWithSelector",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "13487:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                                    "typeString": "function (bytes4) pure returns (bytes memory)"
                                                }
                                            },
                                            "id": 1680,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "13487:252:5",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                            }
                                        },
                                        "src": "13475:264:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "id": 1682,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13475:264:5"
                                },
                                {
                                    "id": 1708,
                                    "nodeType": "Block",
                                    "src": "13750:255:5",
                                    "statements": [
                                        {
                                            "assignments": [
                                                1684,
                                                1686
                                            ],
                                            "declarations": [
                                                {
                                                    "constant": false,
                                                    "id": 1684,
                                                    "mutability": "mutable",
                                                    "name": "successPost",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1708,
                                                    "src": "13761:16:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    },
                                                    "typeName": {
                                                        "id": 1683,
                                                        "name": "bool",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "13761:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                },
                                                {
                                                    "constant": false,
                                                    "id": 1686,
                                                    "mutability": "mutable",
                                                    "name": "ret",
                                                    "nodeType": "VariableDeclaration",
                                                    "overrides": null,
                                                    "scope": 1708,
                                                    "src": "13778:16:5",
                                                    "stateVariable": false,
                                                    "storageLocation": "memory",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes"
                                                    },
                                                    "typeName": {
                                                        "id": 1685,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "13778:5:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_storage_ptr",
                                                            "typeString": "bytes"
                                                        }
                                                    },
                                                    "value": null,
                                                    "visibility": "internal"
                                                }
                                            ],
                                            "id": 1697,
                                            "initialValue": {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "id": 1694,
                                                            "name": "vars",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1526,
                                                            "src": "13875:4:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                                "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                            }
                                                        },
                                                        "id": 1695,
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "data",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 1503,
                                                        "src": "13875:9:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "expression": {
                                                                    "argumentTypes": null,
                                                                    "id": 1687,
                                                                    "name": "relayRequest",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1508,
                                                                    "src": "13798:12:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                                        "typeString": "struct GsnTypes.RelayRequest calldata"
                                                                    }
                                                                },
                                                                "id": 1688,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "relayData",
                                                                "nodeType": "MemberAccess",
                                                                "referencedDeclaration": 3231,
                                                                "src": "13798:22:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                                }
                                                            },
                                                            "id": 1689,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "paymaster",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3220,
                                                            "src": "13798:32:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "id": 1690,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "call",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": null,
                                                        "src": "13798:37:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                        }
                                                    },
                                                    "id": 1693,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        "gas"
                                                    ],
                                                    "nodeType": "FunctionCallOptions",
                                                    "options": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1691,
                                                                "name": "gasLimits",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1514,
                                                                "src": "13840:9:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_struct$_GasLimits_$3253_calldata_ptr",
                                                                    "typeString": "struct IPaymaster.GasLimits calldata"
                                                                }
                                                            },
                                                            "id": 1692,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "postRelayedCallGasLimit",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 3252,
                                                            "src": "13840:33:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "src": "13798:76:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas",
                                                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                                    }
                                                },
                                                "id": 1696,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "13798:87:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                                    "typeString": "tuple(bool,bytes memory)"
                                                }
                                            },
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "13760:125:5"
                                        },
                                        {
                                            "condition": {
                                                "argumentTypes": null,
                                                "id": 1699,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "!",
                                                "prefix": true,
                                                "src": "13900:12:5",
                                                "subExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1698,
                                                    "name": "successPost",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1684,
                                                    "src": "13901:11:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "falseBody": null,
                                            "id": 1707,
                                            "nodeType": "IfStatement",
                                            "src": "13896:99:5",
                                            "trueBody": {
                                                "id": 1706,
                                                "nodeType": "Block",
                                                "src": "13914:81:5",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "argumentTypes": null,
                                                            "arguments": [
                                                                {
                                                                    "argumentTypes": null,
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "id": 1701,
                                                                        "name": "RelayCallStatus",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 3447,
                                                                        "src": "13945:15:5",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                        }
                                                                    },
                                                                    "id": 1702,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "memberName": "PostRelayedFailed",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": null,
                                                                    "src": "13945:33:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    }
                                                                },
                                                                {
                                                                    "argumentTypes": null,
                                                                    "id": 1703,
                                                                    "name": "ret",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 1686,
                                                                    "src": "13980:3:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                                    },
                                                                    {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                ],
                                                                "id": 1700,
                                                                "name": "revertWithStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1761,
                                                                "src": "13928:16:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$returns$__$",
                                                                    "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                                }
                                                            },
                                                            "id": 1704,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "13928:56:5",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 1705,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "13928:56:5"
                                                    }
                                                ]
                                            }
                                        }
                                    ]
                                },
                                {
                                    "condition": {
                                        "argumentTypes": null,
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 1716,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 1709,
                                                "name": "balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 758,
                                                "src": "14019:8:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 1713,
                                            "indexExpression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1710,
                                                        "name": "relayRequest",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1508,
                                                        "src": "14028:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                            "typeString": "struct GsnTypes.RelayRequest calldata"
                                                        }
                                                    },
                                                    "id": 1711,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayData",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 3231,
                                                    "src": "14028:22:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 1712,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "paymaster",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3220,
                                                "src": "14028:32:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "14019:42:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1714,
                                                "name": "vars",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1526,
                                                "src": "14064:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                    "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                }
                                            },
                                            "id": 1715,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "balanceBefore",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1493,
                                            "src": "14064:18:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "14019:63:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "falseBody": null,
                                    "id": 1724,
                                    "nodeType": "IfStatement",
                                    "src": "14015:155:5",
                                    "trueBody": {
                                        "id": 1723,
                                        "nodeType": "Block",
                                        "src": "14084:86:5",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "expression": {
                                                                "argumentTypes": null,
                                                                "id": 1718,
                                                                "name": "RelayCallStatus",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 3447,
                                                                "src": "14115:15:5",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                                    "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                                }
                                                            },
                                                            "id": 1719,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "PaymasterBalanceChanged",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": null,
                                                            "src": "14115:39:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                "typeString": "enum IRelayHub.RelayCallStatus"
                                                            }
                                                        },
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "",
                                                            "id": 1720,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "14156:2:5",
                                                            "subdenomination": null,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                                "typeString": "literal_string \"\""
                                                            },
                                                            "value": ""
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                                "typeString": "enum IRelayHub.RelayCallStatus"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                                                "typeString": "literal_string \"\""
                                                            }
                                                        ],
                                                        "id": 1717,
                                                        "name": "revertWithStatus",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1761,
                                                        "src": "14098:16:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$returns$__$",
                                                            "typeString": "function (enum IRelayHub.RelayCallStatus,bytes memory) pure"
                                                        }
                                                    },
                                                    "id": 1721,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "14098:61:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 1722,
                                                "nodeType": "ExpressionStatement",
                                                "src": "14098:61:5"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "components": [
                                            {
                                                "argumentTypes": null,
                                                "condition": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1725,
                                                        "name": "vars",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1526,
                                                        "src": "14188:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                            "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                        }
                                                    },
                                                    "id": 1726,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "relayedCallSuccess",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 1497,
                                                    "src": "14188:23:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "falseExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1729,
                                                        "name": "RelayCallStatus",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3447,
                                                        "src": "14235:15:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                        }
                                                    },
                                                    "id": 1730,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "RelayedCallFailed",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "14235:33:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                    }
                                                },
                                                "id": 1731,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "Conditional",
                                                "src": "14188:80:5",
                                                "trueExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1727,
                                                        "name": "RelayCallStatus",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 3447,
                                                        "src": "14214:15:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_enum$_RelayCallStatus_$3447_$",
                                                            "typeString": "type(enum IRelayHub.RelayCallStatus)"
                                                        }
                                                    },
                                                    "id": 1728,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "OK",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "14214:18:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                                    }
                                                },
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 1732,
                                                    "name": "vars",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1526,
                                                    "src": "14270:4:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_InnerRelayCallData_$1506_memory_ptr",
                                                        "typeString": "struct RelayHub.InnerRelayCallData memory"
                                                    }
                                                },
                                                "id": 1733,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "relayedCallReturnValue",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 1499,
                                                "src": "14270:27:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "id": 1734,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "14187:111:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_enum$_RelayCallStatus_$3447_$_t_bytes_memory_ptr_$",
                                            "typeString": "tuple(enum IRelayHub.RelayCallStatus,bytes memory)"
                                        }
                                    },
                                    "functionReturnParameters": 1524,
                                    "id": 1735,
                                    "nodeType": "Return",
                                    "src": "14180:118:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "fbb44607",
                        "id": 1737,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "innerRelayCall",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 1519,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1508,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1737,
                                    "src": "10408:43:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1507,
                                        "name": "GsnTypes.RelayRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3232,
                                        "src": "10408:21:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1510,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1737,
                                    "src": "10461:24:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1509,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10461:5:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1512,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1737,
                                    "src": "10495:27:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1511,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10495:5:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1514,
                                    "mutability": "mutable",
                                    "name": "gasLimits",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1737,
                                    "src": "10532:39:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_GasLimits_$3253_calldata_ptr",
                                        "typeString": "struct IPaymaster.GasLimits"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1513,
                                        "name": "IPaymaster.GasLimits",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3253,
                                        "src": "10532:20:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_GasLimits_$3253_storage_ptr",
                                            "typeString": "struct IPaymaster.GasLimits"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1516,
                                    "mutability": "mutable",
                                    "name": "totalInitialGas",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1737,
                                    "src": "10581:23:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1515,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10581:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1518,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1737,
                                    "src": "10614:22:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1517,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10614:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10398:244:5"
                        },
                        "returnParameters": {
                            "id": 1524,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1521,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1737,
                                    "src": "10669:15:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1520,
                                        "name": "RelayCallStatus",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3447,
                                        "src": "10669:15:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1523,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1737,
                                    "src": "10686:12:5",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1522,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10686:5:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10668:31:5"
                        },
                        "scope": 1878,
                        "src": "10375:3930:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 1760,
                            "nodeType": "Block",
                            "src": "14533:258:5",
                            "statements": [
                                {
                                    "assignments": [
                                        1746
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1746,
                                            "mutability": "mutable",
                                            "name": "data",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 1760,
                                            "src": "14543:17:5",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes"
                                            },
                                            "typeName": {
                                                "id": 1745,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "14543:5:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_storage_ptr",
                                                    "typeString": "bytes"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1752,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1749,
                                                "name": "status",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1740,
                                                "src": "14574:6:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 1750,
                                                "name": "ret",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1742,
                                                "src": "14582:3:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                                    "typeString": "enum IRelayHub.RelayCallStatus"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1747,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -1,
                                                "src": "14563:3:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                }
                                            },
                                            "id": 1748,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encode",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "14563:10:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                            }
                                        },
                                        "id": 1751,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "14563:23:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "14543:43:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1756,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1746,
                                                "src": "14629:4:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1753,
                                                "name": "GsnEip712Library",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5527,
                                                "src": "14596:16:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_GsnEip712Library_$5527_$",
                                                    "typeString": "type(library GsnEip712Library)"
                                                }
                                            },
                                            "id": 1755,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "truncateInPlace",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5435,
                                            "src": "14596:32:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes memory) pure"
                                            }
                                        },
                                        "id": 1757,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "14596:38:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1758,
                                    "nodeType": "ExpressionStatement",
                                    "src": "14596:38:5"
                                },
                                {
                                    "AST": {
                                        "nodeType": "YulBlock",
                                        "src": "14654:131:5",
                                        "statements": [
                                            {
                                                "nodeType": "YulVariableDeclaration",
                                                "src": "14668:27:5",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "name": "data",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "14690:4:5"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "mload",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "14684:5:5"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "14684:11:5"
                                                },
                                                "variables": [
                                                    {
                                                        "name": "dataSize",
                                                        "nodeType": "YulTypedName",
                                                        "src": "14672:8:5",
                                                        "type": ""
                                                    }
                                                ]
                                            },
                                            {
                                                "nodeType": "YulVariableDeclaration",
                                                "src": "14708:28:5",
                                                "value": {
                                                    "arguments": [
                                                        {
                                                            "name": "data",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "14727:4:5"
                                                        },
                                                        {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "14733:2:5",
                                                            "type": "",
                                                            "value": "32"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "add",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "14723:3:5"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "14723:13:5"
                                                },
                                                "variables": [
                                                    {
                                                        "name": "dataPtr",
                                                        "nodeType": "YulTypedName",
                                                        "src": "14712:7:5",
                                                        "type": ""
                                                    }
                                                ]
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "name": "dataPtr",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "14757:7:5"
                                                        },
                                                        {
                                                            "name": "dataSize",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "14766:8:5"
                                                        }
                                                    ],
                                                    "functionName": {
                                                        "name": "revert",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "14750:6:5"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "14750:25:5"
                                                },
                                                "nodeType": "YulExpressionStatement",
                                                "src": "14750:25:5"
                                            }
                                        ]
                                    },
                                    "evmVersion": "istanbul",
                                    "externalReferences": [
                                        {
                                            "declaration": 1746,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "14690:4:5",
                                            "valueSize": 1
                                        },
                                        {
                                            "declaration": 1746,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "14727:4:5",
                                            "valueSize": 1
                                        }
                                    ],
                                    "id": 1759,
                                    "nodeType": "InlineAssembly",
                                    "src": "14645:140:5"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 1738,
                            "nodeType": "StructuredDocumentation",
                            "src": "14311:136:5",
                            "text": " @dev Reverts the transaction with return data set to the ABI encoding of the status argument (and revert reason data)"
                        },
                        "id": 1761,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "revertWithStatus",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 1743,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1740,
                                    "mutability": "mutable",
                                    "name": "status",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1761,
                                    "src": "14478:22:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                        "typeString": "enum IRelayHub.RelayCallStatus"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1739,
                                        "name": "RelayCallStatus",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3447,
                                        "src": "14478:15:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RelayCallStatus_$3447",
                                            "typeString": "enum IRelayHub.RelayCallStatus"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1742,
                                    "mutability": "mutable",
                                    "name": "ret",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1761,
                                    "src": "14502:16:5",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1741,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14502:5:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14477:42:5"
                        },
                        "returnParameters": {
                            "id": 1744,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "14533:0:5"
                        },
                        "scope": 1878,
                        "src": "14452:339:5",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "private"
                    },
                    {
                        "baseFunctions": [
                            3510
                        ],
                        "body": {
                            "id": 1792,
                            "nodeType": "Block",
                            "src": "14925:242:5",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "hexValue": "313030",
                                                        "id": 1788,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "15155:3:5",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_100_by_1",
                                                            "typeString": "int_const 100"
                                                        },
                                                        "value": "100"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_rational_100_by_1",
                                                            "typeString": "int_const 100"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "components": [
                                                            {
                                                                "argumentTypes": null,
                                                                "arguments": [
                                                                    {
                                                                        "argumentTypes": null,
                                                                        "arguments": [
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "hexValue": "313030",
                                                                                "id": 1783,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": true,
                                                                                "kind": "number",
                                                                                "lValueRequested": false,
                                                                                "nodeType": "Literal",
                                                                                "src": "15144:3:5",
                                                                                "subdenomination": null,
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_rational_100_by_1",
                                                                                    "typeString": "int_const 100"
                                                                                },
                                                                                "value": "100"
                                                                            }
                                                                        ],
                                                                        "expression": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_rational_100_by_1",
                                                                                    "typeString": "int_const 100"
                                                                                }
                                                                            ],
                                                                            "expression": {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1780,
                                                                                    "name": "relayData",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 1765,
                                                                                    "src": "15118:9:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                                    }
                                                                                },
                                                                                "id": 1781,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "pctRelayFee",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 3214,
                                                                                "src": "15118:21:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            },
                                                                            "id": 1782,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "memberName": "add",
                                                                            "nodeType": "MemberAccess",
                                                                            "referencedDeclaration": 6594,
                                                                            "src": "15118:25:5",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                                            }
                                                                        },
                                                                        "id": 1784,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "kind": "functionCall",
                                                                        "lValueRequested": false,
                                                                        "names": [],
                                                                        "nodeType": "FunctionCall",
                                                                        "src": "15118:30:5",
                                                                        "tryCall": false,
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    ],
                                                                    "expression": {
                                                                        "argumentTypes": null,
                                                                        "arguments": [
                                                                            {
                                                                                "argumentTypes": null,
                                                                                "expression": {
                                                                                    "argumentTypes": null,
                                                                                    "id": 1776,
                                                                                    "name": "relayData",
                                                                                    "nodeType": "Identifier",
                                                                                    "overloadedDeclarations": [],
                                                                                    "referencedDeclaration": 1765,
                                                                                    "src": "15094:9:5",
                                                                                    "typeDescriptions": {
                                                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                                                    }
                                                                                },
                                                                                "id": 1777,
                                                                                "isConstant": false,
                                                                                "isLValue": false,
                                                                                "isPure": false,
                                                                                "lValueRequested": false,
                                                                                "memberName": "gasPrice",
                                                                                "nodeType": "MemberAccess",
                                                                                "referencedDeclaration": 3212,
                                                                                "src": "15094:18:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            }
                                                                        ],
                                                                        "expression": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            ],
                                                                            "expression": {
                                                                                "argumentTypes": null,
                                                                                "id": 1774,
                                                                                "name": "gasUsed",
                                                                                "nodeType": "Identifier",
                                                                                "overloadedDeclarations": [],
                                                                                "referencedDeclaration": 1763,
                                                                                "src": "15082:7:5",
                                                                                "typeDescriptions": {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            },
                                                                            "id": 1775,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "memberName": "mul",
                                                                            "nodeType": "MemberAccess",
                                                                            "referencedDeclaration": 6674,
                                                                            "src": "15082:11:5",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                                            }
                                                                        },
                                                                        "id": 1778,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "kind": "functionCall",
                                                                        "lValueRequested": false,
                                                                        "names": [],
                                                                        "nodeType": "FunctionCall",
                                                                        "src": "15082:31:5",
                                                                        "tryCall": false,
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    },
                                                                    "id": 1779,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "mul",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 6674,
                                                                    "src": "15082:35:5",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                                    }
                                                                },
                                                                "id": 1785,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "15082:67:5",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "id": 1786,
                                                        "isConstant": false,
                                                        "isInlineArray": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "TupleExpression",
                                                        "src": "15081:69:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "id": 1787,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "div",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 6691,
                                                    "src": "15081:73:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                    }
                                                },
                                                "id": 1789,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "15081:78:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 1771,
                                                    "name": "relayData",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1765,
                                                    "src": "15054:9:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                        "typeString": "struct GsnTypes.RelayData calldata"
                                                    }
                                                },
                                                "id": 1772,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "baseRelayFee",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3216,
                                                "src": "15054:22:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 1773,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "add",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6594,
                                            "src": "15054:26:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                        },
                                        "id": 1790,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "15054:106:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1770,
                                    "id": 1791,
                                    "nodeType": "Return",
                                    "src": "15047:113:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "86a16f8f",
                        "id": 1793,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "calculateCharge",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1767,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "14885:8:5"
                        },
                        "parameters": {
                            "id": 1766,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1763,
                                    "mutability": "mutable",
                                    "name": "gasUsed",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1793,
                                    "src": "14822:15:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1762,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14822:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1765,
                                    "mutability": "mutable",
                                    "name": "relayData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1793,
                                    "src": "14839:37:5",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayData"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 1764,
                                        "name": "GsnTypes.RelayData",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3227,
                                        "src": "14839:18:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayData_$3227_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayData"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14821:56:5"
                        },
                        "returnParameters": {
                            "id": 1770,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1769,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1793,
                                    "src": "14916:7:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1768,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14916:7:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "14915:9:5"
                        },
                        "scope": 1878,
                        "src": "14797:370:5",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            3580
                        ],
                        "body": {
                            "id": 1812,
                            "nodeType": "Block",
                            "src": "15261:121:5",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1803,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1795,
                                                "src": "15312:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 1806,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -28,
                                                        "src": "15334:4:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_RelayHub_$1878",
                                                            "typeString": "contract RelayHub"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_RelayHub_$1878",
                                                            "typeString": "contract RelayHub"
                                                        }
                                                    ],
                                                    "id": 1805,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "15326:7:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 1804,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "15326:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                        }
                                                    }
                                                },
                                                "id": 1807,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "15326:13:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 1808,
                                                "name": "minimumStake",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 720,
                                                "src": "15341:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 1809,
                                                "name": "minimumUnstakeDelay",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 723,
                                                "src": "15355:19:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1801,
                                                "name": "stakeManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 741,
                                                "src": "15278:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                                    "typeString": "contract IStakeManager"
                                                }
                                            },
                                            "id": 1802,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "isRelayManagerStaked",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3744,
                                            "src": "15278:33:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                                "typeString": "function (address,address,uint256,uint256) view external returns (bool)"
                                            }
                                        },
                                        "id": 1810,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "15278:97:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 1800,
                                    "id": 1811,
                                    "nodeType": "Return",
                                    "src": "15271:104:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "2ad311b5",
                        "id": 1813,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isRelayManagerStaked",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1797,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "15232:8:5"
                        },
                        "parameters": {
                            "id": 1796,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1795,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1813,
                                    "src": "15203:20:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1794,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15203:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15202:22:5"
                        },
                        "returnParameters": {
                            "id": 1800,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1799,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1813,
                                    "src": "15255:4:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 1798,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15255:4:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15254:6:5"
                        },
                        "scope": 1878,
                        "src": "15173:209:5",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 1824,
                            "nodeType": "Block",
                            "src": "15414:77:5",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 1819,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 1816,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "15432:3:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 1817,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "15432:10:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1818,
                                                    "name": "penalizer",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 744,
                                                    "src": "15446:9:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "15432:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "4e6f742070656e616c697a6572",
                                                "id": 1820,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "15457:15:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_886a466d231c3780d2dc7e6026a25f2aa3a5d564e008d7019e86b25a60adaaea",
                                                    "typeString": "literal_string \"Not penalizer\""
                                                },
                                                "value": "Not penalizer"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_886a466d231c3780d2dc7e6026a25f2aa3a5d564e008d7019e86b25a60adaaea",
                                                    "typeString": "literal_string \"Not penalizer\""
                                                }
                                            ],
                                            "id": 1815,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "15424:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1821,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "15424:49:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1822,
                                    "nodeType": "ExpressionStatement",
                                    "src": "15424:49:5"
                                },
                                {
                                    "id": 1823,
                                    "nodeType": "PlaceholderStatement",
                                    "src": "15483:1:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "id": 1825,
                        "name": "penalizerOnly",
                        "nodeType": "ModifierDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 1814,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "15411:2:5"
                        },
                        "src": "15388:103:5",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "baseFunctions": [
                            3500
                        ],
                        "body": {
                            "id": 1876,
                            "nodeType": "Block",
                            "src": "15597:505:5",
                            "statements": [
                                {
                                    "assignments": [
                                        1836
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1836,
                                            "mutability": "mutable",
                                            "name": "relayManager",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 1876,
                                            "src": "15607:20:5",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 1835,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "15607:7:5",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1840,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 1837,
                                            "name": "workerToManager",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 749,
                                            "src": "15630:15:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                "typeString": "mapping(address => address)"
                                            }
                                        },
                                        "id": 1839,
                                        "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 1838,
                                            "name": "relayWorker",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1827,
                                            "src": "15646:11:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "15630:28:5",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "15607:51:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 1847,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "id": 1842,
                                                    "name": "relayManager",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1836,
                                                    "src": "15750:12:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "30",
                                                            "id": 1845,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "15774:1:5",
                                                            "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": 1844,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "15766:7:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 1843,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "15766:7:5",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 1846,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "15766:10:5",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "15750:26:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "556e6b6e6f776e2072656c617920776f726b6572",
                                                "id": 1848,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "15778:22:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_eed0e9b6d0da987b652b17222b3b1438a69cd35d1622a2548adf0f40e3047c47",
                                                    "typeString": "literal_string \"Unknown relay worker\""
                                                },
                                                "value": "Unknown relay worker"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_eed0e9b6d0da987b652b17222b3b1438a69cd35d1622a2548adf0f40e3047c47",
                                                    "typeString": "literal_string \"Unknown relay worker\""
                                                }
                                            ],
                                            "id": 1841,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "15742:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1849,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "15742:59:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1850,
                                    "nodeType": "ExpressionStatement",
                                    "src": "15742:59:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 1853,
                                                        "name": "relayManager",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1836,
                                                        "src": "15853:12:5",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    ],
                                                    "id": 1852,
                                                    "name": "isRelayManagerStaked",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1813,
                                                    "src": "15832:20:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                                        "typeString": "function (address) view returns (bool)"
                                                    }
                                                },
                                                "id": 1854,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "15832:34:5",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "72656c6179206d616e61676572206e6f74207374616b6564",
                                                "id": 1855,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "15880:26:5",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                },
                                                "value": "relay manager not staked"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_592d26f578f5171fd051bd3166e9719e81e7117edaf832f3d73ecadebe4995c3",
                                                    "typeString": "literal_string \"relay manager not staked\""
                                                }
                                            ],
                                            "id": 1851,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "15811:7:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1856,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "15811:105:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1857,
                                    "nodeType": "ExpressionStatement",
                                    "src": "15811:105:5"
                                },
                                {
                                    "assignments": [
                                        1861
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1861,
                                            "mutability": "mutable",
                                            "name": "stakeInfo",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 1876,
                                            "src": "15926:40:5",
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_StakeInfo_$3686_memory_ptr",
                                                "typeString": "struct IStakeManager.StakeInfo"
                                            },
                                            "typeName": {
                                                "contractScope": null,
                                                "id": 1860,
                                                "name": "IStakeManager.StakeInfo",
                                                "nodeType": "UserDefinedTypeName",
                                                "referencedDeclaration": 3686,
                                                "src": "15926:23:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_StakeInfo_$3686_storage_ptr",
                                                    "typeString": "struct IStakeManager.StakeInfo"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1866,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1864,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1836,
                                                "src": "15995:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1862,
                                                "name": "stakeManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 741,
                                                "src": "15969:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                                    "typeString": "contract IStakeManager"
                                                }
                                            },
                                            "id": 1863,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "getStakeInfo",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3761,
                                            "src": "15969:25:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_struct$_StakeInfo_$3686_memory_ptr_$",
                                                "typeString": "function (address) view external returns (struct IStakeManager.StakeInfo memory)"
                                            }
                                        },
                                        "id": 1865,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "15969:39:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$3686_memory_ptr",
                                            "typeString": "struct IStakeManager.StakeInfo memory"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "15926:82:5"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 1870,
                                                "name": "relayManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1836,
                                                "src": "16052:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 1871,
                                                "name": "beneficiary",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1829,
                                                "src": "16066:11:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 1872,
                                                    "name": "stakeInfo",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1861,
                                                    "src": "16079:9:5",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_StakeInfo_$3686_memory_ptr",
                                                        "typeString": "struct IStakeManager.StakeInfo memory"
                                                    }
                                                },
                                                "id": 1873,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "stake",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3679,
                                                "src": "16079:15:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 1867,
                                                "name": "stakeManager",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 741,
                                                "src": "16018:12:5",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IStakeManager_$3767",
                                                    "typeString": "contract IStakeManager"
                                                }
                                            },
                                            "id": 1869,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "penalizeRelayManager",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3754,
                                            "src": "16018:33:5",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_payable_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address payable,uint256) external"
                                            }
                                        },
                                        "id": 1874,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "16018:77:5",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1875,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16018:77:5"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "ebcd31ac",
                        "id": 1877,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "arguments": null,
                                "id": 1833,
                                "modifierName": {
                                    "argumentTypes": null,
                                    "id": 1832,
                                    "name": "penalizerOnly",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1825,
                                    "src": "15583:13:5",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$__$",
                                        "typeString": "modifier ()"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "15583:13:5"
                            }
                        ],
                        "name": "penalize",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 1831,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "15574:8:5"
                        },
                        "parameters": {
                            "id": 1830,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1827,
                                    "mutability": "mutable",
                                    "name": "relayWorker",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1877,
                                    "src": "15515:19:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1826,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15515:7:5",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1829,
                                    "mutability": "mutable",
                                    "name": "beneficiary",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 1877,
                                    "src": "15536:27:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 1828,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "15536:15:5",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "15514:50:5"
                        },
                        "returnParameters": {
                            "id": 1834,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "15597:0:5"
                        },
                        "scope": 1878,
                        "src": "15497:605:5",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    }
                ],
                "scope": 1879,
                "src": "635:15469:5"
            }
        ],
        "src": "229:15876:5"
    },
    "compiler": {
        "name": "solc",
        "version": "0.6.10+commit.00c0fcaf.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2020-12-21T17:30:10.443Z",
    "devdoc": {
        "methods": {}
    },
    "userdoc": {
        "methods": {}
    }
}
