{
    "contractName": "ArbRelayHub",
    "abi": [
        {
            "inputs": [
                {
                    "internalType": "contract ArbSys",
                    "name": "_arbsys",
                    "type": "address"
                },
                {
                    "internalType": "contract IStakeManager",
                    "name": "_stakeManager",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_penalizer",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_batchGateway",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_relayRegistrar",
                    "type": "address"
                },
                {
                    "components": [
                        {
                            "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": "minimumUnstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "devAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint8",
                            "name": "devFee",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint80",
                            "name": "baseRelayFee",
                            "type": "uint80"
                        },
                        {
                            "internalType": "uint16",
                            "name": "pctRelayFee",
                            "type": "uint16"
                        }
                    ],
                    "internalType": "struct IRelayHub.RelayHubConfig",
                    "name": "_config",
                    "type": "tuple"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "balance",
                    "type": "uint256"
                }
            ],
            "name": "AbandonedRelayManagerBalanceEscheated",
            "type": "event"
        },
        {
            "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": false,
                    "internalType": "uint256",
                    "name": "deprecationTime",
                    "type": "uint256"
                }
            ],
            "name": "HubDeprecated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "previousOwner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "OwnershipTransferred",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "components": [
                        {
                            "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": "minimumUnstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "devAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint8",
                            "name": "devFee",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint80",
                            "name": "baseRelayFee",
                            "type": "uint80"
                        },
                        {
                            "internalType": "uint16",
                            "name": "pctRelayFee",
                            "type": "uint16"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct IRelayHub.RelayHubConfig",
                    "name": "config",
                    "type": "tuple"
                }
            ],
            "name": "RelayHubConfigured",
            "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": false,
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "minimumStake",
                    "type": "uint256"
                }
            ],
            "name": "StakingTokenDataChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "paymaster",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "relayRequestID",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "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": "bytes32",
                    "name": "relayRequestID",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "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": [],
            "name": "arbsys",
            "outputs": [
                {
                    "internalType": "contract ArbSys",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "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": "maxFeePerGas",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "maxPriorityFeePerGas",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "transactionCalldataGasUsed",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "relayWorker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "paymaster",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "forwarder",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "paymasterData",
                            "type": "bytes"
                        },
                        {
                            "internalType": "uint256",
                            "name": "clientId",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct GsnTypes.RelayData",
                    "name": "relayData",
                    "type": "tuple"
                }
            ],
            "name": "calculateCharge",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "charge",
                    "type": "uint256"
                }
            ],
            "name": "calculateDevCharge",
            "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": [
                {
                    "internalType": "uint256",
                    "name": "_deprecationTime",
                    "type": "uint256"
                }
            ],
            "name": "deprecateHub",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "escheatAbandonedRelayBalance",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getBatchGateway",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getConfiguration",
            "outputs": [
                {
                    "components": [
                        {
                            "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": "minimumUnstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "devAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint8",
                            "name": "devFee",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint80",
                            "name": "baseRelayFee",
                            "type": "uint80"
                        },
                        {
                            "internalType": "uint16",
                            "name": "pctRelayFee",
                            "type": "uint16"
                        }
                    ],
                    "internalType": "struct IRelayHub.RelayHubConfig",
                    "name": "",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getDeprecationTime",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IERC20",
                    "name": "token",
                    "type": "address"
                }
            ],
            "name": "getMinimumStakePerToken",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getPenalizer",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getRelayRegistrar",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getStakeManager",
            "outputs": [
                {
                    "internalType": "contract IStakeManager",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "manager",
                    "type": "address"
                }
            ],
            "name": "getWorkerCount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "worker",
                    "type": "address"
                }
            ],
            "name": "getWorkerManager",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "domainSeparatorName",
                    "type": "string"
                },
                {
                    "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": "uint256",
                                    "name": "validUntilTime",
                                    "type": "uint256"
                                }
                            ],
                            "internalType": "struct IForwarder.ForwardRequest",
                            "name": "request",
                            "type": "tuple"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "uint256",
                                    "name": "maxFeePerGas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "maxPriorityFeePerGas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "transactionCalldataGasUsed",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "relayWorker",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "paymaster",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "forwarder",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "paymasterData",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "clientId",
                                    "type": "uint256"
                                }
                            ],
                            "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": "uint256",
                            "name": "calldataSizeLimit",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct IPaymaster.GasAndDataLimits",
                    "name": "gasAndDataLimits",
                    "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": [],
            "name": "isDeprecated",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "isRelayEscheatable",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "onRelayServerRegistered",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "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": [
                {
                    "internalType": "string",
                    "name": "domainSeparatorName",
                    "type": "string"
                },
                {
                    "internalType": "uint256",
                    "name": "maxAcceptanceBudget",
                    "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": "uint256",
                                    "name": "validUntilTime",
                                    "type": "uint256"
                                }
                            ],
                            "internalType": "struct IForwarder.ForwardRequest",
                            "name": "request",
                            "type": "tuple"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "uint256",
                                    "name": "maxFeePerGas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "maxPriorityFeePerGas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "transactionCalldataGasUsed",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "relayWorker",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "paymaster",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "forwarder",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "paymasterData",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "clientId",
                                    "type": "uint256"
                                }
                            ],
                            "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"
                }
            ],
            "name": "relayCall",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "paymasterAccepted",
                    "type": "bool"
                },
                {
                    "internalType": "uint256",
                    "name": "charge",
                    "type": "uint256"
                },
                {
                    "internalType": "enum IRelayHub.RelayCallStatus",
                    "name": "status",
                    "type": "uint8"
                },
                {
                    "internalType": "bytes",
                    "name": "returnValue",
                    "type": "bytes"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "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": "minimumUnstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "devAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint8",
                            "name": "devFee",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint80",
                            "name": "baseRelayFee",
                            "type": "uint80"
                        },
                        {
                            "internalType": "uint16",
                            "name": "pctRelayFee",
                            "type": "uint16"
                        }
                    ],
                    "internalType": "struct IRelayHub.RelayHubConfig",
                    "name": "_config",
                    "type": "tuple"
                }
            ],
            "name": "setConfiguration",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IERC20[]",
                    "name": "token",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "minimumStake",
                    "type": "uint256[]"
                }
            ],
            "name": "setMinimumStakes",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "verifyRelayManagerStaked",
            "outputs": [],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address payable",
                    "name": "dest",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "withdraw",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address payable[]",
                    "name": "dest",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "amount",
                    "type": "uint256[]"
                }
            ],
            "name": "withdrawMultiple",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "versionHub",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getCreationBlock",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getL1CreationBlock",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "aggregateGasleft",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract ArbSys\",\"name\":\"_arbsys\",\"type\":\"address\"},{\"internalType\":\"contract IStakeManager\",\"name\":\"_stakeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_penalizer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_batchGateway\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_relayRegistrar\",\"type\":\"address\"},{\"components\":[{\"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\":\"minimumUnstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"devFee\",\"type\":\"uint8\"},{\"internalType\":\"uint80\",\"name\":\"baseRelayFee\",\"type\":\"uint80\"},{\"internalType\":\"uint16\",\"name\":\"pctRelayFee\",\"type\":\"uint16\"}],\"internalType\":\"struct IRelayHub.RelayHubConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"name\":\"AbandonedRelayManagerBalanceEscheated\",\"type\":\"event\"},{\"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\":false,\"internalType\":\"uint256\",\"name\":\"deprecationTime\",\"type\":\"uint256\"}],\"name\":\"HubDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"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\":\"minimumUnstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"devFee\",\"type\":\"uint8\"},{\"internalType\":\"uint80\",\"name\":\"baseRelayFee\",\"type\":\"uint80\"},{\"internalType\":\"uint16\",\"name\":\"pctRelayFee\",\"type\":\"uint16\"}],\"indexed\":false,\"internalType\":\"struct IRelayHub.RelayHubConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"RelayHubConfigured\",\"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\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minimumStake\",\"type\":\"uint256\"}],\"name\":\"StakingTokenDataChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"relayRequestID\",\"type\":\"bytes32\"},{\"indexed\":false,\"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\":\"bytes32\",\"name\":\"relayRequestID\",\"type\":\"bytes32\"},{\"indexed\":false,\"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\":[],\"name\":\"aggregateGasleft\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbsys\",\"outputs\":[{\"internalType\":\"contract ArbSys\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transactionCalldataGasUsed\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"}],\"internalType\":\"struct GsnTypes.RelayData\",\"name\":\"relayData\",\"type\":\"tuple\"}],\"name\":\"calculateCharge\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"charge\",\"type\":\"uint256\"}],\"name\":\"calculateDevCharge\",\"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\":[{\"internalType\":\"uint256\",\"name\":\"_deprecationTime\",\"type\":\"uint256\"}],\"name\":\"deprecateHub\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"escheatAbandonedRelayBalance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBatchGateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfiguration\",\"outputs\":[{\"components\":[{\"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\":\"minimumUnstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"devFee\",\"type\":\"uint8\"},{\"internalType\":\"uint80\",\"name\":\"baseRelayFee\",\"type\":\"uint80\"},{\"internalType\":\"uint16\",\"name\":\"pctRelayFee\",\"type\":\"uint16\"}],\"internalType\":\"struct IRelayHub.RelayHubConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreationBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDeprecationTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1CreationBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getMinimumStakePerToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPenalizer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRelayRegistrar\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakeManager\",\"outputs\":[{\"internalType\":\"contract IStakeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getWorkerCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"}],\"name\":\"getWorkerManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"domainSeparatorName\",\"type\":\"string\"},{\"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\":\"uint256\",\"name\":\"validUntilTime\",\"type\":\"uint256\"}],\"internalType\":\"struct IForwarder.ForwardRequest\",\"name\":\"request\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transactionCalldataGasUsed\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"}],\"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\":\"uint256\",\"name\":\"calldataSizeLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct IPaymaster.GasAndDataLimits\",\"name\":\"gasAndDataLimits\",\"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\":[],\"name\":\"isDeprecated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"isRelayEscheatable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"onRelayServerRegistered\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"string\",\"name\":\"domainSeparatorName\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"maxAcceptanceBudget\",\"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\":\"uint256\",\"name\":\"validUntilTime\",\"type\":\"uint256\"}],\"internalType\":\"struct IForwarder.ForwardRequest\",\"name\":\"request\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transactionCalldataGasUsed\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"}],\"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\"}],\"name\":\"relayCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paymasterAccepted\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"charge\",\"type\":\"uint256\"},{\"internalType\":\"enum IRelayHub.RelayCallStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"returnValue\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"minimumUnstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"devFee\",\"type\":\"uint8\"},{\"internalType\":\"uint80\",\"name\":\"baseRelayFee\",\"type\":\"uint80\"},{\"internalType\":\"uint16\",\"name\":\"pctRelayFee\",\"type\":\"uint16\"}],\"internalType\":\"struct IRelayHub.RelayHubConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"setConfiguration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"token\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"minimumStake\",\"type\":\"uint256[]\"}],\"name\":\"setMinimumStakes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"verifyRelayManagerStaked\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"versionHub\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"dest\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable[]\",\"name\":\"dest\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amount\",\"type\":\"uint256[]\"}],\"name\":\"withdrawMultiple\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"aggregateGasleft()\":{\"returns\":{\"_0\":\"A total measurable amount of gas left to current execution. Same as 'gasleft()' for pure EVMs.\"}},\"balanceOf(address)\":{\"returns\":{\"_0\":\"An account's balance. It can be either a deposit of a `Paymaster`, or a revenue of a Relay Manager.\"}},\"calculateCharge(uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))\":{\"params\":{\"gasUsed\":\"An amount of gas used by the transaction.\",\"relayData\":\"The details of a transaction signed by the sender.\"},\"returns\":{\"_0\":\"The calculated charge, in wei.\"}},\"calculateDevCharge(uint256)\":{\"params\":{\"charge\":\"The amount of Ether in wei the Paymaster will be charged for this transaction.\"},\"returns\":{\"_0\":\"The calculated devFee, in wei.\"}},\"deprecateHub(uint256)\":{\"params\":{\"_deprecationTime\":\"The timestamp in seconds after which the `RelayHub` stops serving transactions.\"}},\"getBatchGateway()\":{\"returns\":{\"_0\":\"The `BatchGateway` address for this `RelayHub`.\"}},\"getConfiguration()\":{\"returns\":{\"_0\":\"The configuration of the `RelayHub`.\"}},\"getCreationBlock()\":{\"returns\":{\"_0\":\"The block number in which the contract has been deployed.\"}},\"getDeprecationTime()\":{\"returns\":{\"_0\":\"The timestamp from which the hub no longer allows relaying calls.\"}},\"getL1CreationBlock()\":{\"returns\":{\"_0\":\"The block number in which the contract has been deployed.\"}},\"getMinimumStakePerToken(address)\":{\"params\":{\"token\":\"An address of an ERC-20 compatible tokens.\"},\"returns\":{\"_0\":\"The minimum amount of a given `token` that needs to be staked so that the Relay Manager is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking.\"}},\"getPenalizer()\":{\"returns\":{\"_0\":\"The `Penalizer` address for this `RelayHub`.\"}},\"getRelayRegistrar()\":{\"returns\":{\"_0\":\"The `RelayRegistrar` address for this `RelayHub`.\"}},\"getStakeManager()\":{\"returns\":{\"_0\":\"The `StakeManager` address for this `RelayHub`.\"}},\"getWorkerCount(address)\":{\"params\":{\"manager\":\"An address of the Relay Manager.\"},\"returns\":{\"_0\":\"The count of Relay Workers associated with this Relay Manager.\"}},\"getWorkerManager(address)\":{\"params\":{\"worker\":\"An address of the Relay Worker.\"},\"returns\":{\"_0\":\"The address of its Relay Manager.\"}},\"isDeprecated()\":{\"returns\":{\"_0\":\"`true` if the `RelayHub` is deprecated, `false` it it is not deprecated and can serve transactions.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"penalize(address,address)\":{\"params\":{\"beneficiary\":\"The address that called the `Penalizer` and will receive a reward for it.\",\"relayWorker\":\"The address of the Relay Worker that committed a penalizable offense.\"}},\"relayCall(string,uint256,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes)\":{\"params\":{\"approvalData\":\"The dapp-specific data forwarded to the `Paymaster`'s `preRelayedCall` method. This value is **not** verified by the `RelayHub` in any way. As an example, it can be used to pass some kind of a third-party signature to the `Paymaster` for verification. Emits a `TransactionRelayed` event regardless of whether the transaction succeeded or failed.\",\"domainSeparatorName\":\"The name of the Domain Separator used to verify the EIP-712 signature\",\"maxAcceptanceBudget\":\"The maximum valid value for `paymaster.getGasLimits().acceptanceBudget` to return.\",\"relayRequest\":\"All details of the requested relayed call.\",\"signature\":\"The client's EIP-712 signature over the `relayRequest` struct.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setConfiguration((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))\":{\"params\":{\"_config\":\"The new configuration.\"}},\"setMinimumStakes(address[],uint256[])\":{\"params\":{\"minimumStake\":\"An array of minimal amounts necessary for a corresponding token, in wei.\",\"token\":\"An array of addresses of ERC-20 compatible tokens.\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"versionHub()\":{\"returns\":{\"_0\":\"a SemVer-compliant version of the `RelayHub` contract.\"}}},\"title\":\"The RelayHub Implementation for Arbitrum\",\"version\":1},\"userdoc\":{\"events\":{\"AbandonedRelayManagerBalanceEscheated(address,uint256)\":{\"notice\":\"This event is emitted in case a `relayManager` has been deemed \\\"abandoned\\\" for being unresponsive for a prolonged period of time.This event means the entire balance of the relay has been transferred to the `devAddress`.\"},\"Deposited(address,address,uint256)\":{\"notice\":\"Emitted when `depositFor` is called, including the amount and account that was funded.\"},\"HubDeprecated(uint256)\":{\"notice\":\"This event is emitted in case this `RelayHub` is deprecated and will stop serving transactions soon.\"},\"RelayHubConfigured((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))\":{\"notice\":\"Emitted when a configuration of the `RelayHub` is changed\"},\"RelayWorkersAdded(address,address[],uint256)\":{\"notice\":\"Emitted when relays are added by a relayManager\"},\"StakingTokenDataChanged(address,uint256)\":{\"notice\":\"Emitted for each token configured for staking in setMinimumStakes\"},\"TransactionRejectedByPaymaster(address,address,bytes32,address,address,address,bytes4,uint256,bytes)\":{\"notice\":\"Emitted when an attempt to relay a call fails and the `Paymaster` does not accept the transaction. The actual relayed call was not executed, and the recipient not charged.\"},\"TransactionRelayed(address,address,bytes32,address,address,address,bytes4,uint8,uint256)\":{\"notice\":\"Emitted when a transaction is relayed. Note that the actual internal function call might be reverted. The reason for a revert will be indicated in the `status` field of a corresponding `RelayCallStatus` value.`charge` is the Ether value deducted from the `Paymaster` balance. The amount added to the `relayManager` balance will be lower if there is an activated `devFee` in the `config`.\"},\"TransactionResult(uint8,bytes)\":{\"notice\":\"This event is emitted in case the internal function returns a value or reverts with a revert string.\"},\"Withdrawn(address,address,uint256)\":{\"notice\":\"Emitted when an account withdraws funds from the `RelayHub`.\"}},\"kind\":\"user\",\"methods\":{\"addRelayWorkers(address[])\":{\"notice\":\"Add new worker addresses controlled by the sender who must be a staked Relay Manager address. Emits a `RelayWorkersAdded` event. This function can be called multiple times, emitting new events.\"},\"aggregateGasleft()\":{\"notice\":\"Includes the 'storage gas' specific to the Arbitrum Rollup.\"},\"calculateCharge(uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))\":{\"notice\":\"The fee is expressed as a base fee in wei plus percentage of the actual charge. For example, a value '40' stands for a 40% fee, so the recipient will be charged for 1.4 times the spent amount.\"},\"calculateDevCharge(uint256)\":{\"notice\":\"The fee is expressed as a  percentage of the actual charge. For example, a value '40' stands for a 40% fee, so the Relay Manager will only get 60% of the `charge`.\"},\"constructor\":{\"notice\":\"we accept the `ArbSys` address in the constructor to allow mocking it in tests.\"},\"depositFor(address)\":{\"notice\":\"Deposits ether for a `Paymaster`, so that it can and pay for relayed transactions. :warning: **Warning** :warning: Unused balance can only be withdrawn by the holder itself, by calling `withdraw`. Emits a `Deposited` event.\"},\"deprecateHub(uint256)\":{\"notice\":\"Deprecate hub by reverting all incoming `relayCall()` calls starting from a given timestamp\"},\"escheatAbandonedRelayBalance(address)\":{\"notice\":\"@param relayManager\"},\"getCreationBlock()\":{\"notice\":\"Uses `ArbSys` L2 block number specific to the Arbitrum Rollup.\"},\"getL1CreationBlock()\":{\"notice\":\"Uses original L1 block number.\"},\"innerRelayCall(string,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes,(uint256,uint256,uint256,uint256),uint256,uint256)\":{\"notice\":\"This method can only by called by this `RelayHub`. It wraps the execution of the `RelayRequest` in a revertable frame context.\"},\"isRelayEscheatable(address)\":{\"notice\":\"Uses `StakeManager` to check if the Relay Manager can be considered abandoned or not. Returns true if the stake's abandonment time is in the past including the escheatment delay, false otherwise.\"},\"onRelayServerRegistered(address)\":{\"notice\":\"The `RelayRegistrar` callback to notify the `RelayHub` that this `relayManager` has updated registration.\"},\"penalize(address,address)\":{\"notice\":\"In case the Relay Worker has been found to be in violation of some rules by the `Penalizer` contract, the `Penalizer` will call this method to execute a penalization. The `RelayHub` will look up the Relay Manager of the given Relay Worker and will forward the call to the `StakeManager` contract. The `RelayHub` does not perform the actual penalization either.\"},\"relayCall(string,uint256,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes)\":{\"notice\":\"Relays a transaction. For this to succeed, multiple conditions must be met:  - `Paymaster`'s `preRelayCall` method must succeed and not revert.  - the `msg.sender` must be a registered Relay Worker that the user signed to use.  - the transaction's gas fees must be equal or larger than the ones that were signed by the sender.  - the transaction must have enough gas to run all internal transactions if they use all gas available to them.  - the `Paymaster` must have enough balance to pay the Relay Worker if all gas is spent.If all conditions are met, the call will be relayed and the `Paymaster` charged.\"},\"setConfiguration((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))\":{\"notice\":\"Sets or changes the configuration of this `RelayHub`.\"},\"setMinimumStakes(address[],uint256[])\":{\"notice\":\"Sets or changes the minimum amount of a given `token` that needs to be staked so that the Relay Manager is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking.\"},\"verifyRelayManagerStaked(address)\":{\"notice\":\"Uses `StakeManager` to decide if the Relay Manager can be considered staked or not. Returns if the stake's token, amount and delay satisfy all requirements, reverts otherwise.\"},\"withdraw(address,uint256)\":{\"notice\":\"Withdraws from an account's balance, sending it back to the caller. Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding. Emits a `Withdrawn` event.\"},\"withdrawMultiple(address[],uint256[])\":{\"notice\":\"Withdraws from an account's balance, sending funds to multiple provided addresses. Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding. Emits a `Withdrawn` event for each destination.\"}},\"notice\":\"This contract implements the `IRelayHub` interface for the Arbitrum-compatible Rollups.This implementation relies on the `ArbSys` built-ins that do not exist outside of Arbitrum.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/alexf/gsn2/packages/contracts/solpp/arbitrum/ArbRelayHub.sol\":\"ArbRelayHub\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/alexf/gsn2/packages/contracts/solpp/RelayHub.sol\":{\"keccak256\":\"0x648b59b36277a18170de742ab21f7f67d2beb817332b34fbd4b9eeccf820fcce\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://809ae9342d57c8d6ff6d6579f8c6c238f4df7eb9155b2b0ba3351630550a4d7b\",\"dweb:/ipfs/QmdH2AKJTEHE9WcZMt1rqGs5qCFF7d2HGoWRowYdSK9H4w\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/arbitrum/ArbRelayHub.sol\":{\"keccak256\":\"0xf55ec73e7c52fb362b32aee4fe0cca82967021059f22c1f2dd7d970475901c73\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://1cd801121051ef4318fe084bffb499085e10887950bc6d34c5aead7b97378842\",\"dweb:/ipfs/Qmdq4ZVTWs5vy7AZCidyuFaFssybH67XcsvJU7LsyPcLCT\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/arbitrum/ArbSys.sol\":{\"keccak256\":\"0x101af06ee07468c600f513ee59e1c525d4899bce9796623a508ce2b810ec21a0\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://38d802dbf4e985150c5b83573f3a0cd34f8dad1c7b89eb22d42b477f14961f07\",\"dweb:/ipfs/Qme4yVYaWUk8xQzxtVNwE7VT1nxGNJrFh7fo4PiwpXsmdt\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/forwarder/IForwarder.sol\":{\"keccak256\":\"0xef3d770001c3245db4408cdd0afdfc622695ccfe31f28b74571d05158bbf83f8\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://08949174ed05b596d89c8f1eeedfeb254993b84054bbc1ff6081ad926f5db406\",\"dweb:/ipfs/QmNQtKzHpie4Esocxuc9YrPtGQyA928a1a5TWbVc7cPoqk\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IERC2771Recipient.sol\":{\"keccak256\":\"0x92a3665ec2fc3d2ab78cf8a08451b2ab6466dc7fae3c215150be2132500406fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://364eee344363535733b4cc1a7748e1fc8b10786f6df6c0e2bc0082bcb2477e0e\",\"dweb:/ipfs/QmfCwWAxFqU4woSqu3g5BFPASEA7eCSwcwUSHM9EoYhYdu\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IPaymaster.sol\":{\"keccak256\":\"0x205617108fad6f3543fc12773e9d25998e944852e8ed9d71f79cb799ae299246\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://4903018f63b15211f2714edcf1c56f5c0bee6fea07efaaf908d3a78d07fb6d84\",\"dweb:/ipfs/Qmezexeh6GszFUHW2dgTGWTfb613Ni3tfjLqAtdAYAxCpQ\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayHub.sol\":{\"keccak256\":\"0x19dcbf5e1bfaa413b6800ad84ffedd2989b401cede299f009ff62c33e03ccfae\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://bb5cb7bee7de97770e374b4cad1265c636a740dc7a2013d686a89d9398ba3098\",\"dweb:/ipfs/QmSqhNkFwDtS1EnupbQWduDm78N6s8c1zqXf5aLqZF69Xx\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IRelayRegistrar.sol\":{\"keccak256\":\"0xece9624dac85ba58f820860722fcfe7ea331159c8b3f172dd6450350fc1d35f0\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://3dae31c7fe1bbfbf7d7d73fddea3d2a5b27a15a2ec5f3bd9c17bd9e3f16caf74\",\"dweb:/ipfs/QmULwg82urTQx2fQDHYQoCve3QWJmGQXCPoMNB4Twafh1D\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol\":{\"keccak256\":\"0x27535f3677a2c373862d8672725632fdcabdf5d0e784f80c158063f55be68b5a\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://904ad156bf1cac29f9e13619ee0ee41e602b6cf1fafedea0a1d3be7a7accc654\",\"dweb:/ipfs/QmXVy5gfYXSWYFrkmL2u9jctZDXupiNWbif5tFVpVZMPww\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnEip712Library.sol\":{\"keccak256\":\"0xc35980f371cab5d9af3e1ead06f82b2afb705a8dbb2a5f53793f0179c485c274\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://dd7732d690c7959df567ee3e4863b0045583506fbae3c87b684b6173fd126968\",\"dweb:/ipfs/QmUbcUAqxKZTQS5ZwwPVnfNAtCmas4pPWQhRWXXwWQEeef\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnTypes.sol\":{\"keccak256\":\"0xfc3ed2bbd925e24facf0c3bb96d57dd7fc5bcc4a684b5473f04e8d209b758805\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://cb57b5b38d3e588f119ae45174891f2049d1d0de160a12b81a20335cd8bf731b\",\"dweb:/ipfs/Qmf6xfbdLbTKEpnzxwnSaRy1YZJtLYTZh8URqry86oyoSU\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/GsnUtils.sol\":{\"keccak256\":\"0x8616968305b6127f4cb43209502e074c3964230a66c703e6b8623b03e5ec6442\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://2b1f1163fee75613024b38c25e17649933919f4a47a5ba5e8c3ea046023eb1ad\",\"dweb:/ipfs/QmNWReZE8BQ82eXahdKjnNjQWHuH9L9wcTcnKgyV5ypKCa\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/MinLibBytes.sol\":{\"keccak256\":\"0xa61a3d8fcd89182975d0bd17b86c22b6affd2f7bf26db66b1ddb2ee396f122ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e0bc21e2c8c2f483aee9d5bc003fa77dc7afddbaa7cc99560581a416cfdef11\",\"dweb:/ipfs/QmbwLE7AJpoH2LVeeHxewq3tf1vXhLNUdYsubWxzDGKfTr\"]},\"/Users/alexf/gsn2/packages/contracts/solpp/utils/RelayHubValidator.sol\":{\"keccak256\":\"0xd510edd4bb9a11beae2e610f850ca7dcc5a8947c73080bf04c41e2c3c28c87af\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://548657a37cbcfacfc7a425ac61f126831cac3d4a8228e698ab57b38db2cbd29d\",\"dweb:/ipfs/QmbT6SADeNBsXiaV57rjL4cTH2DT6SMsSWyz6CwXs2KcZk\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xd04b0f06e0666f29cf7cccc82894de541e19bb30a765b107b1e40bb7fe5f7d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b652499d098e88d8d878374616bb58434301061cae2253298b3f374044e0ddb\",\"dweb:/ipfs/QmbhAzctqo5jrSKU6idHdVyqfmzCcDbNUPvmx4GiXxfA6q\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0xc65c83c1039508fa7a42a09a3c6a32babd1c438ba4dbb23581255e784b5d5eed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1b3b38db0f76429db899909025e534c366415e9ea8b5ddc4c8901e6a7fc1461\",\"dweb:/ipfs/QmYv1KxyHjLEky9JWNSsSfpGJbiCxFyzVFgTwQKpiqYGUg\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"]},\"hardhat/console.sol\":{\"keccak256\":\"0x72b6a1d297cd3b033d7c2e4a7e7864934bb767db6453623f1c3082c6534547f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8cb8681076e765c214e0d51cac989325f6b98e315eaae06ee0cbd5a9f084763\",\"dweb:/ipfs/QmNWGHi4zmjxQTYN3NMGnJd49jBT5dE4bxTdWEaDuJrC6N\"]}},\"version\":1}",
    "bytecode": "0x610160604052600019600c553480156200001857600080fd5b50604051620058e0380380620058e08339810160408190526200003b91620003d4565b84848484846200004b336200012e565b43610100526001600160601b0319606086811b821660805285811b821660a05284811b821660c05283901b1660e05262000085816200017e565b5050505050856001600160a01b0316610120816001600160a01b031660601b81525050856001600160a01b031663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b158015620000e257600080fd5b505afa158015620000f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200011d9190620004fb565b610140525062000566945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200018862000327565b60648160c0015160ff1610620001d85760405162461bcd60e51b815260206004820152601060248201526f0c8caec40cccaca40e8dede40d0d2ced60831b60448201526064015b60405180910390fd5b8051600190815560208201516002556040808301516003556060830151600455608083015160055560a08301516006805460c086015160e08701516001600160501b0316600160a81b02600160a81b600160f81b031960ff909216600160a01b026001600160a81b03199093166001600160a01b039095169490941791909117169190911790556101008301516007805461ffff90921661ffff19909216919091179055517f4812ada68f7c2cdc9f4a4a09e157ea6b924e0ef40a4fa7aa074fa8f70b1e7247916200031c91815481526001820154602082015260028201546040820152600382015460608201526004820154608082015260058201546001600160a01b03811660a08084019190915260ff9082901c1660c083015260a81c6001600160501b031660e082015260069091015461ffff166101008201526101200190565b60405180910390a150565b6000546001600160a01b03163314620003835760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620001cf565b565b805162000392816200054d565b919050565b805161ffff811681146200039257600080fd5b80516001600160501b03811681146200039257600080fd5b805160ff811681146200039257600080fd5b6000806000806000808688036101c0811215620003f057600080fd5b8751620003fd816200054d565b602089015190975062000410816200054d565b604089015190965062000423816200054d565b606089015190955062000436816200054d565b608089015190945062000449816200054d565b9250610120609f1982018113156200046057600080fd5b6200046a62000515565b915060a0890151825260c0890151602083015260e08901516040830152610100808a01516060840152818a01516080840152620004ab6101408b0162000385565b60a0840152620004bf6101608b01620003c2565b60c0840152620004d36101808b01620003aa565b60e0840152620004e76101a08b0162000397565b818401525050809150509295509295509295565b6000602082840312156200050e57600080fd5b5051919050565b60405161012081016001600160401b03811182821017156200054757634e487b7160e01b600052604160045260246000fd5b60405290565b6001600160a01b03811681146200056357600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c610100516101205160601c610140516152ca62000616600039600061025801526000818161050f0152610889015260006105fa015260008181610301015261093201526000818161077001526111a601526000818161043b0152612ca30152600081816106450152818161080801528181610a240152818161287e01528181612a1901528181612d810152612e7c01526152ca6000f3fe60806040526004361061020f5760003560e01c80639bcde3f311610118578063ca64f9e7116100a0578063e6e22e121161006f578063e6e22e12146106e1578063ebcd31ac14610701578063f2fde38b14610721578063f3fef3a314610741578063f7908a741461076157600080fd5b8063ca64f9e714610636578063d26152f914610669578063d904c73214610689578063ddf73789146106ab57600080fd5b8063af595dfc116100e7578063af595dfc14610572578063be7c76ad14610592578063c2da0786146105cb578063c5c98a1a146105eb578063c71782301461061e57600080fd5b80639bcde3f3146104dd578063a51c8cb9146104fd578063a6e61b6014610531578063aa67c9191461055f57600080fd5b80636ca862e21161019b57806375dc7b4e1161016a57806375dc7b4e1461042c5780638a09fb561461045f5780638ac3b8451461047f5780638da5cb5b1461049f5780638e53548b146104bd57600080fd5b80636ca862e21461039157806370a08231146103c1578063715018a6146103f757806372c1ab0c1461040c57600080fd5b806345bdade7116101e257806345bdade7146102bb5780634f7de031146102d057806351d85156146102f257806359c4afc0146103395780636bd50cef1461036f57600080fd5b806301ffc9a71461021457806320ffd56d1461024957806339622167146102865780633c16e59a146102a6575b600080fd5b34801561022057600080fd5b5061023461022f36600461412b565b610794565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b604051908152602001610240565b34801561029257600080fd5b506102346102a1366004613e75565b6107e6565b3480156102b257600080fd5b50600c54610278565b3480156102c757600080fd5b50610278610884565b3480156102dc57600080fd5b506102f06102eb366004613e75565b610927565b005b3480156102fe57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610240565b34801561034557600080fd5b50610278610354366004613e75565b6001600160a01b03166000908152600a602052604090205490565b34801561037b57600080fd5b50610384610a83565b6040516102409190614b70565b34801561039d57600080fd5b506103b16103ac3660046142c5565b610b64565b604051610240949392919061496f565b3480156103cd57600080fd5b506102786103dc366004613e75565b6001600160a01b03166000908152600b602052604090205490565b34801561040357600080fd5b506102f06119e7565b34801561041857600080fd5b506102f0610427366004613f6b565b6119fb565b34801561043857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610321565b34801561046b57600080fd5b506102f061047a366004614033565b611cbc565b34801561048b57600080fd5b5061027861049a366004614510565b611e13565b3480156104ab57600080fd5b506000546001600160a01b0316610321565b3480156104c957600080fd5b506102786104d8366004614542565b611e48565b3480156104e957600080fd5b506102f06104f83660046143f1565b611ede565b34801561050957600080fd5b506103217f000000000000000000000000000000000000000000000000000000000000000081565b34801561053d57600080fd5b5061055161054c3660046141e0565b612084565b6040516102409291906149e3565b6102f061056d366004613e75565b612510565b34801561057e57600080fd5b506102f061058d366004614510565b6125f1565b34801561059e57600080fd5b506103216105ad366004613e75565b6001600160a01b039081166000908152600960205260409020541690565b3480156105d757600080fd5b506102f06105e6366004613ef7565b612674565b3480156105f757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610278565b34801561062a57600080fd5b50600c54421015610234565b34801561064257600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610321565b34801561067557600080fd5b506102f0610684366004613e75565b612857565b34801561069557600080fd5b5061069e6129d5565b604051610240919061499d565b3480156106b757600080fd5b506102786106c6366004613e75565b6001600160a01b031660009081526008602052604090205490565b3480156106ed57600080fd5b506102f06106fc366004613e75565b6129f5565b34801561070d57600080fd5b506102f061071c366004613ebe565b612c98565b34801561072d57600080fd5b506102f061073c366004613e75565b612ee0565b34801561074d57600080fd5b506102f061075c366004613e92565b612f59565b34801561076d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610321565b60006001600160e01b0319821663e9fb30f760e01b14806107c557506001600160e01b03198216630704183b60e11b145b806107e057506301ffc9a760e01b6001600160e01b03198316145b92915050565b604051633962216760e01b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063396221679060240160206040518083038186803b15801561084c57600080fd5b505afa158015610860573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e091906140cd565b60005a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a94597ff6040518163ffffffff1660e01b815260040160206040518083038186803b1580156108e057600080fd5b505afa1580156108f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109189190614529565b6109229190614dbc565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109a45760405162461bcd60e51b815260206004820152601d60248201527f63616c6c6572206973206e6f742072656c61792072656769737472617200000060448201526064015b60405180910390fd5b6109ad816129f5565b6001600160a01b0381166000908152600a6020526040902054610a055760405162461bcd60e51b815260206004820152601060248201526f6e6f2072656c617920776f726b65727360801b604482015260640161099b565b6040516346dcbf0b60e01b81526001600160a01b0382811660048301527f000000000000000000000000000000000000000000000000000000000000000016906346dcbf0b90602401600060405180830381600087803b158015610a6857600080fd5b505af1158015610a7c573d6000803e3d6000fd5b5050505050565b610aeb604051806101200160405280600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600060ff16815260200160006001600160501b03168152602001600061ffff1681525090565b5060408051610120810182526001548152600254602082015260035491810191909152600454606082015260055460808201526006546001600160a01b03811660a0830152600160a01b810460ff1660c0830152600160a81b90046001600160501b031660e082015260075461ffff1661010082015290565b60008060006060610b73613c00565b610b7b610884565b6040820152610b8b8a8a8a612ffc565b6101e082015260408051808201909152601881527f72656c617943616c6c2072656c617952657175657374496400000000000000006020820152610bce90613061565b610bdc816101e001516130a4565b610c1560405180606001604052806023815260200161527260239139610c028c80614c87565b610c10906020810190613e75565b6130e9565b610c4c604051806060016040528060218152602001614fbf60219139610c3b8c80614c87565b610c10906040810190602001613e75565b610c7b6040518060600160405280602481526020016150c860249139610c728c80614c87565b60400135613132565b610caa604051806060016040528060228152602001614fe060229139610ca18c80614c87565b60600135613132565b610cd9604051806060016040528060248152602001614f9b60249139610cd08c80614c87565b60800135613132565b610d086040518060600160405280602d8152602001614f0d602d9139610cff8c80614c87565b60c00135613132565b610d376040518060600160405280602d815260200161503d602d9139610d3160208d018d614c9d565b35613132565b610d6960405180606001604052806035815260200161509360359139610d6060208d018d614c9d565b60200135613132565b610d926040518060600160405280603b8152602001615002603b9139610c7260208d018d614c9d565b610dcc6040518060600160405280602c8152602001614ee1602c9139610dbb60208d018d614c9d565b610c10906080810190606001613e75565b610e066040518060600160405280602a8152602001615248602a9139610df560208d018d614c9d565b610c109060a0810190608001613e75565b610e406040518060600160405280602a815260200161521e602a9139610e2f60208d018d614c9d565b610c109060c081019060a001613e75565b610e7260405180606001604052806029815260200161506a60299139610e6960208d018d614c9d565b60e00135613132565b610eb06040518060400160405280601d81526020017f72656c617943616c6c20646f6d61696e536570617261746f724e616d65000000815250613061565b610eef8d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061306192505050565b610f236040518060400160405280601381526020017272656c617943616c6c207369676e617475726560681b815250613061565b610f6289898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317792505050565b610f996040518060400160405280601681526020017572656c617943616c6c20617070726f76616c4461746160501b815250613061565b610fd887878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317792505050565b610ff96040518060600160405280602381526020016151fb60239139613061565b61104e6110068b80614c87565b6110149060a0810190614c41565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317792505050565b61106f6040518060600160405280602e8152602001615111602e9139613061565b61108d61107f60208c018c614c9d565b6110149060c0810190614c41565b6110cc6040518060400160405280601d81526020017f72656c617943616c6c206d6178416363657074616e63654275646765740000008152508c613132565b600c54421061110e5760405162461bcd60e51b815260206004820152600e60248201526d1a1d588819195c1c9958d85d195960921b604482015260640161099b565b600461111a8b80614c87565b6111289060a0810190614c41565b9050101561113757600061118c565b61118c6111448b80614c87565b6111529060a0810190614c41565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506131ba915050565b6001600160e01b0319166020820152336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906111d357503215155b156112e757876112255760405162461bcd60e51b815260206004820181905260248201527f6d697373696e67207369676e6174757265206f72206261642067617465776179604482015260640161099b565b3332146112745760405162461bcd60e51b815260206004820152601860248201527f72656c617920776f726b6572206d75737420626520454f410000000000000000604482015260640161099b565b61128160208b018b614c9d565b611292906080810190606001613e75565b6001600160a01b0316336001600160a01b0316146112e75760405162461bcd60e51b81526020600482015260126024820152712737ba1030903934b3b43a103bb7b935b2b960711b604482015260640161099b565b321561138557600960006112fe60208d018d614c9d565b61130f906080810190606001613e75565b6001600160a01b039081168252602082019290925260400160002054166101c082018190526113775760405162461bcd60e51b81526020600482015260146024820152732ab735b737bbb7103932b630bc903bb7b935b2b960611b604482015260640161099b565b611385816101c001516129f5565b6113948b8b836040015161322a565b61010083015260a08201526113ae8d8d8c8c8c8c8c6134b4565b60025460405a6113bf90603f614df6565b6113c99190614dd4565b6113d39190614e15565b6101208201526113e1610884565b610140820152600354600454610120830151604084015161140560208f018f614c9d565b604001356114139190614dbc565b61141d9190614dbc565b6114279190614dbc565b6114319190614dbc565b81610200018181525050306001600160a01b031681610120015163a6e61b6060e01b8f8f8e8e8e8e8e8a60a00151611467610884565b8c61020001516114779190614e15565b8c61010001516040516024016114969a99989796959493929190614a03565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516114d49190614795565b60006040518083038160008787f1925050503d8060008114611512576040519150601f19603f3d011682016040523d82523d6000602084013e611517565b606091505b506102208301521515815261152a610884565b81610140015161153a9190614e15565b60e08201526102208101518051611559916020918101820191016141a2565b8260c0018360800182905282600681111561157657611576614e89565b600681111561158757611587614e89565b90525050608081015151156115d8577fa1478a4242848419db824250a0dddc645dca0d6a9b12ab1fd79b00145a0ba98e8160c0015182608001516040516115cf9291906149e3565b60405180910390a15b805161173a5760028160c0015160068111156115f6576115f6614e89565b1480611665575061160a60208b018b614c9d565b60a08201515161161e916040013590614dbc565b8160e0015111158015611665575060038160c00151600681111561164457611644614e89565b1480611665575060048160c00151600681111561166357611663614e89565b145b1561173a576101e081015161167d60208c018c614c9d565b61168e9060a0810190608001613e75565b6101c08301516001600160a01b0391821691167f0c47510cb900901afca7c9e926892582a36fd3bb7f908142ccf0fb4382a2b6846116cc8e80614c87565b6116da906020810190613e75565b6116e48f80614c87565b6116f5906040810190602001613e75565b3387602001518860e0015189608001516040516117179695949392919061489a565b60405180910390a46000808260c0015183608001519450945094509450506119d8565b600454611745610884565b82604001516117549190614e15565b61176160208d018d614c9d565b6040013561176f9190614dbc565b6117799190614dbc565b6101608201819052611792906104d860208d018d614c9d565b935061179d84611e13565b61018082015283600b60006117b560208e018e614c9d565b6117c69060a0810190608001613e75565b6001600160a01b03166001600160a01b03168152602001908152602001600020546117f19190614e15565b600b600061180260208e018e614c9d565b6118139060a0810190608001613e75565b6001600160a01b0316815260208101919091526040016000205561018081015161183d9085614e15565b6101c08201516001600160a01b03166000908152600b60205260409020546118659190614dbc565b6101c08201516001600160a01b03166000908152600b6020526040902055610180810151156118d5576101808101516006546001600160a01b03166000908152600b60205260409020546118b99190614dbc565b6006546001600160a01b03166000908152600b60205260409020555b60006118e18b80614c87565b6118ef906020810190613e75565b905060006118fd8c80614c87565b61190e906040810190602001613e75565b9050600061191f60208e018e614c9d565b6119309060a0810190608001613e75565b9050836101e00151336001600160a01b0316856101c001516001600160a01b03167fd51ac07012398c2059ec53c6005fa8639657917bd2dbd72bc489a3c0eaaa7f168686868a602001518b60c001518f6040516119929695949392919061484c565b60405180910390a4505050326119bb5760c08101516080909101516001955090925090506119d8565b60c001516040805160208101909152600081526001955090925090505b98509850985098945050505050565b6119ef61358e565b6119f960006135e8565b565b3360005b8251811015611cb657611aa06040518060400160405280601981526020017f77697468647261774d756c7469706c6520257320257320257300000000000000815250600b6000856001600160a01b03166001600160a01b0316815260200190815260200160002054868481518110611a7957611a79614e9f565b6020026020010151868581518110611a9357611a93614e9f565b6020026020010151613638565b6001600160a01b0382166000908152600b60205260409020548351849083908110611acd57611acd614e9f565b6020026020010151811015611b195760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b604482015260640161099b565b838281518110611b2b57611b2b614e9f565b602002602001015181611b3e9190614e15565b6001600160a01b0384166000908152600b60205260408120919091558551869084908110611b6e57611b6e614e9f565b60200260200101516001600160a01b0316858481518110611b9157611b91614e9f565b602002602001015160405160006040518083038185875af1925050503d8060008114611bd9576040519150601f19603f3d011682016040523d82523d6000602084013e611bde565b606091505b5050905080611c225760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161099b565b858381518110611c3457611c34614e9f565b60200260200101516001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb878681518110611c8257611c82614e9f565b6020026020010151604051611c9991815260200190565b60405180910390a350508080611cae90614e58565b9150506119ff565b50505050565b611cc461358e565b8051825114611d155760405162461bcd60e51b815260206004820152601e60248201527f7365744d696e696d756d5374616b65733a2077726f6e67206c656e6774680000604482015260640161099b565b60005b8251811015611e0e57818181518110611d3357611d33614e9f565b602002602001015160086000858481518110611d5157611d51614e9f565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055507ffb7510fe755f485459ee8ed619d4a0addc092c230ff47e760a62aeba78ebb9e3838281518110611db057611db0614e9f565b6020026020010151838381518110611dca57611dca614e9f565b6020026020010151604051611df49291906001600160a01b03929092168252602082015260400190565b60405180910390a180611e0681614e58565b915050611d18565b505050565b600654600090600160a01b900460ff16611e2f57506000919050565b600654606490600160a01b900460ff1683020492915050565b600080823560208401351415611e6057506000611e63565b50485b6000611e7f8435611e7a3a81602089013587614dbc565b613681565b600754909150606490611e969061ffff1682614d96565b61ffff16611ea48388614df6565b611eae9190614df6565b611eb89190614dd4565b600654611ed59190600160a81b90046001600160501b0316614dbc565b95945050505050565b611ee661358e565b60648160c0015160ff1610611f305760405162461bcd60e51b815260206004820152601060248201526f0c8caec40cccaca40e8dede40d0d2ced60831b604482015260640161099b565b8051600190815560208201516002556040808301516003556060830151600455608083015160055560a08301516006805460c086015160e08701516001600160501b0316600160a81b0269ffffffffffffffffffff60a81b1960ff909216600160a01b026001600160a81b03199093166001600160a01b039095169490941791909117169190911790556101008301516007805461ffff90921661ffff19909216919091179055517f4812ada68f7c2cdc9f4a4a09e157ea6b924e0ef40a4fa7aa074fa8f70b1e72479161207991815481526001820154602082015260028201546040820152600382015460608201526004820154608082015260058201546001600160a01b03811660a08084019190915260ff9082901c1660c08301526001600160501b0360a89190911c1660e082015260069091015461ffff166101008201526101200190565b60405180910390a150565b600060606120de604051806101200160405280600081526020016000815260200160008152602001600080191681526020016000151581526020016060815260200160608152602001606081526020016000151581525090565b6120e6610884565b81525a6120f39086614e15565b60208201523330146121475760405162461bcd60e51b815260206004820152601a60248201527f4d7573742062652063616c6c65642062792052656c6179487562000000000000604482015260640161099b565b600b600061215860208e018e614c9d565b6121699060a0810190608001613e75565b6001600160a01b0316815260208101919091526040908101600020548282015251622f977560e21b906121aa908d908d908d908d908d908b90602401614bf2565b60408051601f19818403018152919052602080820180516001600160e01b03166001600160e01b03199094169390931790925260e08301526000906060906121f4908e018e614c9d565b6122059060a0810190608001613e75565b6001600160a01b031688602001358460e001516040516122259190614795565b60006040518083038160008787f1925050503d8060008114612263576040519150601f19603f3d011682016040523d82523d6000602084013e612268565b606091505b509092509050816122875761227c81613699565b6122876002826136a5565b8080602001905181019061229b9190614155565b8460c001856101000182151515158152508290525050505060006123058e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d8d8d6136de565b60a0850152151560808401529050806123275761232760038360a001516136a5565b816101000151801561233b57508160800151155b1561234f5761234f60048360a001516136a5565b506376fa01c360e01b8160c00151826080015161236a610884565b84516123769190614e15565b84602001516123859190614dbc565b8e80602001906123959190614c9d565b6040516024016123a894939291906149b0565b60408051601f19818403018152919052602080820180516001600160e01b03166001600160e01b03199094169390931790925260e083015260009081906123f1908e018e614c9d565b6124029060a0810190608001613e75565b6001600160a01b031688604001358460e001516040516124229190614795565b60006040518083038160008787f1925050503d8060008114612460576040519150601f19603f3d011682016040523d82523d6000602084013e612465565b606091505b50915091508161247a5761247a6005826136a5565b50506040810151600b600061249260208f018f614c9d565b6124a39060a0810190608001613e75565b6001600160a01b03166001600160a01b031681526020019081526020016000205410156124e4576124e46006604051806020016040528060008152506136a5565b80608001516124f45760016124f7565b60005b8160a0015192509250509a509a98505050505050505050565b61252a6001600160a01b0382166370d596f560e11b6138c4565b6125765760405162461bcd60e51b815260206004820181905260248201527f746172676574206973206e6f7420612076616c696420495061796d6173746572604482015260640161099b565b6001600160a01b0381166000908152600b6020526040902054349061259c908290614dbc565b6001600160a01b0383166000818152600b6020908152604091829020939093555183815233927f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a7910160405180910390a35050565b6125f961358e565b600c54421061263f5760405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e4819195c1c9958d85d195960721b604482015260640161099b565b600c8190556040518181527f1c0aa0c666483fbf0cf795d9d646ea3552d1e3008162ba9ab1d6d6dfd8c6ec6b90602001612079565b336000818152600a602052604081205461268f908490614dbc565b6001600160a01b0383166000908152600a602052604090208190556001549091508111156126f25760405162461bcd60e51b815260206004820152601060248201526f746f6f206d616e7920776f726b65727360801b604482015260640161099b565b6126fb826129f5565b60005b8381101561280b57600060098187878581811061271d5761271d614e9f565b90506020020160208101906127329190613e75565b6001600160a01b039081168252602082019290925260400160002054161461279c5760405162461bcd60e51b815260206004820152601960248201527f7468697320776f726b6572206861732061206d616e6167657200000000000000604482015260640161099b565b82600960008787858181106127b3576127b3614e9f565b90506020020160208101906127c89190613e75565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790558061280381614e58565b9150506126fe565b50816001600160a01b03167febf4a9bffb39f7c5dbf3f65540183b9381ae226ac3d0a45b4cad484713bd4a2885858460405161284993929190614919565b60405180910390a250505050565b61285f61358e565b604051633962216760e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063396221679060240160206040518083038186803b1580156128c057600080fd5b505afa1580156128d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f891906140cd565b6129445760405162461bcd60e51b815260206004820181905260248201527f72656c617920736572766572206e6f74206573636865617461626c6520796574604482015260640161099b565b6001600160a01b038082166000908152600b6020526040808220805490839055600654909316825290205461297a908290614dbc565b6006546001600160a01b039081166000908152600b60209081526040918290209390935551838152908416917f3fb672a061b9c3ab083062a9a8ff532d341e5fa42145b91f3922a711ae135659910160405180910390a25050565b60606040518060600160405280602581526020016150ec60259139905090565b60405163c345315360e01b81526001600160a01b03828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063c3453153906024016101006040518083038186803b158015612a5c57600080fd5b505afa158015612a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a949190614484565b60a0820180516001600160a01b0390811660009081526008602052604090205491519395509193509116612b055760405162461bcd60e51b81526020600482015260186024820152771c995b185e481b585b9859d95c881b9bdd081cdd185ad95960421b604482015260640161099b565b8251811115612b565760405162461bcd60e51b815260206004820152601960248201527f7374616b6520616d6f756e7420697320746f6f20736d616c6c00000000000000604482015260640161099b565b80612ba35760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e67207468697320746f6b656e20697320666f7262696464656e00604482015260640161099b565b60055460208401511015612bf95760405162461bcd60e51b815260206004820152601a60248201527f756e7374616b652064656c617920697320746f6f20736d616c6c000000000000604482015260640161099b565b604083015115612c4b5760405162461bcd60e51b815260206004820152601860248201527f7374616b6520686173206265656e2077697468647261776e0000000000000000604482015260640161099b565b81611cb65760405162461bcd60e51b815260206004820181905260248201527f7468697320687562206973206e6f7420617574686f72697a656420627920534d604482015260640161099b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612d005760405162461bcd60e51b815260206004820152600d60248201526c2737ba103832b730b634bd32b960991b604482015260640161099b565b6001600160a01b038083166000908152600960205260409020541680612d5f5760405162461bcd60e51b81526020600482015260146024820152732ab735b737bbb7103932b630bc903bb7b935b2b960611b604482015260640161099b565b60405163c345315360e01b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c3453153906024016101006040518083038186803b158015612dc657600080fd5b505afa158015612dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dfe9190614484565b508051909150612e4b5760405162461bcd60e51b81526020600482015260186024820152771c995b185e481b585b9859d95c881b9bdd081cdd185ad95960421b604482015260640161099b565b805160405163026822bd60e21b81526001600160a01b038481166004830152858116602483015260448201929092527f0000000000000000000000000000000000000000000000000000000000000000909116906309a08af490606401600060405180830381600087803b158015612ec257600080fd5b505af1158015612ed6573d6000803e3d6000fd5b5050505050505050565b612ee861358e565b6001600160a01b038116612f4d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099b565b612f56816135e8565b50565b6040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508282600081518110612fb257612fb2614e9f565b6020026020010181815250508381600081518110612fd257612fd2614e9f565b60200260200101906001600160a01b031690816001600160a01b031681525050611cb681836119fb565b60006001600160e01b036130108580614c87565b61301e906020810190613e75565b6130288680614c87565b60800135858560405160200161304194939291906148f1565b604051602081830303815290604052805190602001201690509392505050565b612f5681604051602401613075919061499d565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b1790526138e0565b612f56816040516024016130ba91815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166327b7cf8560e01b1790526138e0565b61312e82826040516024016130ff929190614a99565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b1790526138e0565b5050565b61312e8282604051602401613148929190614ac3565b60408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b1790526138e0565b612f568160405160240161318b919061499d565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b1790526138e0565b60006131c7826004614dbc565b835110156132175760405162461bcd60e51b815260206004820152601a60248201527f726561644279746573343a206461746120746f6f2073686f7274000000000000604482015260640161099b565b5001602001516001600160e01b03191690565b6132556040518060800160405280600081526020016000815260200160008152602001600081525090565b60006132646020850185614c9d565b6132759060a0810190608001613e75565b6001600160a01b031663b039a88f61c3506040518263ffffffff1660e01b815260040160806040518083038187803b1580156132b057600080fd5b5086fa1580156132c4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132e9919061438c565b60608101519092503611156133405760405162461bcd60e51b815260206004820152601760248201527f6d73672e64617461206578636565646564206c696d6974000000000000000000604482015260640161099b565b81518510156133915760405162461bcd60e51b815260206004820152601a60248201527f616363657074616e63652062756467657420746f6f2068696768000000000000604482015260640161099b565b6020820151825110156133e65760405162461bcd60e51b815260206004820152601960248201527f616363657074616e63652062756467657420746f6f206c6f7700000000000000604482015260640161099b565b826133f46020860186614c9d565b604001356134029190614dbc565b90506000613417826104d86020880188614c9d565b9050600b600061342a6020880188614c9d565b61343b9060a0810190608001613e75565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156134ab5760405162461bcd60e51b815260206004820152601960248201527f5061796d61737465722062616c616e636520746f6f206c6f7700000000000000604482015260640161099b565b50935093915050565b60006134d96134c66020880188614c9d565b6134d49060c0810190614c41565b613901565b6134f46134e68880614c87565b6134d49060a0810190614c41565b6134fe8585613901565b6135088888613901565b6135128c8c613901565b61351e906102c4614dbc565b6135289190614dbc565b6135329190614dbc565b61353c9190614dbc565b6135469190614dbc565b9050368114612ed65760405162461bcd60e51b81526020600482015260146024820152736578747261206d73672e6461746120627974657360601b604482015260640161099b565b6000546001600160a01b031633146119f95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161099b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611cb6848484846040516024016136529493929190614ae5565b60408051601f198184030181529190526020810180516001600160e01b0316632c24bd7f60e11b1790526138e0565b60008183106136905781613692565b825b9392505050565b612f5681610400613927565b600082826040516020016136ba9291906149e3565b60405160208183030381529060405290506136d481613699565b8051602082018181fd5b600080606060006136ee87613934565b905060006137198961370360208b018b614c9d565b6137149060c081019060a001613e75565b613973565b90506137286020890189614c9d565b6137399060c081019060a001613e75565b6001600160a01b031663e024dc7f60e01b6137548a80614c87565b836040518060400160405280600c81526020016b14995b185e54995c5d595cdd60a21b8152506040518060a0016040528060618152602001614f3a606191396040518060e0016040528060bc815260200161513f60bc91396040516020016137bc9190614810565b60408051601f19818403018152908290526137db9392916020016147b1565b60405160208183030381529060405280519060200120868c8c60405160240161380996959493929190614b1d565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516138479190614795565b6000604051808303816000865af19150503d8060008114613884576040519150601f19603f3d011682016040523d82523d6000602084013e613889565b606091505b50909550925084156138af57828060200190518101906138a991906140e8565b90945092505b6138b883613699565b50509450945094915050565b60006138cf836139c6565b8015613692575061369283836139f9565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6000613910601f600019614e15565b61391b83601f614dbc565b61369291166020614dbc565b808251111561312e579052565b606061394b6139466020840184614c9d565b613a82565b60405160200161395d91815260200190565b6040516020818303038152906040529050919050565b60006136926040518060800160405280858152602001604051806040016040528060018152602001603360f81b81525081526020016139af4690565b8152602001846001600160a01b0316815250613b80565b60006139d9826301ffc9a760e01b6139f9565b80156107e057506139f2826001600160e01b03196139f9565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015613a6b575060208210155b8015613a775750600081115b979650505050505050565b60006040518060e0016040528060bc815260200161513f60bc91398051602091820120908335908401356040850135613ac16080870160608801613e75565b613ad160a0880160808901613e75565b613ae160c0890160a08a01613e75565b613aee60c08a018a614c41565b604051613afc929190614785565b604051908190038120613b63989796959493929160e08c0135906020019889526020890197909752604088019590955260608701939093526001600160a01b039182166080870152811660a08601521660c084015260e08301526101008201526101200190565b604051602081830303815290604052805190602001209050919050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82600001518051906020012083602001518051906020012084604001518560600151604051602001613b639594939291909485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b60405180610240016040528060001515815260200160006001600160e01b0319168152602001600081526020016060815260200160608152602001613c666040518060800160405280600081526020016000815260200160008152602001600081525090565b8152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160006001600160a01b031681526020016000801916815260200160008152602001606081525090565b8035613cd781614ecb565b919050565b600082601f830112613ced57600080fd5b81356020613d02613cfd83614d2e565b614cfe565b80838252828201915082860187848660051b8901011115613d2257600080fd5b60005b85811015613d4157813584529284019290840190600101613d25565b5090979650505050505050565b80518015158114613cd757600080fd5b60008083601f840112613d7057600080fd5b5081356001600160401b03811115613d8757600080fd5b602083019150836020828501011115613d9f57600080fd5b9250929050565b600082601f830112613db757600080fd5b81516001600160401b03811115613dd057613dd0614eb5565b613de3601f8201601f1916602001614cfe565b818152846020838601011115613df857600080fd5b613e09826020830160208701614e2c565b949350505050565b600060808284031215613e2357600080fd5b50919050565b600060408284031215613e2357600080fd5b803561ffff81168114613cd757600080fd5b803560ff81168114613cd757600080fd5b80356001600160501b0381168114613cd757600080fd5b600060208284031215613e8757600080fd5b813561369281614ecb565b60008060408385031215613ea557600080fd5b8235613eb081614ecb565b946020939093013593505050565b60008060408385031215613ed157600080fd5b8235613edc81614ecb565b91506020830135613eec81614ecb565b809150509250929050565b60008060208385031215613f0a57600080fd5b82356001600160401b0380821115613f2157600080fd5b818501915085601f830112613f3557600080fd5b813581811115613f4457600080fd5b8660208260051b8501011115613f5957600080fd5b60209290920196919550909350505050565b60008060408385031215613f7e57600080fd5b82356001600160401b0380821115613f9557600080fd5b818501915085601f830112613fa957600080fd5b81356020613fb9613cfd83614d2e565b8083825282820191508286018a848660051b8901011115613fd957600080fd5b600096505b84871015614005578035613ff181614ecb565b835260019690960195918301918301613fde565b509650508601359250508082111561401c57600080fd5b5061402985828601613cdc565b9150509250929050565b6000806040838503121561404657600080fd5b82356001600160401b038082111561405d57600080fd5b818501915085601f83011261407157600080fd5b81356020614081613cfd83614d2e565b8083825282820191508286018a848660051b89010111156140a157600080fd5b600096505b848710156140055780356140b981614ecb565b8352600196909601959183019183016140a6565b6000602082840312156140df57600080fd5b61369282613d4e565b600080604083850312156140fb57600080fd5b61410483613d4e565b915060208301516001600160401b0381111561411f57600080fd5b61402985828601613da6565b60006020828403121561413d57600080fd5b81356001600160e01b03198116811461369257600080fd5b6000806040838503121561416857600080fd5b82516001600160401b0381111561417e57600080fd5b61418a85828601613da6565b92505061419960208401613d4e565b90509250929050565b600080604083850312156141b557600080fd5b8251600781106141c457600080fd5b60208401519092506001600160401b0381111561411f57600080fd5b6000806000806000806000806000806101408b8d03121561420057600080fd5b8a356001600160401b038082111561421757600080fd5b6142238e838f01613d5e565b909c509a5060208d013591508082111561423c57600080fd5b6142488e838f01613e29565b995060408d013591508082111561425e57600080fd5b61426a8e838f01613d5e565b909950975060608d013591508082111561428357600080fd5b506142908d828e01613d5e565b90965094506142a490508c60808d01613e11565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060008060008060a0898b0312156142e157600080fd5b88356001600160401b03808211156142f857600080fd5b6143048c838d01613d5e565b909a50985060208b0135975060408b013591508082111561432457600080fd5b6143308c838d01613e29565b965060608b013591508082111561434657600080fd5b6143528c838d01613d5e565b909650945060808b013591508082111561436b57600080fd5b506143788b828c01613d5e565b999c989b5096995094979396929594505050565b60006080828403121561439e57600080fd5b604051608081018181106001600160401b03821117156143c0576143c0614eb5565b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b6000610120828403121561440457600080fd5b61440c614cb3565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015261444460a08401613ccc565b60a082015261445560c08401613e4d565b60c082015261446660e08401613e5e565b60e0820152610100614479818501613e3b565b908201529392505050565b60008082840361010081121561449957600080fd5b60e08112156144a757600080fd5b506144b0614cdc565b835181526020840151602082015260408401516040820152606084015160608201526080840151608082015260a08401516144ea81614ecb565b60a082015260c08401516144fd81614ecb565b60c0820152915061419960e08401613d4e565b60006020828403121561452257600080fd5b5035919050565b60006020828403121561453b57600080fd5b5051919050565b6000806040838503121561455557600080fd5b8235915060208301356001600160401b0381111561457257600080fd5b83016101008186031215613eec57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526145c6816020860160208601614e2c565b601f01601f19169290920160200192915050565b600781106145f857634e487b7160e01b600052602160045260246000fd5b9052565b6000813561460981614ecb565b6001600160a01b03908116845260208301359061462582614ecb565b16602084015260408281013590840152606080830135908401526080808301359084015261465660a0830183614d51565b60e060a086015261466b60e086018284614585565b91505060c083013560c08501528091505092915050565b600061010082358452602083013560208501526040830135604085015260608301356146ad81614ecb565b6001600160a01b0390811660608601526080840135906146cc82614ecb565b16608085015260a08301356146e081614ecb565b6001600160a01b031660a08501526146fb60c0840184614d51565b8260c087015261470e8387018284614585565b9250505060e083013560e08501528091505092915050565b6000813582360360de198101821261473d57600080fd5b60408552614750604086018584016145fc565b9150602084013560fe198201811261476757600080fd5b858303602087015261477b83868301614682565b9695505050505050565b8183823760009101908152919050565b600082516147a7818460208701614e2c565b9190910192915050565b600084516147c3818460208901614e2c565b600560fb1b90830190815284516147e1816001840160208901614e2c565b600b60fa1b600192909101918201528351614803816002840160208801614e2c565b0160020195945050505050565b7352656c6179446174612072656c6179446174612960601b81526000825161483f816014850160208701614e2c565b9190910160140192915050565b6001600160a01b0387811682528681166020830152851660408201526001600160e01b03198416606082015260c0810161488960808301856145da565b8260a0830152979650505050505050565b6001600160a01b0387811682528681166020830152851660408201526001600160e01b0319841660608201526080810183905260c060a082018190526000906148e5908301846145ae565b98975050505050505050565b60018060a01b038516815283602082015260606040820152600061477b606083018486614585565b6040808252810183905260008460608301825b8681101561495c57823561493f81614ecb565b6001600160a01b031682526020928301929091019060010161492c565b5060209390930193909352509392505050565b841515815283602082015261498760408201846145da565b60806060820152600061477b60808301846145ae565b60208152600061369260208301846145ae565b6080815260006149c360808301876145ae565b85151560208401528460408401528281036060840152613a778185614682565b6149ed81846145da565b604060208201526000613e0960408301846145ae565b6000610140808352614a188184018d8f614585565b90508281036020840152614a2c818c614726565b90508281036040840152614a41818a8c614585565b90508281036060840152614a5681888a614585565b86516080850152602087015160a0850152604087015160c085015260609096015160e0840152505061010081019290925261012090910152979650505050505050565b604081526000614aac60408301856145ae565b905060018060a01b03831660208301529392505050565b604081526000614ad660408301856145ae565b90508260208301529392505050565b608081526000614af860808301876145ae565b6020830195909552506001600160a01b03929092166040830152606090910152919050565b60a081526000614b3060a08301896145fc565b8760208401528660408401528281036060840152614b4e81876145ae565b90508281036080840152614b63818587614585565b9998505050505050505050565b600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260018060a01b0360a08401511660a083015260ff60c08401511660c083015260e0830151614bde60e08401826001600160501b03169052565b506101009283015161ffff16919092015290565b608081526000614c056080830189614726565b8281036020840152614c1881888a614585565b90508281036040840152614c2d818688614585565b915050826060830152979650505050505050565b6000808335601e19843603018112614c5857600080fd5b8301803591506001600160401b03821115614c7257600080fd5b602001915036819003821315613d9f57600080fd5b6000823560de198336030181126147a757600080fd5b6000823560fe198336030181126147a757600080fd5b60405161012081016001600160401b0381118282101715614cd657614cd6614eb5565b60405290565b60405160e081016001600160401b0381118282101715614cd657614cd6614eb5565b604051601f8201601f191681016001600160401b0381118282101715614d2657614d26614eb5565b604052919050565b60006001600160401b03821115614d4757614d47614eb5565b5060051b60200190565b6000808335601e19843603018112614d6857600080fd5b83016020810192503590506001600160401b03811115614d8757600080fd5b803603831315613d9f57600080fd5b600061ffff808316818516808303821115614db357614db3614e73565b01949350505050565b60008219821115614dcf57614dcf614e73565b500190565b600082614df157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614e1057614e10614e73565b500290565b600082821015614e2757614e27614e73565b500390565b60005b83811015614e47578181015183820152602001614e2f565b83811115611cb65750506000910152565b6000600019821415614e6c57614e6c614e73565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612f5657600080fdfe72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e72656c6179576f726b657272656c617943616c6c2072656c6179526571756573742e726571756573742e76616c6964556e74696c54696d65616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c627974657320646174612c75696e743235362076616c6964556e74696c54696d6572656c617943616c6c2072656c6179526571756573742e726571756573742e6e6f6e636572656c617943616c6c2072656c6179526571756573742e726571756573742e746f72656c617943616c6c2072656c6179526571756573742e726571756573742e67617372656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7472616e73616374696f6e43616c6c646174614761735573656472656c617943616c6c2072656c6179526571756573742e72656c6179446174612e6d617846656550657247617372656c617943616c6c2072656c6179526571756573742e72656c6179446174612e636c69656e74496472656c617943616c6c2072656c6179526571756573742e72656c6179446174612e6d61785072696f7269747946656550657247617372656c617943616c6c2072656c6179526571756573742e726571756573742e76616c7565332e302e302d626574612e332b6f70656e67736e2e6172626875622e6972656c617968756272656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7061796d61737465724461746152656c6179446174612875696e74323536206d61784665655065724761732c75696e74323536206d61785072696f726974794665655065724761732c75696e74323536207472616e73616374696f6e43616c6c64617461476173557365642c616464726573732072656c6179576f726b65722c61646472657373207061796d61737465722c6164647265737320666f727761726465722c6279746573207061796d6173746572446174612c75696e7432353620636c69656e7449642972656c617943616c6c2072656c6179526571756573742e726571756573742e6461746172656c617943616c6c2072656c6179526571756573742e72656c6179446174612e666f7277617264657272656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7061796d617374657272656c617943616c6c2072656c6179526571756573742e726571756573742e66726f6da2646970667358221220475e5d1be8e24553d84c94cdd51a1e32ee42f2e6fb76d70a7bf3d9c9ba530fb264736f6c63430008070033",
    "deployedBytecode": "0x60806040526004361061020f5760003560e01c80639bcde3f311610118578063ca64f9e7116100a0578063e6e22e121161006f578063e6e22e12146106e1578063ebcd31ac14610701578063f2fde38b14610721578063f3fef3a314610741578063f7908a741461076157600080fd5b8063ca64f9e714610636578063d26152f914610669578063d904c73214610689578063ddf73789146106ab57600080fd5b8063af595dfc116100e7578063af595dfc14610572578063be7c76ad14610592578063c2da0786146105cb578063c5c98a1a146105eb578063c71782301461061e57600080fd5b80639bcde3f3146104dd578063a51c8cb9146104fd578063a6e61b6014610531578063aa67c9191461055f57600080fd5b80636ca862e21161019b57806375dc7b4e1161016a57806375dc7b4e1461042c5780638a09fb561461045f5780638ac3b8451461047f5780638da5cb5b1461049f5780638e53548b146104bd57600080fd5b80636ca862e21461039157806370a08231146103c1578063715018a6146103f757806372c1ab0c1461040c57600080fd5b806345bdade7116101e257806345bdade7146102bb5780634f7de031146102d057806351d85156146102f257806359c4afc0146103395780636bd50cef1461036f57600080fd5b806301ffc9a71461021457806320ffd56d1461024957806339622167146102865780633c16e59a146102a6575b600080fd5b34801561022057600080fd5b5061023461022f36600461412b565b610794565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b604051908152602001610240565b34801561029257600080fd5b506102346102a1366004613e75565b6107e6565b3480156102b257600080fd5b50600c54610278565b3480156102c757600080fd5b50610278610884565b3480156102dc57600080fd5b506102f06102eb366004613e75565b610927565b005b3480156102fe57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610240565b34801561034557600080fd5b50610278610354366004613e75565b6001600160a01b03166000908152600a602052604090205490565b34801561037b57600080fd5b50610384610a83565b6040516102409190614b70565b34801561039d57600080fd5b506103b16103ac3660046142c5565b610b64565b604051610240949392919061496f565b3480156103cd57600080fd5b506102786103dc366004613e75565b6001600160a01b03166000908152600b602052604090205490565b34801561040357600080fd5b506102f06119e7565b34801561041857600080fd5b506102f0610427366004613f6b565b6119fb565b34801561043857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610321565b34801561046b57600080fd5b506102f061047a366004614033565b611cbc565b34801561048b57600080fd5b5061027861049a366004614510565b611e13565b3480156104ab57600080fd5b506000546001600160a01b0316610321565b3480156104c957600080fd5b506102786104d8366004614542565b611e48565b3480156104e957600080fd5b506102f06104f83660046143f1565b611ede565b34801561050957600080fd5b506103217f000000000000000000000000000000000000000000000000000000000000000081565b34801561053d57600080fd5b5061055161054c3660046141e0565b612084565b6040516102409291906149e3565b6102f061056d366004613e75565b612510565b34801561057e57600080fd5b506102f061058d366004614510565b6125f1565b34801561059e57600080fd5b506103216105ad366004613e75565b6001600160a01b039081166000908152600960205260409020541690565b3480156105d757600080fd5b506102f06105e6366004613ef7565b612674565b3480156105f757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610278565b34801561062a57600080fd5b50600c54421015610234565b34801561064257600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610321565b34801561067557600080fd5b506102f0610684366004613e75565b612857565b34801561069557600080fd5b5061069e6129d5565b604051610240919061499d565b3480156106b757600080fd5b506102786106c6366004613e75565b6001600160a01b031660009081526008602052604090205490565b3480156106ed57600080fd5b506102f06106fc366004613e75565b6129f5565b34801561070d57600080fd5b506102f061071c366004613ebe565b612c98565b34801561072d57600080fd5b506102f061073c366004613e75565b612ee0565b34801561074d57600080fd5b506102f061075c366004613e92565b612f59565b34801561076d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610321565b60006001600160e01b0319821663e9fb30f760e01b14806107c557506001600160e01b03198216630704183b60e11b145b806107e057506301ffc9a760e01b6001600160e01b03198316145b92915050565b604051633962216760e01b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063396221679060240160206040518083038186803b15801561084c57600080fd5b505afa158015610860573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e091906140cd565b60005a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a94597ff6040518163ffffffff1660e01b815260040160206040518083038186803b1580156108e057600080fd5b505afa1580156108f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109189190614529565b6109229190614dbc565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109a45760405162461bcd60e51b815260206004820152601d60248201527f63616c6c6572206973206e6f742072656c61792072656769737472617200000060448201526064015b60405180910390fd5b6109ad816129f5565b6001600160a01b0381166000908152600a6020526040902054610a055760405162461bcd60e51b815260206004820152601060248201526f6e6f2072656c617920776f726b65727360801b604482015260640161099b565b6040516346dcbf0b60e01b81526001600160a01b0382811660048301527f000000000000000000000000000000000000000000000000000000000000000016906346dcbf0b90602401600060405180830381600087803b158015610a6857600080fd5b505af1158015610a7c573d6000803e3d6000fd5b5050505050565b610aeb604051806101200160405280600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600060ff16815260200160006001600160501b03168152602001600061ffff1681525090565b5060408051610120810182526001548152600254602082015260035491810191909152600454606082015260055460808201526006546001600160a01b03811660a0830152600160a01b810460ff1660c0830152600160a81b90046001600160501b031660e082015260075461ffff1661010082015290565b60008060006060610b73613c00565b610b7b610884565b6040820152610b8b8a8a8a612ffc565b6101e082015260408051808201909152601881527f72656c617943616c6c2072656c617952657175657374496400000000000000006020820152610bce90613061565b610bdc816101e001516130a4565b610c1560405180606001604052806023815260200161527260239139610c028c80614c87565b610c10906020810190613e75565b6130e9565b610c4c604051806060016040528060218152602001614fbf60219139610c3b8c80614c87565b610c10906040810190602001613e75565b610c7b6040518060600160405280602481526020016150c860249139610c728c80614c87565b60400135613132565b610caa604051806060016040528060228152602001614fe060229139610ca18c80614c87565b60600135613132565b610cd9604051806060016040528060248152602001614f9b60249139610cd08c80614c87565b60800135613132565b610d086040518060600160405280602d8152602001614f0d602d9139610cff8c80614c87565b60c00135613132565b610d376040518060600160405280602d815260200161503d602d9139610d3160208d018d614c9d565b35613132565b610d6960405180606001604052806035815260200161509360359139610d6060208d018d614c9d565b60200135613132565b610d926040518060600160405280603b8152602001615002603b9139610c7260208d018d614c9d565b610dcc6040518060600160405280602c8152602001614ee1602c9139610dbb60208d018d614c9d565b610c10906080810190606001613e75565b610e066040518060600160405280602a8152602001615248602a9139610df560208d018d614c9d565b610c109060a0810190608001613e75565b610e406040518060600160405280602a815260200161521e602a9139610e2f60208d018d614c9d565b610c109060c081019060a001613e75565b610e7260405180606001604052806029815260200161506a60299139610e6960208d018d614c9d565b60e00135613132565b610eb06040518060400160405280601d81526020017f72656c617943616c6c20646f6d61696e536570617261746f724e616d65000000815250613061565b610eef8d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061306192505050565b610f236040518060400160405280601381526020017272656c617943616c6c207369676e617475726560681b815250613061565b610f6289898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317792505050565b610f996040518060400160405280601681526020017572656c617943616c6c20617070726f76616c4461746160501b815250613061565b610fd887878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317792505050565b610ff96040518060600160405280602381526020016151fb60239139613061565b61104e6110068b80614c87565b6110149060a0810190614c41565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317792505050565b61106f6040518060600160405280602e8152602001615111602e9139613061565b61108d61107f60208c018c614c9d565b6110149060c0810190614c41565b6110cc6040518060400160405280601d81526020017f72656c617943616c6c206d6178416363657074616e63654275646765740000008152508c613132565b600c54421061110e5760405162461bcd60e51b815260206004820152600e60248201526d1a1d588819195c1c9958d85d195960921b604482015260640161099b565b600461111a8b80614c87565b6111289060a0810190614c41565b9050101561113757600061118c565b61118c6111448b80614c87565b6111529060a0810190614c41565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506131ba915050565b6001600160e01b0319166020820152336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906111d357503215155b156112e757876112255760405162461bcd60e51b815260206004820181905260248201527f6d697373696e67207369676e6174757265206f72206261642067617465776179604482015260640161099b565b3332146112745760405162461bcd60e51b815260206004820152601860248201527f72656c617920776f726b6572206d75737420626520454f410000000000000000604482015260640161099b565b61128160208b018b614c9d565b611292906080810190606001613e75565b6001600160a01b0316336001600160a01b0316146112e75760405162461bcd60e51b81526020600482015260126024820152712737ba1030903934b3b43a103bb7b935b2b960711b604482015260640161099b565b321561138557600960006112fe60208d018d614c9d565b61130f906080810190606001613e75565b6001600160a01b039081168252602082019290925260400160002054166101c082018190526113775760405162461bcd60e51b81526020600482015260146024820152732ab735b737bbb7103932b630bc903bb7b935b2b960611b604482015260640161099b565b611385816101c001516129f5565b6113948b8b836040015161322a565b61010083015260a08201526113ae8d8d8c8c8c8c8c6134b4565b60025460405a6113bf90603f614df6565b6113c99190614dd4565b6113d39190614e15565b6101208201526113e1610884565b610140820152600354600454610120830151604084015161140560208f018f614c9d565b604001356114139190614dbc565b61141d9190614dbc565b6114279190614dbc565b6114319190614dbc565b81610200018181525050306001600160a01b031681610120015163a6e61b6060e01b8f8f8e8e8e8e8e8a60a00151611467610884565b8c61020001516114779190614e15565b8c61010001516040516024016114969a99989796959493929190614a03565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516114d49190614795565b60006040518083038160008787f1925050503d8060008114611512576040519150601f19603f3d011682016040523d82523d6000602084013e611517565b606091505b506102208301521515815261152a610884565b81610140015161153a9190614e15565b60e08201526102208101518051611559916020918101820191016141a2565b8260c0018360800182905282600681111561157657611576614e89565b600681111561158757611587614e89565b90525050608081015151156115d8577fa1478a4242848419db824250a0dddc645dca0d6a9b12ab1fd79b00145a0ba98e8160c0015182608001516040516115cf9291906149e3565b60405180910390a15b805161173a5760028160c0015160068111156115f6576115f6614e89565b1480611665575061160a60208b018b614c9d565b60a08201515161161e916040013590614dbc565b8160e0015111158015611665575060038160c00151600681111561164457611644614e89565b1480611665575060048160c00151600681111561166357611663614e89565b145b1561173a576101e081015161167d60208c018c614c9d565b61168e9060a0810190608001613e75565b6101c08301516001600160a01b0391821691167f0c47510cb900901afca7c9e926892582a36fd3bb7f908142ccf0fb4382a2b6846116cc8e80614c87565b6116da906020810190613e75565b6116e48f80614c87565b6116f5906040810190602001613e75565b3387602001518860e0015189608001516040516117179695949392919061489a565b60405180910390a46000808260c0015183608001519450945094509450506119d8565b600454611745610884565b82604001516117549190614e15565b61176160208d018d614c9d565b6040013561176f9190614dbc565b6117799190614dbc565b6101608201819052611792906104d860208d018d614c9d565b935061179d84611e13565b61018082015283600b60006117b560208e018e614c9d565b6117c69060a0810190608001613e75565b6001600160a01b03166001600160a01b03168152602001908152602001600020546117f19190614e15565b600b600061180260208e018e614c9d565b6118139060a0810190608001613e75565b6001600160a01b0316815260208101919091526040016000205561018081015161183d9085614e15565b6101c08201516001600160a01b03166000908152600b60205260409020546118659190614dbc565b6101c08201516001600160a01b03166000908152600b6020526040902055610180810151156118d5576101808101516006546001600160a01b03166000908152600b60205260409020546118b99190614dbc565b6006546001600160a01b03166000908152600b60205260409020555b60006118e18b80614c87565b6118ef906020810190613e75565b905060006118fd8c80614c87565b61190e906040810190602001613e75565b9050600061191f60208e018e614c9d565b6119309060a0810190608001613e75565b9050836101e00151336001600160a01b0316856101c001516001600160a01b03167fd51ac07012398c2059ec53c6005fa8639657917bd2dbd72bc489a3c0eaaa7f168686868a602001518b60c001518f6040516119929695949392919061484c565b60405180910390a4505050326119bb5760c08101516080909101516001955090925090506119d8565b60c001516040805160208101909152600081526001955090925090505b98509850985098945050505050565b6119ef61358e565b6119f960006135e8565b565b3360005b8251811015611cb657611aa06040518060400160405280601981526020017f77697468647261774d756c7469706c6520257320257320257300000000000000815250600b6000856001600160a01b03166001600160a01b0316815260200190815260200160002054868481518110611a7957611a79614e9f565b6020026020010151868581518110611a9357611a93614e9f565b6020026020010151613638565b6001600160a01b0382166000908152600b60205260409020548351849083908110611acd57611acd614e9f565b6020026020010151811015611b195760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b604482015260640161099b565b838281518110611b2b57611b2b614e9f565b602002602001015181611b3e9190614e15565b6001600160a01b0384166000908152600b60205260408120919091558551869084908110611b6e57611b6e614e9f565b60200260200101516001600160a01b0316858481518110611b9157611b91614e9f565b602002602001015160405160006040518083038185875af1925050503d8060008114611bd9576040519150601f19603f3d011682016040523d82523d6000602084013e611bde565b606091505b5050905080611c225760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161099b565b858381518110611c3457611c34614e9f565b60200260200101516001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb878681518110611c8257611c82614e9f565b6020026020010151604051611c9991815260200190565b60405180910390a350508080611cae90614e58565b9150506119ff565b50505050565b611cc461358e565b8051825114611d155760405162461bcd60e51b815260206004820152601e60248201527f7365744d696e696d756d5374616b65733a2077726f6e67206c656e6774680000604482015260640161099b565b60005b8251811015611e0e57818181518110611d3357611d33614e9f565b602002602001015160086000858481518110611d5157611d51614e9f565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055507ffb7510fe755f485459ee8ed619d4a0addc092c230ff47e760a62aeba78ebb9e3838281518110611db057611db0614e9f565b6020026020010151838381518110611dca57611dca614e9f565b6020026020010151604051611df49291906001600160a01b03929092168252602082015260400190565b60405180910390a180611e0681614e58565b915050611d18565b505050565b600654600090600160a01b900460ff16611e2f57506000919050565b600654606490600160a01b900460ff1683020492915050565b600080823560208401351415611e6057506000611e63565b50485b6000611e7f8435611e7a3a81602089013587614dbc565b613681565b600754909150606490611e969061ffff1682614d96565b61ffff16611ea48388614df6565b611eae9190614df6565b611eb89190614dd4565b600654611ed59190600160a81b90046001600160501b0316614dbc565b95945050505050565b611ee661358e565b60648160c0015160ff1610611f305760405162461bcd60e51b815260206004820152601060248201526f0c8caec40cccaca40e8dede40d0d2ced60831b604482015260640161099b565b8051600190815560208201516002556040808301516003556060830151600455608083015160055560a08301516006805460c086015160e08701516001600160501b0316600160a81b0269ffffffffffffffffffff60a81b1960ff909216600160a01b026001600160a81b03199093166001600160a01b039095169490941791909117169190911790556101008301516007805461ffff90921661ffff19909216919091179055517f4812ada68f7c2cdc9f4a4a09e157ea6b924e0ef40a4fa7aa074fa8f70b1e72479161207991815481526001820154602082015260028201546040820152600382015460608201526004820154608082015260058201546001600160a01b03811660a08084019190915260ff9082901c1660c08301526001600160501b0360a89190911c1660e082015260069091015461ffff166101008201526101200190565b60405180910390a150565b600060606120de604051806101200160405280600081526020016000815260200160008152602001600080191681526020016000151581526020016060815260200160608152602001606081526020016000151581525090565b6120e6610884565b81525a6120f39086614e15565b60208201523330146121475760405162461bcd60e51b815260206004820152601a60248201527f4d7573742062652063616c6c65642062792052656c6179487562000000000000604482015260640161099b565b600b600061215860208e018e614c9d565b6121699060a0810190608001613e75565b6001600160a01b0316815260208101919091526040908101600020548282015251622f977560e21b906121aa908d908d908d908d908d908b90602401614bf2565b60408051601f19818403018152919052602080820180516001600160e01b03166001600160e01b03199094169390931790925260e08301526000906060906121f4908e018e614c9d565b6122059060a0810190608001613e75565b6001600160a01b031688602001358460e001516040516122259190614795565b60006040518083038160008787f1925050503d8060008114612263576040519150601f19603f3d011682016040523d82523d6000602084013e612268565b606091505b509092509050816122875761227c81613699565b6122876002826136a5565b8080602001905181019061229b9190614155565b8460c001856101000182151515158152508290525050505060006123058e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d8d8d6136de565b60a0850152151560808401529050806123275761232760038360a001516136a5565b816101000151801561233b57508160800151155b1561234f5761234f60048360a001516136a5565b506376fa01c360e01b8160c00151826080015161236a610884565b84516123769190614e15565b84602001516123859190614dbc565b8e80602001906123959190614c9d565b6040516024016123a894939291906149b0565b60408051601f19818403018152919052602080820180516001600160e01b03166001600160e01b03199094169390931790925260e083015260009081906123f1908e018e614c9d565b6124029060a0810190608001613e75565b6001600160a01b031688604001358460e001516040516124229190614795565b60006040518083038160008787f1925050503d8060008114612460576040519150601f19603f3d011682016040523d82523d6000602084013e612465565b606091505b50915091508161247a5761247a6005826136a5565b50506040810151600b600061249260208f018f614c9d565b6124a39060a0810190608001613e75565b6001600160a01b03166001600160a01b031681526020019081526020016000205410156124e4576124e46006604051806020016040528060008152506136a5565b80608001516124f45760016124f7565b60005b8160a0015192509250509a509a98505050505050505050565b61252a6001600160a01b0382166370d596f560e11b6138c4565b6125765760405162461bcd60e51b815260206004820181905260248201527f746172676574206973206e6f7420612076616c696420495061796d6173746572604482015260640161099b565b6001600160a01b0381166000908152600b6020526040902054349061259c908290614dbc565b6001600160a01b0383166000818152600b6020908152604091829020939093555183815233927f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a7910160405180910390a35050565b6125f961358e565b600c54421061263f5760405162461bcd60e51b8152602060048201526012602482015271105b1c9958591e4819195c1c9958d85d195960721b604482015260640161099b565b600c8190556040518181527f1c0aa0c666483fbf0cf795d9d646ea3552d1e3008162ba9ab1d6d6dfd8c6ec6b90602001612079565b336000818152600a602052604081205461268f908490614dbc565b6001600160a01b0383166000908152600a602052604090208190556001549091508111156126f25760405162461bcd60e51b815260206004820152601060248201526f746f6f206d616e7920776f726b65727360801b604482015260640161099b565b6126fb826129f5565b60005b8381101561280b57600060098187878581811061271d5761271d614e9f565b90506020020160208101906127329190613e75565b6001600160a01b039081168252602082019290925260400160002054161461279c5760405162461bcd60e51b815260206004820152601960248201527f7468697320776f726b6572206861732061206d616e6167657200000000000000604482015260640161099b565b82600960008787858181106127b3576127b3614e9f565b90506020020160208101906127c89190613e75565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790558061280381614e58565b9150506126fe565b50816001600160a01b03167febf4a9bffb39f7c5dbf3f65540183b9381ae226ac3d0a45b4cad484713bd4a2885858460405161284993929190614919565b60405180910390a250505050565b61285f61358e565b604051633962216760e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063396221679060240160206040518083038186803b1580156128c057600080fd5b505afa1580156128d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f891906140cd565b6129445760405162461bcd60e51b815260206004820181905260248201527f72656c617920736572766572206e6f74206573636865617461626c6520796574604482015260640161099b565b6001600160a01b038082166000908152600b6020526040808220805490839055600654909316825290205461297a908290614dbc565b6006546001600160a01b039081166000908152600b60209081526040918290209390935551838152908416917f3fb672a061b9c3ab083062a9a8ff532d341e5fa42145b91f3922a711ae135659910160405180910390a25050565b60606040518060600160405280602581526020016150ec60259139905090565b60405163c345315360e01b81526001600160a01b03828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063c3453153906024016101006040518083038186803b158015612a5c57600080fd5b505afa158015612a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a949190614484565b60a0820180516001600160a01b0390811660009081526008602052604090205491519395509193509116612b055760405162461bcd60e51b81526020600482015260186024820152771c995b185e481b585b9859d95c881b9bdd081cdd185ad95960421b604482015260640161099b565b8251811115612b565760405162461bcd60e51b815260206004820152601960248201527f7374616b6520616d6f756e7420697320746f6f20736d616c6c00000000000000604482015260640161099b565b80612ba35760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e67207468697320746f6b656e20697320666f7262696464656e00604482015260640161099b565b60055460208401511015612bf95760405162461bcd60e51b815260206004820152601a60248201527f756e7374616b652064656c617920697320746f6f20736d616c6c000000000000604482015260640161099b565b604083015115612c4b5760405162461bcd60e51b815260206004820152601860248201527f7374616b6520686173206265656e2077697468647261776e0000000000000000604482015260640161099b565b81611cb65760405162461bcd60e51b815260206004820181905260248201527f7468697320687562206973206e6f7420617574686f72697a656420627920534d604482015260640161099b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612d005760405162461bcd60e51b815260206004820152600d60248201526c2737ba103832b730b634bd32b960991b604482015260640161099b565b6001600160a01b038083166000908152600960205260409020541680612d5f5760405162461bcd60e51b81526020600482015260146024820152732ab735b737bbb7103932b630bc903bb7b935b2b960611b604482015260640161099b565b60405163c345315360e01b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063c3453153906024016101006040518083038186803b158015612dc657600080fd5b505afa158015612dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dfe9190614484565b508051909150612e4b5760405162461bcd60e51b81526020600482015260186024820152771c995b185e481b585b9859d95c881b9bdd081cdd185ad95960421b604482015260640161099b565b805160405163026822bd60e21b81526001600160a01b038481166004830152858116602483015260448201929092527f0000000000000000000000000000000000000000000000000000000000000000909116906309a08af490606401600060405180830381600087803b158015612ec257600080fd5b505af1158015612ed6573d6000803e3d6000fd5b5050505050505050565b612ee861358e565b6001600160a01b038116612f4d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099b565b612f56816135e8565b50565b6040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508282600081518110612fb257612fb2614e9f565b6020026020010181815250508381600081518110612fd257612fd2614e9f565b60200260200101906001600160a01b031690816001600160a01b031681525050611cb681836119fb565b60006001600160e01b036130108580614c87565b61301e906020810190613e75565b6130288680614c87565b60800135858560405160200161304194939291906148f1565b604051602081830303815290604052805190602001201690509392505050565b612f5681604051602401613075919061499d565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b1790526138e0565b612f56816040516024016130ba91815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166327b7cf8560e01b1790526138e0565b61312e82826040516024016130ff929190614a99565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b1790526138e0565b5050565b61312e8282604051602401613148929190614ac3565b60408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b1790526138e0565b612f568160405160240161318b919061499d565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b1790526138e0565b60006131c7826004614dbc565b835110156132175760405162461bcd60e51b815260206004820152601a60248201527f726561644279746573343a206461746120746f6f2073686f7274000000000000604482015260640161099b565b5001602001516001600160e01b03191690565b6132556040518060800160405280600081526020016000815260200160008152602001600081525090565b60006132646020850185614c9d565b6132759060a0810190608001613e75565b6001600160a01b031663b039a88f61c3506040518263ffffffff1660e01b815260040160806040518083038187803b1580156132b057600080fd5b5086fa1580156132c4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132e9919061438c565b60608101519092503611156133405760405162461bcd60e51b815260206004820152601760248201527f6d73672e64617461206578636565646564206c696d6974000000000000000000604482015260640161099b565b81518510156133915760405162461bcd60e51b815260206004820152601a60248201527f616363657074616e63652062756467657420746f6f2068696768000000000000604482015260640161099b565b6020820151825110156133e65760405162461bcd60e51b815260206004820152601960248201527f616363657074616e63652062756467657420746f6f206c6f7700000000000000604482015260640161099b565b826133f46020860186614c9d565b604001356134029190614dbc565b90506000613417826104d86020880188614c9d565b9050600b600061342a6020880188614c9d565b61343b9060a0810190608001613e75565b6001600160a01b03166001600160a01b03168152602001908152602001600020548111156134ab5760405162461bcd60e51b815260206004820152601960248201527f5061796d61737465722062616c616e636520746f6f206c6f7700000000000000604482015260640161099b565b50935093915050565b60006134d96134c66020880188614c9d565b6134d49060c0810190614c41565b613901565b6134f46134e68880614c87565b6134d49060a0810190614c41565b6134fe8585613901565b6135088888613901565b6135128c8c613901565b61351e906102c4614dbc565b6135289190614dbc565b6135329190614dbc565b61353c9190614dbc565b6135469190614dbc565b9050368114612ed65760405162461bcd60e51b81526020600482015260146024820152736578747261206d73672e6461746120627974657360601b604482015260640161099b565b6000546001600160a01b031633146119f95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161099b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611cb6848484846040516024016136529493929190614ae5565b60408051601f198184030181529190526020810180516001600160e01b0316632c24bd7f60e11b1790526138e0565b60008183106136905781613692565b825b9392505050565b612f5681610400613927565b600082826040516020016136ba9291906149e3565b60405160208183030381529060405290506136d481613699565b8051602082018181fd5b600080606060006136ee87613934565b905060006137198961370360208b018b614c9d565b6137149060c081019060a001613e75565b613973565b90506137286020890189614c9d565b6137399060c081019060a001613e75565b6001600160a01b031663e024dc7f60e01b6137548a80614c87565b836040518060400160405280600c81526020016b14995b185e54995c5d595cdd60a21b8152506040518060a0016040528060618152602001614f3a606191396040518060e0016040528060bc815260200161513f60bc91396040516020016137bc9190614810565b60408051601f19818403018152908290526137db9392916020016147b1565b60405160208183030381529060405280519060200120868c8c60405160240161380996959493929190614b1d565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516138479190614795565b6000604051808303816000865af19150503d8060008114613884576040519150601f19603f3d011682016040523d82523d6000602084013e613889565b606091505b50909550925084156138af57828060200190518101906138a991906140e8565b90945092505b6138b883613699565b50509450945094915050565b60006138cf836139c6565b8015613692575061369283836139f9565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6000613910601f600019614e15565b61391b83601f614dbc565b61369291166020614dbc565b808251111561312e579052565b606061394b6139466020840184614c9d565b613a82565b60405160200161395d91815260200190565b6040516020818303038152906040529050919050565b60006136926040518060800160405280858152602001604051806040016040528060018152602001603360f81b81525081526020016139af4690565b8152602001846001600160a01b0316815250613b80565b60006139d9826301ffc9a760e01b6139f9565b80156107e057506139f2826001600160e01b03196139f9565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015613a6b575060208210155b8015613a775750600081115b979650505050505050565b60006040518060e0016040528060bc815260200161513f60bc91398051602091820120908335908401356040850135613ac16080870160608801613e75565b613ad160a0880160808901613e75565b613ae160c0890160a08a01613e75565b613aee60c08a018a614c41565b604051613afc929190614785565b604051908190038120613b63989796959493929160e08c0135906020019889526020890197909752604088019590955260608701939093526001600160a01b039182166080870152811660a08601521660c084015260e08301526101008201526101200190565b604051602081830303815290604052805190602001209050919050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82600001518051906020012083602001518051906020012084604001518560600151604051602001613b639594939291909485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b60405180610240016040528060001515815260200160006001600160e01b0319168152602001600081526020016060815260200160608152602001613c666040518060800160405280600081526020016000815260200160008152602001600081525090565b8152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160006001600160a01b031681526020016000801916815260200160008152602001606081525090565b8035613cd781614ecb565b919050565b600082601f830112613ced57600080fd5b81356020613d02613cfd83614d2e565b614cfe565b80838252828201915082860187848660051b8901011115613d2257600080fd5b60005b85811015613d4157813584529284019290840190600101613d25565b5090979650505050505050565b80518015158114613cd757600080fd5b60008083601f840112613d7057600080fd5b5081356001600160401b03811115613d8757600080fd5b602083019150836020828501011115613d9f57600080fd5b9250929050565b600082601f830112613db757600080fd5b81516001600160401b03811115613dd057613dd0614eb5565b613de3601f8201601f1916602001614cfe565b818152846020838601011115613df857600080fd5b613e09826020830160208701614e2c565b949350505050565b600060808284031215613e2357600080fd5b50919050565b600060408284031215613e2357600080fd5b803561ffff81168114613cd757600080fd5b803560ff81168114613cd757600080fd5b80356001600160501b0381168114613cd757600080fd5b600060208284031215613e8757600080fd5b813561369281614ecb565b60008060408385031215613ea557600080fd5b8235613eb081614ecb565b946020939093013593505050565b60008060408385031215613ed157600080fd5b8235613edc81614ecb565b91506020830135613eec81614ecb565b809150509250929050565b60008060208385031215613f0a57600080fd5b82356001600160401b0380821115613f2157600080fd5b818501915085601f830112613f3557600080fd5b813581811115613f4457600080fd5b8660208260051b8501011115613f5957600080fd5b60209290920196919550909350505050565b60008060408385031215613f7e57600080fd5b82356001600160401b0380821115613f9557600080fd5b818501915085601f830112613fa957600080fd5b81356020613fb9613cfd83614d2e565b8083825282820191508286018a848660051b8901011115613fd957600080fd5b600096505b84871015614005578035613ff181614ecb565b835260019690960195918301918301613fde565b509650508601359250508082111561401c57600080fd5b5061402985828601613cdc565b9150509250929050565b6000806040838503121561404657600080fd5b82356001600160401b038082111561405d57600080fd5b818501915085601f83011261407157600080fd5b81356020614081613cfd83614d2e565b8083825282820191508286018a848660051b89010111156140a157600080fd5b600096505b848710156140055780356140b981614ecb565b8352600196909601959183019183016140a6565b6000602082840312156140df57600080fd5b61369282613d4e565b600080604083850312156140fb57600080fd5b61410483613d4e565b915060208301516001600160401b0381111561411f57600080fd5b61402985828601613da6565b60006020828403121561413d57600080fd5b81356001600160e01b03198116811461369257600080fd5b6000806040838503121561416857600080fd5b82516001600160401b0381111561417e57600080fd5b61418a85828601613da6565b92505061419960208401613d4e565b90509250929050565b600080604083850312156141b557600080fd5b8251600781106141c457600080fd5b60208401519092506001600160401b0381111561411f57600080fd5b6000806000806000806000806000806101408b8d03121561420057600080fd5b8a356001600160401b038082111561421757600080fd5b6142238e838f01613d5e565b909c509a5060208d013591508082111561423c57600080fd5b6142488e838f01613e29565b995060408d013591508082111561425e57600080fd5b61426a8e838f01613d5e565b909950975060608d013591508082111561428357600080fd5b506142908d828e01613d5e565b90965094506142a490508c60808d01613e11565b92506101008b013591506101208b013590509295989b9194979a5092959850565b60008060008060008060008060a0898b0312156142e157600080fd5b88356001600160401b03808211156142f857600080fd5b6143048c838d01613d5e565b909a50985060208b0135975060408b013591508082111561432457600080fd5b6143308c838d01613e29565b965060608b013591508082111561434657600080fd5b6143528c838d01613d5e565b909650945060808b013591508082111561436b57600080fd5b506143788b828c01613d5e565b999c989b5096995094979396929594505050565b60006080828403121561439e57600080fd5b604051608081018181106001600160401b03821117156143c0576143c0614eb5565b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b6000610120828403121561440457600080fd5b61440c614cb3565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015261444460a08401613ccc565b60a082015261445560c08401613e4d565b60c082015261446660e08401613e5e565b60e0820152610100614479818501613e3b565b908201529392505050565b60008082840361010081121561449957600080fd5b60e08112156144a757600080fd5b506144b0614cdc565b835181526020840151602082015260408401516040820152606084015160608201526080840151608082015260a08401516144ea81614ecb565b60a082015260c08401516144fd81614ecb565b60c0820152915061419960e08401613d4e565b60006020828403121561452257600080fd5b5035919050565b60006020828403121561453b57600080fd5b5051919050565b6000806040838503121561455557600080fd5b8235915060208301356001600160401b0381111561457257600080fd5b83016101008186031215613eec57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526145c6816020860160208601614e2c565b601f01601f19169290920160200192915050565b600781106145f857634e487b7160e01b600052602160045260246000fd5b9052565b6000813561460981614ecb565b6001600160a01b03908116845260208301359061462582614ecb565b16602084015260408281013590840152606080830135908401526080808301359084015261465660a0830183614d51565b60e060a086015261466b60e086018284614585565b91505060c083013560c08501528091505092915050565b600061010082358452602083013560208501526040830135604085015260608301356146ad81614ecb565b6001600160a01b0390811660608601526080840135906146cc82614ecb565b16608085015260a08301356146e081614ecb565b6001600160a01b031660a08501526146fb60c0840184614d51565b8260c087015261470e8387018284614585565b9250505060e083013560e08501528091505092915050565b6000813582360360de198101821261473d57600080fd5b60408552614750604086018584016145fc565b9150602084013560fe198201811261476757600080fd5b858303602087015261477b83868301614682565b9695505050505050565b8183823760009101908152919050565b600082516147a7818460208701614e2c565b9190910192915050565b600084516147c3818460208901614e2c565b600560fb1b90830190815284516147e1816001840160208901614e2c565b600b60fa1b600192909101918201528351614803816002840160208801614e2c565b0160020195945050505050565b7352656c6179446174612072656c6179446174612960601b81526000825161483f816014850160208701614e2c565b9190910160140192915050565b6001600160a01b0387811682528681166020830152851660408201526001600160e01b03198416606082015260c0810161488960808301856145da565b8260a0830152979650505050505050565b6001600160a01b0387811682528681166020830152851660408201526001600160e01b0319841660608201526080810183905260c060a082018190526000906148e5908301846145ae565b98975050505050505050565b60018060a01b038516815283602082015260606040820152600061477b606083018486614585565b6040808252810183905260008460608301825b8681101561495c57823561493f81614ecb565b6001600160a01b031682526020928301929091019060010161492c565b5060209390930193909352509392505050565b841515815283602082015261498760408201846145da565b60806060820152600061477b60808301846145ae565b60208152600061369260208301846145ae565b6080815260006149c360808301876145ae565b85151560208401528460408401528281036060840152613a778185614682565b6149ed81846145da565b604060208201526000613e0960408301846145ae565b6000610140808352614a188184018d8f614585565b90508281036020840152614a2c818c614726565b90508281036040840152614a41818a8c614585565b90508281036060840152614a5681888a614585565b86516080850152602087015160a0850152604087015160c085015260609096015160e0840152505061010081019290925261012090910152979650505050505050565b604081526000614aac60408301856145ae565b905060018060a01b03831660208301529392505050565b604081526000614ad660408301856145ae565b90508260208301529392505050565b608081526000614af860808301876145ae565b6020830195909552506001600160a01b03929092166040830152606090910152919050565b60a081526000614b3060a08301896145fc565b8760208401528660408401528281036060840152614b4e81876145ae565b90508281036080840152614b63818587614585565b9998505050505050505050565b600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260018060a01b0360a08401511660a083015260ff60c08401511660c083015260e0830151614bde60e08401826001600160501b03169052565b506101009283015161ffff16919092015290565b608081526000614c056080830189614726565b8281036020840152614c1881888a614585565b90508281036040840152614c2d818688614585565b915050826060830152979650505050505050565b6000808335601e19843603018112614c5857600080fd5b8301803591506001600160401b03821115614c7257600080fd5b602001915036819003821315613d9f57600080fd5b6000823560de198336030181126147a757600080fd5b6000823560fe198336030181126147a757600080fd5b60405161012081016001600160401b0381118282101715614cd657614cd6614eb5565b60405290565b60405160e081016001600160401b0381118282101715614cd657614cd6614eb5565b604051601f8201601f191681016001600160401b0381118282101715614d2657614d26614eb5565b604052919050565b60006001600160401b03821115614d4757614d47614eb5565b5060051b60200190565b6000808335601e19843603018112614d6857600080fd5b83016020810192503590506001600160401b03811115614d8757600080fd5b803603831315613d9f57600080fd5b600061ffff808316818516808303821115614db357614db3614e73565b01949350505050565b60008219821115614dcf57614dcf614e73565b500190565b600082614df157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614e1057614e10614e73565b500290565b600082821015614e2757614e27614e73565b500390565b60005b83811015614e47578181015183820152602001614e2f565b83811115611cb65750506000910152565b6000600019821415614e6c57614e6c614e73565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612f5657600080fdfe72656c617943616c6c2072656c6179526571756573742e72656c6179446174612e72656c6179576f726b657272656c617943616c6c2072656c6179526571756573742e726571756573742e76616c6964556e74696c54696d65616464726573732066726f6d2c6164647265737320746f2c75696e743235362076616c75652c75696e74323536206761732c75696e74323536206e6f6e63652c627974657320646174612c75696e743235362076616c6964556e74696c54696d6572656c617943616c6c2072656c6179526571756573742e726571756573742e6e6f6e636572656c617943616c6c2072656c6179526571756573742e726571756573742e746f72656c617943616c6c2072656c6179526571756573742e726571756573742e67617372656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7472616e73616374696f6e43616c6c646174614761735573656472656c617943616c6c2072656c6179526571756573742e72656c6179446174612e6d617846656550657247617372656c617943616c6c2072656c6179526571756573742e72656c6179446174612e636c69656e74496472656c617943616c6c2072656c6179526571756573742e72656c6179446174612e6d61785072696f7269747946656550657247617372656c617943616c6c2072656c6179526571756573742e726571756573742e76616c7565332e302e302d626574612e332b6f70656e67736e2e6172626875622e6972656c617968756272656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7061796d61737465724461746152656c6179446174612875696e74323536206d61784665655065724761732c75696e74323536206d61785072696f726974794665655065724761732c75696e74323536207472616e73616374696f6e43616c6c64617461476173557365642c616464726573732072656c6179576f726b65722c61646472657373207061796d61737465722c6164647265737320666f727761726465722c6279746573207061796d6173746572446174612c75696e7432353620636c69656e7449642972656c617943616c6c2072656c6179526571756573742e726571756573742e6461746172656c617943616c6c2072656c6179526571756573742e72656c6179446174612e666f7277617264657272656c617943616c6c2072656c6179526571756573742e72656c6179446174612e7061796d617374657272656c617943616c6c2072656c6179526571756573742e726571756573742e66726f6da2646970667358221220475e5d1be8e24553d84c94cdd51a1e32ee42f2e6fb76d70a7bf3d9c9ba530fb264736f6c63430008070033",
    "immutableReferences": {
        "1227": [
            {
                "length": 32,
                "start": 1605
            },
            {
                "length": 32,
                "start": 2056
            },
            {
                "length": 32,
                "start": 2596
            },
            {
                "length": 32,
                "start": 10366
            },
            {
                "length": 32,
                "start": 10777
            },
            {
                "length": 32,
                "start": 11649
            },
            {
                "length": 32,
                "start": 11900
            }
        ],
        "1229": [
            {
                "length": 32,
                "start": 1083
            },
            {
                "length": 32,
                "start": 11427
            }
        ],
        "1231": [
            {
                "length": 32,
                "start": 1904
            },
            {
                "length": 32,
                "start": 4518
            }
        ],
        "1233": [
            {
                "length": 32,
                "start": 769
            },
            {
                "length": 32,
                "start": 2354
            }
        ],
        "1352": [
            {
                "length": 32,
                "start": 1530
            }
        ],
        "4376": [
            {
                "length": 32,
                "start": 1295
            },
            {
                "length": 32,
                "start": 2185
            }
        ],
        "4378": [
            {
                "length": 32,
                "start": 600
            }
        ]
    },
    "sourceMap": "401:1470:6:-:0;;;-1:-1:-1;;3123:52:4;;788:372:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1007:13;1022:10;1034:13;1049:15;1066:7;936:32:47;719:10:55;936:18:47;:32::i;:::-;3395:12:4;3379:28;;-1:-1:-1;;;;;;3417:28:4;;;;;;;;3455:22;;;;;;;3487:28;;;;;;;3525:32;;;;;;3567:25;3584:7;3567:16;:25::i;:::-;3182:417;;;;;1093:7:6::1;-1:-1:-1::0;;;;;1084:16:6::1;;;-1:-1:-1::0;;;;;1084:16:6::1;;;;;::::0;::::1;1129:7;-1:-1:-1::0;;;;;1129:22:6::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1110:43;::::0;-1:-1:-1;401:1470:6;;-1:-1:-1;;;;;401:1470:6;2433:187:47;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:47;;;-1:-1:-1;;;;;;2541:17:47;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;2009:216:4:-;1094:13:47;:11;:13::i;:::-;2127:3:4::1;2110:7;:14;;;:20;;;2102:49;;;::::0;-1:-1:-1;;;2102:49:4;;3517:2:63;2102:49:4::1;::::0;::::1;3499:21:63::0;3556:2;3536:18;;;3529:30;-1:-1:-1;;;3575:18:63;;;3568:46;3631:18;;2102:49:4::1;;;;;;;;;2161:16:::0;;:6:::1;:16:::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;2161:16:4::1;-1:-1:-1::0;;;2161:16:4::1;-1:-1:-1::0;;;;;;;;2161:16:4::1;::::0;;::::1;-1:-1:-1::0;;;2161:16:4::1;-1:-1:-1::0;;;;;;2161:16:4;;;-1:-1:-1;;;;;2161:16:4;;::::1;::::0;;;;;;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;2161:16:4;;::::1;::::0;;;::::1;::::0;;2192:26;::::1;::::0;::::1;::::0;3886:13:63;;3868:32;;3956:4;3944:17;;3938:24;3931:4;3916:20;;3909:54;4019:4;4007:17;;4001:24;3994:4;3979:20;;3972:54;4082:4;4070:17;;4064:24;4057:4;4042:20;;4035:54;4145:4;4133:17;;4127:24;4120:4;4105:20;;4098:54;4196:4;4184:17;;4178:24;-1:-1:-1;;;;;4230:35:63;;4282:4;4267:20;;;2617:44;;;;4340:4;4318:20;;;;4314:31;4362:4;4347:20;;2918:29;4403:3;4399:19;-1:-1:-1;;;;;4395:44:63;4456:4;4441:20;;2820:43;4551:4;4539:17;;;4533:24;5096:6;5080:23;4614:6;4599:22;;2725:31;3855:3;3840:19;;3660:968;2192:26:4::1;;;;;;;;2009:216:::0;:::o;1359:130:47:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:47;719:10:55;1422:23:47;1414:68;;;;-1:-1:-1;;;1414:68:47;;3156:2:63;1414:68:47;;;3138:21:63;;;3175:18;;;3168:30;3234:34;3214:18;;;3207:62;3286:18;;1414:68:47;2954:356:63;1414:68:47;1359:130::o;14:138:63:-;93:13;;115:31;93:13;115:31;:::i;:::-;14:138;;;:::o;157:163::-;235:13;;288:6;277:18;;267:29;;257:57;;310:1;307;300:12;325:175;403:13;;-1:-1:-1;;;;;445:30:63;;435:41;;425:69;;490:1;487;480:12;505:160;582:13;;635:4;624:16;;614:27;;604:55;;655:1;652;645:12;670:1699;854:6;862;870;878;886;894;938:9;929:7;925:23;968:3;964:2;960:12;957:32;;;985:1;982;975:12;957:32;1017:9;1011:16;1036:31;1061:5;1036:31;:::i;:::-;1136:2;1121:18;;1115:25;1086:5;;-1:-1:-1;1149:33:63;1115:25;1149:33;:::i;:::-;1253:2;1238:18;;1232:25;1201:7;;-1:-1:-1;1266:33:63;1232:25;1266:33;:::i;:::-;1370:2;1355:18;;1349:25;1318:7;;-1:-1:-1;1383:33:63;1349:25;1383:33;:::i;:::-;1487:3;1472:19;;1466:26;1435:7;;-1:-1:-1;1501:33:63;1466:26;1501:33;:::i;:::-;1553:7;-1:-1:-1;1579:6:63;-1:-1:-1;;1601:17:63;;1597:26;-1:-1:-1;1594:46:63;;;1636:1;1633;1626:12;1594:46;1664:17;;:::i;:::-;1649:32;;1727:3;1716:9;1712:19;1706:26;1697:7;1690:43;1788:3;1777:9;1773:19;1767:26;1762:2;1753:7;1749:16;1742:52;1849:3;1838:9;1834:19;1828:26;1823:2;1814:7;1810:16;1803:52;1874:3;1932:2;1921:9;1917:18;1911:25;1906:2;1897:7;1893:16;1886:51;1993:2;1982:9;1978:18;1972:25;1966:3;1957:7;1953:17;1946:52;2033:50;2078:3;2067:9;2063:19;2033:50;:::i;:::-;2027:3;2018:7;2014:17;2007:77;2119:48;2162:3;2151:9;2147:19;2119:48;:::i;:::-;2113:3;2104:7;2100:17;2093:75;2203:49;2247:3;2236:9;2232:19;2203:49;:::i;:::-;2197:3;2188:7;2184:17;2177:76;2287:49;2331:3;2320:9;2316:19;2287:49;:::i;:::-;2282:2;2273:7;2269:16;2262:75;;;2356:7;2346:17;;;670:1699;;;;;;;;:::o;2374:184::-;2444:6;2497:2;2485:9;2476:7;2472:23;2468:32;2465:52;;;2513:1;2510;2503:12;2465:52;-1:-1:-1;2536:16:63;;2374:184;-1:-1:-1;2374:184:63:o;4633:347::-;4700:2;4694:9;4742:6;4730:19;;-1:-1:-1;;;;;4764:34:63;;4800:22;;;4761:62;4758:185;;;4865:10;4860:3;4856:20;4853:1;4846:31;4900:4;4897:1;4890:15;4928:4;4925:1;4918:15;4758:185;4959:2;4952:22;4633:347;:::o;5114:131::-;-1:-1:-1;;;;;5189:31:63;;5179:42;;5169:70;;5235:1;5232;5225:12;5169:70;5114:131;:::o;:::-;401:1470:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
    "deployedSourceMap": "401:1470:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4995:282:4;;;;;;;;;;-1:-1:-1;4995:282:4;;;;;:::i;:::-;;:::i;:::-;;;24578:14:63;;24571:22;24553:41;;24541:2;24526:18;4995:282:4;;;;;;;;1275:116:6;;;;;;;;;;-1:-1:-1;1368:16:6;1275:116;;;25241:25:63;;;25229:2;25214:18;1275:116:6;25095:177:63;26328:154:4;;;;;;;;;;-1:-1:-1;26328:154:4;;;;;:::i;:::-;;:::i;3784:110::-;;;;;;;;;;-1:-1:-1;3872:15:4;;3784:110;;1728:141:6;;;;;;;;;;;;;:::i;5313:337:4:-;;;;;;;;;;-1:-1:-1;5313:337:4;;;;;:::i;:::-;;:::i;:::-;;4350:108;;;;;;;;;;-1:-1:-1;4437:14:4;4350:108;;;-1:-1:-1;;;;;21152:32:63;;;21134:51;;21122:2;21107:18;4350:108:4;20988:203:63;4835:126:4;;;;;;;;;;-1:-1:-1;4835:126:4;;;;;:::i;:::-;-1:-1:-1;;;;;4934:20:4;4908:7;4934:20;;;:11;:20;;;;;;;4835:126;1862:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9838:8413::-;;;;;;;;;;-1:-1:-1;9838:8413:4;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;6798:116::-;;;;;;;;;;-1:-1:-1;6798:116:4;;;;;:::i;:::-;-1:-1:-1;;;;;6891:16:4;6865:7;6891:16;;;:8;:16;;;;;;;6798:116;1831:101:47;;;;;;;;;;;;;:::i;7302:658:4:-;;;;;;;;;;-1:-1:-1;7302:658:4;;;;;:::i;:::-;;:::i;4076:98::-;;;;;;;;;;-1:-1:-1;4158:9:4;4076:98;;2383:404;;;;;;;;;;-1:-1:-1;2383:404:4;;;;;:::i;:::-;;:::i;23449:281::-;;;;;;;;;;-1:-1:-1;23449:281:4;;;;;:::i;:::-;;:::i;1201:85:47:-;;;;;;;;;;-1:-1:-1;1247:7:47;1273:6;-1:-1:-1;;;;;1273:6:47;1201:85;;23766:561:4;;;;;;;;;;-1:-1:-1;23766:561:4;;;;;:::i;:::-;;:::i;2009:216::-;;;;;;;;;;-1:-1:-1;2009:216:4;;;;;:::i;:::-;;:::i;606:30:6:-;;;;;;;;;;;;;;;18753:4174:4;;;;;;;;;;-1:-1:-1;18753:4174:4;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;6434:328::-;;;;;;:::i;:::-;;:::i;25118:226::-;;;;;;;;;;-1:-1:-1;25118:226:4;;;;;:::i;:::-;;:::i;4669:130::-;;;;;;;;;;-1:-1:-1;4669:130:4;;;;;:::i;:::-;-1:-1:-1;;;;;4769:23:4;;;4743:7;4769:23;;;:15;:23;;;;;;;;4669:130;5686:712;;;;;;;;;;-1:-1:-1;5686:712:4;;;;;:::i;:::-;;:::i;1518:98:6:-;;;;;;;;;;-1:-1:-1;1596:13:6;1518:98;;25380:118:4;;;;;;;;;;-1:-1:-1;25476:15:4;;25457;:34;;25380:118;;3930:110;;;;;;;;;;-1:-1:-1;4021:12:4;3930:110;;26518:433;;;;;;;;;;-1:-1:-1;26518:433:4;;;;;:::i;:::-;;:::i;471:129:6:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4494:139:4:-;;;;;;;;;;-1:-1:-1;4494:139:4;;;;;:::i;:::-;-1:-1:-1;;;;;4599:27:4;4573:7;4599:27;;;:20;:27;;;;;;;4494:139;24363:719;;;;;;;;;;-1:-1:-1;24363:719:4;;;;;:::i;:::-;;:::i;25733:559::-;;;;;;;;;;-1:-1:-1;25733:559:4;;;;;:::i;:::-;;:::i;2081:198:47:-;;;;;;;;;;-1:-1:-1;2081:198:47;;;;;:::i;:::-;;:::i;6950:316:4:-;;;;;;;;;;-1:-1:-1;6950:316:4;;;;;:::i;:::-;;:::i;4210:104::-;;;;;;;;;;-1:-1:-1;4295:12:4;4210:104;;4995:282;5097:4;-1:-1:-1;;;;;;5120:42:4;;-1:-1:-1;;;5120:42:4;;:98;;-1:-1:-1;;;;;;;5178:40:4;;-1:-1:-1;;;5178:40:4;5120:98;:150;;;-1:-1:-1;;;;;;;;;;937:40:58;;;5234:36:4;5113:157;4995:282;-1:-1:-1;;4995:282:4:o;26328:154::-;26430:45;;-1:-1:-1;;;26430:45:4;;-1:-1:-1;;;;;21152:32:63;;;26430:45:4;;;21134:51:63;26408:4:4;;26430:12;:31;;;;;;21107:18:63;;26430:45:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1728:141:6:-;1794:7;1853:9;1819:6;-1:-1:-1;;;;;1819:29:6;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;;;:::i;:::-;1812:50;;1728:141;:::o;5313:337:4:-;5404:10;-1:-1:-1;;;;;5418:14:4;5404:28;;5396:70;;;;-1:-1:-1;;;5396:70:4;;32321:2:63;5396:70:4;;;32303:21:63;32360:2;32340:18;;;32333:30;32399:31;32379:18;;;32372:59;32448:18;;5396:70:4;;;;;;;;;5476:38;5501:12;5476:24;:38::i;:::-;-1:-1:-1;;;;;5532:25:4;;5560:1;5532:25;;;:11;:25;;;;;;5524:58;;;;-1:-1:-1;;;5524:58:4;;36990:2:63;5524:58:4;;;36972:21:63;37029:2;37009:18;;;37002:30;-1:-1:-1;;;37048:18:63;;;37041:46;37104:18;;5524:58:4;36788:340:63;5524:58:4;5592:51;;-1:-1:-1;;;5592:51:4;;-1:-1:-1;;;;;21152:32:63;;;5592:51:4;;;21134::63;5592:12:4;:37;;;;21107:18:63;;5592:51:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5313:337;:::o;1862:111::-;1920:21;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1920:21:4;-1:-1:-1;1953:13:4;;;;;;;;1960:6;1953:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1953:13:4;;;;;;-1:-1:-1;;;1953:13:4;;;;;;;;-1:-1:-1;;;1953:13:4;;-1:-1:-1;;;;;1953:13:4;;;;;;;;;;;;;;1862:111::o;9838:8413::-;10117:22;10149:14;10173:32;10215:24;10255:25;;:::i;:::-;10312:18;:16;:18::i;:::-;10290:19;;;:40;10362:51;10389:12;10403:9;;10362:26;:51::i;:::-;10340:19;;;:73;10424:39;;;;;;;;;;;;;;;;;;;:11;:39::i;:::-;10473;10492:4;:19;;;10473:18;:39::i;:::-;10522:77;;;;;;;;;;;;;;;;;;10573:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;10522:11;:77::i;:::-;10609:73;;;;;;;;;;;;;;;;;;10658:20;:12;;:20;:::i;:::-;:23;;;;;;;;;:::i;10609:73::-;10692:79;;;;;;;;;;;;;;;;;;10744:20;:12;;:20;:::i;:::-;:26;;;10692:11;:79::i;:::-;10781:75;;;;;;;;;;;;;;;;;;10831:20;:12;;:20;:::i;:::-;:24;;;10781:11;:75::i;:::-;10866:79;;;;;;;;;;;;;;;;;;10918:20;:12;;:20;:::i;:::-;:26;;;10866:11;:79::i;:::-;10955:97;;;;;;;;;;;;;;;;;;11016:20;:12;;:20;:::i;:::-;:35;;;10955:11;:97::i;:::-;11063;;;;;;;;;;;;;;;;;;11124:22;;;;:12;:22;:::i;:::-;:35;11063:11;:97::i;:::-;11170:113;;;;;;;;;;;;;;;;;;11239:22;;;;:12;:22;:::i;:::-;:43;;;11170:11;:113::i;:::-;11293:125;;;;;;;;;;;;;;;;;;11368:22;;;;:12;:22;:::i;11293:125::-;11428:95;;;;;;;;;;;;;;;;;;11488:22;;;;:12;:22;:::i;:::-;:34;;;;;;;;;:::i;11428:95::-;11533:91;;;;;;;;;;;;;;;;;;11591:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;11533:91::-;11634;;;;;;;;;;;;;;;;;;11692:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;11634:91::-;11735:89;;;;;;;;;;;;;;;;;;11792:22;;;;:12;:22;:::i;:::-;:31;;;11735:11;:89::i;:::-;11835:44;;;;;;;;;;;;;;;;;;:11;:44::i;:::-;11889:38;11907:19;;11889:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11889:17:4;;-1:-1:-1;;;11889:38:4:i;:::-;11937:34;;;;;;;;;;;;;;-1:-1:-1;;;11937:34:4;;;:11;:34::i;:::-;11981:27;11998:9;;11981:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11981:16:4;;-1:-1:-1;;;11981:27:4:i;:::-;12018:37;;;;;;;;;;;;;;-1:-1:-1;;;12018:37:4;;;:11;:37::i;:::-;12065:30;12082:12;;12065:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12065:16:4;;-1:-1:-1;;;12065:30:4:i;:::-;12105:50;;;;;;;;;;;;;;;;;;:11;:50::i;:::-;12165:43;12182:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;12165:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12165:16:4;;-1:-1:-1;;;12165:43:4:i;:::-;12218:61;;;;;;;;;;;;;;;;;;:11;:61::i;:::-;12289:54;12306:22;;;;:12;:22;:::i;:::-;:36;;;;;;;:::i;12289:54::-;12353:65;;;;;;;;;;;;;;;;;;12398:19;12353:11;:65::i;:::-;25476:15;;25457;:34;12429:42;;;;-1:-1:-1;;;12429:42:4;;31978:2:63;12429:42:4;;;31960:21:63;32017:2;31997:18;;;31990:30;-1:-1:-1;;;32036:18:63;;;32029:44;32090:18;;12429:42:4;31776:338:63;12429:42:4;12539:1;12505:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;:32;;:35;;:102;;12605:1;12505:102;;;12543:52;12566:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;12543:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12543:52:4;-1:-1:-1;12543:22:4;;-1:-1:-1;;12543:52:4:i;:::-;-1:-1:-1;;;;;;12481:126:4;:21;;;:126;12622:10;-1:-1:-1;;;;;12636:12:4;12622:26;;;;;:58;;-1:-1:-1;12652:9:4;:28;;12622:58;12618:322;;;12704:21;12696:66;;;;-1:-1:-1;;;12696:66:4;;35916:2:63;12696:66:4;;;35898:21:63;;;35935:18;;;35928:30;35994:34;35974:18;;;35967:62;36046:18;;12696:66:4;35714:356:63;12696:66:4;12784:10;12798:9;12784:23;12776:60;;;;-1:-1:-1;;;12776:60:4;;35563:2:63;12776:60:4;;;35545:21:63;35602:2;35582:18;;;35575:30;35641:26;35621:18;;;35614:54;35685:18;;12776:60:4;35361:348:63;12776:60:4;12872:22;;;;:12;:22;:::i;:::-;:34;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12858:48:4;:10;-1:-1:-1;;;;;12858:48:4;;12850:79;;;;-1:-1:-1;;;12850:79:4;;40846:2:63;12850:79:4;;;40828:21:63;40885:2;40865:18;;;40858:30;-1:-1:-1;;;40904:18:63;;;40897:48;40962:18;;12850:79:4;40644:342:63;12850:79:4;12954:9;:28;12950:265;;13018:15;:51;13034:22;;;;:12;:22;:::i;:::-;:34;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13018:51:4;;;;;;;;;;;;;;-1:-1:-1;13018:51:4;;;12998:17;;;:71;;;13083:64;;;;-1:-1:-1;;;13083:64:4;;42247:2:63;13083:64:4;;;42229:21:63;42286:2;42266:18;;;42259:30;-1:-1:-1;;;42305:18:63;;;42298:50;42365:18;;13083:64:4;42045:344:63;13083:64:4;13161:43;13186:4;:17;;;13161:24;:43::i;:::-;13284:78;13307:19;13328:12;13342:4;:19;;;13284:22;:78::i;:::-;13249:19;;;13225:137;13226:21;;;13225:137;13373:99;13416:19;;13436:12;13449:9;;13459:12;;13373:42;:99::i;:::-;13698:17;;13694:2;13681:9;:12;;13691:2;13681:12;:::i;:::-;:15;;;;:::i;:::-;:34;;;;:::i;:::-;13660:18;;;:55;13747:18;:16;:18::i;:::-;13725:19;;;:40;14699:19;;14678:18;;14657;;;;14635:19;;;;14583:22;;;;:12;:22;:::i;:::-;:49;;;:71;;;;:::i;:::-;:92;;;;:::i;:::-;:113;;;;:::i;:::-;:135;;;;:::i;:::-;14562:4;:18;;:156;;;;;15033:4;-1:-1:-1;;;;;15025:18:4;15048:4;:18;;;15104:32;;;15138:19;;15159:12;15173:9;;15184:12;;15198:4;:21;;;15254:18;:16;:18::i;:::-;15233:4;:18;;;:39;;;;:::i;:::-;15308:4;:19;;;15081:260;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;15081:260:4;;;;;;;;;;;;;;-1:-1:-1;;;;;15081:260:4;-1:-1:-1;;;;;;15081:260:4;;;;;;;;;;15025:326;;;;15081:260;15025:326;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15001:20:4;;;14986:365;;;;;15401:18;:16;:18::i;:::-;15381:4;:19;;;:38;;;;:::i;:::-;15361:17;;;:58;15485:20;;;;15474:58;;;;;;;;;;;;;:::i;:::-;15430:4;:11;;15443:4;:27;;15429:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;;15547:27:4;;;;:34;:36;15542:133;;15605:59;15623:4;:11;;;15636:4;:27;;;15605:59;;;;;;;:::i;:::-;;;;;;;;15542:133;15701:12;;15696:1054;;15801:36;15786:4;:11;;;:51;;;;;;;;:::i;:::-;;:417;;;-1:-1:-1;15924:22:4;;;;:12;:22;:::i;:::-;15883:21;;;;:38;:90;;15924:49;;;;15883:90;:::i;:::-;15862:4;:17;;;:111;;15861:342;;;;-1:-1:-1;16015:35:4;16000:4;:11;;;:50;;;;;;;;:::i;:::-;;:130;;;-1:-1:-1;16089:41:4;16074:4;:11;;;:56;;;;;;;;:::i;:::-;;16000:130;15782:958;;;16373:19;;;;16319:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;16280:17;;;;-1:-1:-1;;;;;16228:420:4;;;;;;16414:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;16461:20;:12;;:20;:::i;:::-;:23;;;;;;;;;:::i;:::-;16506:10;16538:4;:21;;;16581:4;:17;;;16620:4;:27;;;16228:420;;;;;;;;;;;:::i;:::-;;;;;;;;16674:5;16681:1;16684:4;:11;;;16697:4;:27;;;16666:59;;;;;;;;;;;15782:958;16960:18;;16938;:16;:18::i;:::-;16916:4;:19;;;:40;;;;:::i;:::-;16863:22;;;;:12;:22;:::i;:::-;:49;;;:94;;;;:::i;:::-;:115;;;;:::i;:::-;16848:12;;;:130;;;16997:53;;17027:22;;;;:12;:22;:::i;16997:53::-;16988:62;;17077:26;17096:6;17077:18;:26::i;:::-;17060:14;;;:43;17204:6;17159:8;:42;17168:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17159:42:4;-1:-1:-1;;;;;17159:42:4;;;;;;;;;;;;;:51;;;;:::i;:::-;17114:8;:42;17123:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17114:42:4;;;;;;;;;;;;-1:-1:-1;17114:42:4;:96;17290:14;;;;17281:23;;:6;:23;:::i;:::-;17259:17;;;;-1:-1:-1;;;;;17250:27:4;;;;;:8;:27;;;;;;:55;;;;:::i;:::-;17229:17;;;;-1:-1:-1;;;;;17220:27:4;;;;;:8;:27;;;;;:85;17319:14;;;;:18;17315:167;;17457:14;;;;17436:17;;-1:-1:-1;;;;;17436:17:4;17427:27;;;;:8;:27;;;;;;:44;;17457:14;17427:44;:::i;:::-;17406:17;;-1:-1:-1;;;;;17406:17:4;17397:27;;;;:8;:27;;;;;:74;17315:167;17506:12;17521:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;17506:40;-1:-1:-1;17560:10:4;17573:20;:12;;:20;:::i;:::-;:23;;;;;;;;;:::i;:::-;17560:36;-1:-1:-1;17610:17:4;17630:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;17610:52;;17780:4;:19;;;17752:10;-1:-1:-1;;;;;17681:280:4;17717:4;:17;;;-1:-1:-1;;;;;17681:280:4;;17817:4;17839:2;17859:9;17886:4;:21;;;17925:4;:11;;;17954:6;17681:280;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;18073:9:4;18069:122;;18139:11;;;;18152:27;;;;;18125:4;;-1:-1:-1;18139:11:4;;-1:-1:-1;18152:27:4;-1:-1:-1;18117:63:4;;18069:122;18222:11;;;18200:38;;;;;;;;;-1:-1:-1;18200:38:4;;18208:4;;-1:-1:-1;18222:11:4;;-1:-1:-1;18200:38:4;-1:-1:-1;9838:8413:4;;;;;;;;;;;;;;:::o;1831:101:47:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;7302:658:4:-;7444:10;7410:23;7465:489;7489:6;:13;7485:1;:17;7465:489;;;7523:79;;;;;;;;;;;;;;;;;;7564:8;:17;7573:7;-1:-1:-1;;;;;7564:17:4;-1:-1:-1;;;;;7564:17:4;;;;;;;;;;;;;7583:4;7588:1;7583:7;;;;;;;;:::i;:::-;;;;;;;7592:6;7599:1;7592:9;;;;;;;;:::i;:::-;;;;;;;7523:11;:79::i;:::-;-1:-1:-1;;;;;7634:17:4;;7616:15;7634:17;;;:8;:17;;;;;;7684:9;;:6;;7691:1;;7684:9;;;;;;:::i;:::-;;;;;;;7673:7;:20;;7665:51;;;;-1:-1:-1;;;7665:51:4;;39450:2:63;7665:51:4;;;39432:21:63;39489:2;39469:18;;;39462:30;-1:-1:-1;;;39508:18:63;;;39501:48;39566:18;;7665:51:4;39248:342:63;7665:51:4;7760:6;7767:1;7760:9;;;;;;;;:::i;:::-;;;;;;;7750:7;:19;;;;:::i;:::-;-1:-1:-1;;;;;7730:17:4;;;;;;:8;:17;;;;;:39;;;;7802:7;;:4;;7807:1;;7802:7;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;7802:12:4;7822:6;7829:1;7822:9;;;;;;;;:::i;:::-;;;;;;;7802:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7783:53;;;7858:7;7850:36;;;;-1:-1:-1;;;7850:36:4;;39797:2:63;7850:36:4;;;39779:21:63;39836:2;39816:18;;;39809:30;-1:-1:-1;;;39855:18:63;;;39848:46;39911:18;;7850:36:4;39595:340:63;7850:36:4;7924:4;7929:1;7924:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;7905:38:4;7915:7;-1:-1:-1;;;;;7905:38:4;;7933:6;7940:1;7933:9;;;;;;;;:::i;:::-;;;;;;;7905:38;;;;25241:25:63;;25229:2;25214:18;;25095:177;7905:38:4;;;;;;;;7509:445;;7504:3;;;;;:::i;:::-;;;;7465:489;;;;7400:560;7302:658;;:::o;2383:404::-;1094:13:47;:11;:13::i;:::-;2523:12:4::1;:19;2507:5;:12;:35;2499:78;;;::::0;-1:-1:-1;;;2499:78:4;;36277:2:63;2499:78:4::1;::::0;::::1;36259:21:63::0;36316:2;36296:18;;;36289:30;36355:32;36335:18;;;36328:60;36405:18;;2499:78:4::1;36075:354:63::0;2499:78:4::1;2592:9;2587:194;2611:5;:12;2607:1;:16;2587:194;;;2677:12;2690:1;2677:15;;;;;;;;:::i;:::-;;;;;;;2644:20;:30;2665:5;2671:1;2665:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;2644:30:4::1;-1:-1:-1::0;;;;;2644:30:4::1;;;;;;;;;;;;:48;;;;2711:59;2743:5;2749:1;2743:8;;;;;;;;:::i;:::-;;;;;;;2754:12;2767:1;2754:15;;;;;;;;:::i;:::-;;;;;;;2711:59;;;;;;-1:-1:-1::0;;;;;23120:32:63;;;;23102:51;;23184:2;23169:18;;23162:34;23090:2;23075:18;;22928:274;2711:59:4::1;;;;;;;;2625:3:::0;::::1;::::0;::::1;:::i;:::-;;;;2587:194;;;;2383:404:::0;;:::o;23449:281::-;23553:13;;23531:7;;-1:-1:-1;;;23553:13:4;;;;23549:100;;-1:-1:-1;23637:1:4;;23449:281;-1:-1:-1;23449:281:4:o;23549:100::-;23694:13;;23710:3;;-1:-1:-1;;;23694:13:4;;;;23685:22;;:28;;23449:281;-1:-1:-1;;23449:281:4:o;23766:561::-;23885:7;;23933:22;;23959:30;;;;23933:56;23929:152;;;-1:-1:-1;24015:1:4;23929:152;;;-1:-1:-1;24057:13:4;23929:152;24090:26;24119:97;24128:22;;24152:63;24161:11;24152:63;24184:30;;;;24174:7;:40;:::i;:::-;24152:8;:63::i;24119:97::-;24288:18;;24090:126;;-1:-1:-1;24317:3:4;;24288:24;;:18;;24317:3;24288:24;:::i;:::-;24256:57;;:28;24266:18;24256:7;:28;:::i;:::-;:57;;;;:::i;:::-;24255:65;;;;:::i;:::-;24233:19;;:87;;;-1:-1:-1;;;24233:19:4;;-1:-1:-1;;;;;24233:19:4;:87;:::i;:::-;24226:94;23766:561;-1:-1:-1;;;;;23766:561:4:o;2009:216::-;1094:13:47;:11;:13::i;:::-;2127:3:4::1;2110:7;:14;;;:20;;;2102:49;;;::::0;-1:-1:-1;;;2102:49:4;;41547:2:63;2102:49:4::1;::::0;::::1;41529:21:63::0;41586:2;41566:18;;;41559:30;-1:-1:-1;;;41605:18:63;;;41598:46;41661:18;;2102:49:4::1;41345:340:63::0;2102:49:4::1;2161:16:::0;;:6:::1;:16:::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;2161:16:4::1;-1:-1:-1::0;;;2161:16:4::1;-1:-1:-1::0;;;;2161:16:4::1;::::0;;::::1;-1:-1:-1::0;;;2161:16:4::1;-1:-1:-1::0;;;;;;2161:16:4;;;-1:-1:-1;;;;;2161:16:4;;::::1;::::0;;;;;;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;2161:16:4;;::::1;::::0;;;::::1;::::0;;2192:26;::::1;::::0;::::1;::::0;44331:13:63;;44313:32;;44401:4;44389:17;;44383:24;44376:4;44361:20;;44354:54;44464:4;44452:17;;44446:24;44439:4;44424:20;;44417:54;44527:4;44515:17;;44509:24;44502:4;44487:20;;44480:54;44590:4;44578:17;;44572:24;44565:4;44550:20;;44543:54;44641:4;44629:17;;44623:24;-1:-1:-1;;;;;44675:35:63;;44727:4;44712:20;;;15087:44;;;;44785:4;44763:20;;;;44759:31;44807:4;44792:20;;18800:29;-1:-1:-1;;;;;44848:3:63;44844:19;;;;44840:48;44905:4;44890:20;;18698:47;45000:4;44988:17;;;44982:24;49955:6;49939:23;45063:6;45048:22;;18603:31;44300:3;44285:19;;44105:972;2192:26:4::1;;;;;;;;2009:216:::0;:::o;18753:4174::-;19106:15;19123:12;19151:30;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19151:30:4;19213:18;:16;:18::i;:::-;19191:40;;19285:9;19267:27;;:15;:27;:::i;:::-;19241:23;;;:53;19722:10;19744:4;19722:27;19714:66;;;;-1:-1:-1;;;19714:66:4;;34855:2:63;19714:66:4;;;34837:21:63;34894:2;34874:18;;;34867:30;34933:28;34913:18;;;34906:56;34979:18;;19714:66:4;34653:350:63;19714:66:4;20200:8;:42;20209:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20200:42:4;;;;;;;;;;;;;;-1:-1:-1;20200:42:4;;20179:18;;;:63;20384:147;-1:-1:-1;;;20420:34:4;20384:147;;20468:12;;20482:9;;;;20493:12;;;;20507:14;;20384:147;;;:::i;:::-;;;;-1:-1:-1;;20384:147:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;20384:147:4;-1:-1:-1;;;;;;20384:147:4;;;;;;;;;;20372:9;;;:159;-1:-1:-1;;20581:20:4;;20636:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20636:37:4;20678:16;:39;;;20719:4;:9;;;20636:93;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20615:114:4;;-1:-1:-1;20615:114:4;-1:-1:-1;20615:114:4;20743:169;;20775:41;20808:7;20775:32;:41::i;:::-;20834:63;20851:36;20889:7;20834:16;:63::i;:::-;20992:7;20981:33;;;;;;;;;;;;:::i;:::-;20926:4;:21;;20949:4;:28;;20925:89;;;;;;;;;;;;;20541:484;;21170:21;21280:70;21305:19;;21280:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21326:12;21340:9;;21280:24;:70::i;:::-;21249:27;;;21205:145;;;21224:23;;;21205:145;;-1:-1:-1;21205:145:4;21364:140;;21407:82;21424:35;21461:4;:27;;;21407:16;:82::i;:::-;21522:4;:28;;;:56;;;;;21555:4;:23;;;21554:24;21522:56;21518:247;;;21662:88;21679:41;21722:4;:27;;;21662:16;:88::i;:::-;21156:619;22085:35;;;22134:4;:21;;;22169:4;:23;;;22255:18;:16;:18::i;:::-;22233:19;;:40;;;;:::i;:::-;22206:4;:23;;;:68;;;;:::i;:::-;22310:12;:22;;;;;;;;:::i;:::-;22049:293;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;22049:293:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;22049:293:4;-1:-1:-1;;;;;;22049:293:4;;;;;;;;;;22037:9;;;:305;-1:-1:-1;;;;22401:22:4;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22401:37:4;22443:16;:40;;;22485:4;:9;;;22401:94;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22363:132;;;;22515:11;22510:107;;22546:56;22563:33;22598:3;22546:16;:56::i;:::-;-1:-1:-1;;22686:18:4;;;;22641:8;:42;22650:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22641:42:4;-1:-1:-1;;;;;22641:42:4;;;;;;;;;;;;;:63;22637:155;;;22720:61;22737:39;22720:61;;;;;;;;;;;;:16;:61::i;:::-;22810:4;:23;;;:80;;22857:33;22810:80;;;22836:18;22810:80;22892:4;:27;;;22802:118;;;;;18753:4174;;;;;;;;;;;;;:::o;6434:328::-;6520:54;-1:-1:-1;;;;;6520:24:4;;-1:-1:-1;;;6520:24:4;:54::i;:::-;6512:99;;;;-1:-1:-1;;;6512:99:4;;31256:2:63;6512:99:4;;;31238:21:63;;;31275:18;;;31268:30;31334:34;31314:18;;;31307:62;31386:18;;6512:99:4;31054:356:63;6512:99:4;-1:-1:-1;;;;;6677:16:4;;6621:14;6677:16;;;:8;:16;;;;;;6638:9;;6677:25;;6638:9;;6677:25;:::i;:::-;-1:-1:-1;;;;;6658:16:4;;;;;;:8;:16;;;;;;;;;:44;;;;6718:37;25241:25:63;;;6736:10:4;;6718:37;;25214:18:63;6718:37:4;;;;;;;6502:260;6434:328;:::o;25118:226::-;1094:13:47;:11;:13::i;:::-;25476:15:4;;25457;:34;25202:46:::1;;;::::0;-1:-1:-1;;;25202:46:4;;32679:2:63;25202:46:4::1;::::0;::::1;32661:21:63::0;32718:2;32698:18;;;32691:30;-1:-1:-1;;;32737:18:63;;;32730:48;32795:18;;25202:46:4::1;32477:342:63::0;25202:46:4::1;25258:15;:34:::0;;;25307:30:::1;::::0;25241:25:63;;;25307:30:4::1;::::0;25229:2:63;25214:18;25307:30:4::1;25095:177:63::0;5686:712:4;5798:10;5775:20;5843:25;;;:11;:25;;;;;;:50;;5871:15;;5843:50;:::i;:::-;-1:-1:-1;;;;;5903:25:4;;;;;;:11;:25;;;;;:42;;;5981:6;:21;5818:75;;-1:-1:-1;5963:39:4;;;5955:68;;;;-1:-1:-1;;;5955:68:4;;38750:2:63;5955:68:4;;;38732:21:63;38789:2;38769:18;;;38762:30;-1:-1:-1;;;38808:18:63;;;38801:46;38864:18;;5955:68:4;38548:340:63;5955:68:4;6034:38;6059:12;6034:24;:38::i;:::-;6088:9;6083:229;6103:26;;;6083:229;;;6205:1;6158:15;6205:1;6174:15;;6190:1;6174:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6158:35:4;;;;;;;;;;;;;;-1:-1:-1;6158:35:4;;;:49;6150:87;;;;-1:-1:-1;;;6150:87:4;;33026:2:63;6150:87:4;;;33008:21:63;33065:2;33045:18;;;33038:30;33104:27;33084:18;;;33077:55;33149:18;;6150:87:4;32824:349:63;6150:87:4;6289:12;6251:15;:35;6267:15;;6283:1;6267:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6251:35:4;;;;;;;;;;;;;;-1:-1:-1;6251:35:4;:50;;-1:-1:-1;;;;;;6251:50:4;;;;;;;;;;;6131:3;;;;:::i;:::-;;;;6083:229;;;;6345:12;-1:-1:-1;;;;;6327:64:4;;6359:15;;6376:14;6327:64;;;;;;;;:::i;:::-;;;;;;;;5765:633;;5686:712;;:::o;26518:433::-;1094:13:47;:11;:13::i;:::-;26624:45:4::1;::::0;-1:-1:-1;;;26624:45:4;;-1:-1:-1;;;;;21152:32:63;;;26624:45:4::1;::::0;::::1;21134:51:63::0;26624:12:4::1;:31;::::0;::::1;::::0;21107:18:63;;26624:45:4::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26616:90;;;::::0;-1:-1:-1;;;26616:90:4;;34140:2:63;26616:90:4::1;::::0;::::1;34122:21:63::0;;;34159:18;;;34152:30;34218:34;34198:18;;;34191:62;34270:18;;26616:90:4::1;33938:356:63::0;26616:90:4::1;-1:-1:-1::0;;;;;26734:22:4;;::::1;26716:15;26734:22:::0;;;:8:::1;:22;::::0;;;;;;;26766:26;;;;26841:17;;;;::::1;26832:27:::0;;;;;:37:::1;::::0;26734:22;;26832:37:::1;:::i;:::-;26811:17:::0;;-1:-1:-1;;;;;26811:17:4;;::::1;26802:27;::::0;;;:8:::1;:27;::::0;;;;;;;;:67;;;;26884:60;25241:25:63;;;26884:60:4;;::::1;::::0;::::1;::::0;25214:18:63;26884:60:4::1;;;;;;;26606:345;26518:433:::0;:::o;471:129:6:-;523:13;547:46;;;;;;;;;;;;;;;;;;;471:129;:::o;24363:719:4:-;24512:39;;-1:-1:-1;;;24512:39:4;;-1:-1:-1;;;;;21152:32:63;;;24512:39:4;;;21134:51:63;24451:35:4;;;;24512:12;:25;;;;21107:18:63;;24512:39:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24605:10;;;;;-1:-1:-1;;;;;24584:32:4;;;24561:20;24584:32;;;:20;:32;;;;;;24634:10;;24450:101;;-1:-1:-1;24450:101:4;;-1:-1:-1;24584:32:4;24634;24626:69;;;;-1:-1:-1;;;24626:69:4;;35210:2:63;24626:69:4;;;35192:21:63;35249:2;35229:18;;;35222:30;-1:-1:-1;;;35268:18:63;;;35261:54;35332:18;;24626:69:4;35008:348:63;24626:69:4;24713:10;;:26;-1:-1:-1;24713:26:4;24705:64;;;;-1:-1:-1;;;24705:64:4;;36636:2:63;24705:64:4;;;36618:21:63;36675:2;36655:18;;;36648:30;36714:27;36694:18;;;36687:55;36759:18;;24705:64:4;36434:349:63;24705:64:4;24787:17;24779:61;;;;-1:-1:-1;;;24779:61:4;;38390:2:63;24779:61:4;;;38372:21:63;38429:2;38409:18;;;38402:30;38468:33;38448:18;;;38441:61;38519:18;;24779:61:4;38188:355:63;24779:61:4;24879:26;;24858:17;;;;:47;;24850:86;;;;-1:-1:-1;;;24850:86:4;;40491:2:63;24850:86:4;;;40473:21:63;40530:2;40510:18;;;40503:30;40569:28;40549:18;;;40542:56;40615:18;;24850:86:4;40289:350:63;24850:86:4;24954:17;;;;:22;24946:59;;;;-1:-1:-1;;;24946:59:4;;33380:2:63;24946:59:4;;;33362:21:63;33419:2;33399:18;;;33392:30;33458:26;33438:18;;;33431:54;33502:18;;24946:59:4;33178:348:63;24946:59:4;25023:15;25015:60;;;;-1:-1:-1;;;25015:60:4;;31617:2:63;25015:60:4;;;31599:21:63;;;31636:18;;;31629:30;31695:34;31675:18;;;31668:62;31747:18;;25015:60:4;31415:356:63;25733:559:4;25638:10;-1:-1:-1;;;;;25652:9:4;25638:23;;25630:49;;;;-1:-1:-1;;;25630:49:4;;37687:2:63;25630:49:4;;;37669:21:63;37726:2;37706:18;;;37699:30;-1:-1:-1;;;37745:18:63;;;37738:43;37798:18;;25630:49:4;37485:337:63;25630:49:4;-1:-1:-1;;;;;25866:28:4;;::::1;25843:20;25866:28:::0;;;:15:::1;:28;::::0;;;;;::::1;25986:26:::0;25978:59:::1;;;::::0;-1:-1:-1;;;25978:59:4;;42247:2:63;25978:59:4::1;::::0;::::1;42229:21:63::0;42286:2;42266:18;;;42259:30;-1:-1:-1;;;42305:18:63;;;42298:50;42365:18;;25978:59:4::1;42045:344:63::0;25978:59:4::1;26093:39;::::0;-1:-1:-1;;;26093:39:4;;-1:-1:-1;;;;;21152:32:63;;;26093:39:4::1;::::0;::::1;21134:51:63::0;26048:40:4::1;::::0;26093:12:::1;:25:::0;;::::1;::::0;::::1;::::0;21107:18:63;;26093:39:4::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;26150:15:4;;26047:85;;-1:-1:-1;26142:56:4::1;;;::::0;-1:-1:-1;;;26142:56:4;;35210:2:63;26142:56:4::1;::::0;::::1;35192:21:63::0;35249:2;35229:18;;;35222:30;-1:-1:-1;;;35268:18:63;;;35261:54;35332:18;;26142:56:4::1;35008:348:63::0;26142:56:4::1;26269:15:::0;;26208:77:::1;::::0;-1:-1:-1;;;26208:77:4;;-1:-1:-1;;;;;21462:15:63;;;26208:77:4::1;::::0;::::1;21444:34:63::0;21514:15;;;21494:18;;;21487:43;21546:18;;;21539:34;;;;26208:12:4::1;:33:::0;;::::1;::::0;::::1;::::0;21379:18:63;;26208:77:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25833:459;;25733:559:::0;;:::o;2081:198:47:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:47;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:47;;33733:2:63;2161:73:47::1;::::0;::::1;33715:21:63::0;33772:2;33752:18;;;33745:30;33811:34;33791:18;;;33784:62;-1:-1:-1;;;33862:18:63;;;33855:36;33908:19;;2161:73:47::1;33531:402:63::0;2161:73:47::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;6950:316:4:-;7059:16;;;7073:1;7059:16;;;;;;;;;7032:24;;7059:16;;;;;;;;;-1:-1:-1;;7125:24:4;;;7147:1;7125:24;;;;;;;;;7032:43;;-1:-1:-1;7085:37:4;;7125:24;-1:-1:-1;7125:24:4;;;;;;;;;;;-1:-1:-1;7125:24:4;7085:64;;7172:6;7159:7;7167:1;7159:10;;;;;;;;:::i;:::-;;;;;;:19;;;;;7206:4;7188:12;7201:1;7188:15;;;;;;;;:::i;:::-;;;;;;:22;-1:-1:-1;;;;;7188:22:4;;;-1:-1:-1;;;;;7188:22:4;;;;;7220:39;7237:12;7251:7;7220:16;:39::i;922:277:40:-;1055:7;-1:-1:-1;;;;;1102:20:40;:12;;:20;:::i;:::-;:25;;;;;;;:::i;:::-;1129:20;:12;;:20;:::i;:::-;:26;;;1157:9;;1091:76;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1081:87;;;;;;:111;1074:118;;922:277;;;;;:::o;5054:112:62:-;5103:59;5158:2;5119:42;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5119:42:62;;;;;;;;;;;;;;-1:-1:-1;;;;;5119:42:62;-1:-1:-1;;;5119:42:62;;;5103:15;:59::i;4833:114::-;4883:60;4939:2;4899:43;;;;;;25241:25:63;;25229:2;25214:18;;25095:177;4899:43:62;;;;-1:-1:-1;;4899:43:62;;;;;;;;;;;;;;-1:-1:-1;;;;;4899:43:62;-1:-1:-1;;;4899:43:62;;;4883:15;:60::i;6298:136::-;6359:71;6422:2;6426;6375:54;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6375:54:62;;;;;;;;;;;;;;-1:-1:-1;;;;;6375:54:62;-1:-1:-1;;;6375:54:62;;;6359:15;:71::i;:::-;6298:136;;:::o;5888:130::-;5946:68;6006:2;6010;5962:51;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5962:51:62;;;;;;;;;;;;;;-1:-1:-1;;;;;5962:51:62;-1:-1:-1;;;5962:51:62;;;5946:15;:68::i;1115:115::-;1168:58;1222:2;1184:41;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1184:41:62;;;;;;;;;;;;;;-1:-1:-1;;;;;1184:41:62;-1:-1:-1;;;1184:41:62;;;1168:15;:58::i;2483:571:41:-;2603:13;2652:9;:5;2660:1;2652:9;:::i;:::-;2640:1;:8;:21;;2632:60;;;;-1:-1:-1;;;2632:60:41;;41892:2:63;2632:60:41;;;41874:21:63;41931:2;41911:18;;;41904:30;41970:28;41950:18;;;41943:56;42016:18;;2632:60:41;41690:350:63;2632:60:41;-1:-1:-1;2787:21:41;2804:2;2787:21;2781:28;-1:-1:-1;;;;;;2936:79:41;;2483:571::o;7966:1235:4:-;8160:51;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8160:51:4;8213:22;8289;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8278:64:4;;8347:5;8278:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8392:34;;;;8247:108;;-1:-1:-1;8373:8:4;:53;;8365:90;;;;-1:-1:-1;;;8365:90:4;;37335:2:63;8365:90:4;;;37317:21:63;37374:2;37354:18;;;37347:30;37413:25;37393:18;;;37386:53;37456:18;;8365:90:4;37133:347:63;8365:90:4;8497:33;;8474:56;;;8466:95;;;;-1:-1:-1;;;8466:95:4;;39095:2:63;8466:95:4;;;39077:21:63;39134:2;39114:18;;;39107:30;39173:28;39153:18;;;39146:56;39219:18;;8466:95:4;38893:350:63;8466:95:4;8616:39;;;;8579:33;;:76;;8571:114;;;;-1:-1:-1;;;8571:114:4;;34501:2:63;8571:114:4;;;34483:21:63;34540:2;34520:18;;;34513:30;34579:27;34559:18;;;34552:55;34624:18;;8571:114:4;34299:349:63;8571:114:4;8765:14;8713:22;;;;:12;:22;:::i;:::-;:49;;;:66;;;;:::i;:::-;8696:83;-1:-1:-1;8790:25:4;8818:89;8696:83;8875:22;;;;:12;:22;:::i;8818:89::-;8790:117;-1:-1:-1;9110:8:4;:42;9119:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9110:42:4;-1:-1:-1;;;;;9110:42:4;;;;;;;;;;;;;9089:17;:63;;9081:113;;;;-1:-1:-1;;;9081:113:4;;41193:2:63;9081:113:4;;;41175:21:63;41232:2;41212:18;;;41205:30;41271:27;41251:18;;;41244:55;41316:18;;9081:113:4;40991:349:63;9081:113:4;8237:964;7966:1235;;;;;;:::o;510:1245:43:-;1281:26;1540:54;1557:22;;;;:12;:22;:::i;:::-;:36;;;;;;;:::i;:::-;1540:16;:54::i;:::-;1482:43;1499:20;:12;;:20;:::i;:::-;:25;;;;;;;:::i;1482:43::-;1437:30;1454:12;;1437:16;:30::i;:::-;1395:27;1412:9;;1395:16;:27::i;:::-;1336:44;1359:19;;1336:16;:44::i;:::-;1310:70;;:11;:70;:::i;:::-;:112;;;;:::i;:::-;:157;;;;:::i;:::-;:215;;;;:::i;:::-;:284;;;;:::i;:::-;1281:313;-1:-1:-1;1707:8:43;1685:37;;1677:71;;;;-1:-1:-1;;;1677:71:43;;40142:2:63;1677:71:43;;;40124:21:63;40181:2;40161:18;;;40154:30;-1:-1:-1;;;40200:18:63;;;40193:50;40260:18;;1677:71:43;39940:344:63;1359:130:47;1247:7;1273:6;-1:-1:-1;;;;;1273:6:47;719:10:55;1422:23:47;1414:68;;;;-1:-1:-1;;;1414:68:47;;38029:2:63;1414:68:47;;;38011:21:63;;;38048:18;;;38041:30;38107:34;38087:18;;;38080:62;38159:18;;1414:68:47;37827:356:63;2433:187:47;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:47;;;-1:-1:-1;;;;;;2541:17:47;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;30298:172:62:-;30377:89;30450:2;30454;30458;30462;30393:72;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;30393:72:62;;;;;;;;;;;;;;-1:-1:-1;;;;;30393:72:62;-1:-1:-1;;;30393:72:62;;;30377:15;:89::i;589:104:61:-;647:7;677:1;673;:5;:13;;685:1;673:13;;;681:1;673:13;666:20;589:104;-1:-1:-1;;;589:104:61:o;4713:125:38:-;4781:50;4809:4;563;4781:27;:50::i;23074:339:4:-;23165:17;23196:6;23204:3;23185:23;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23165:43;;23218:38;23251:4;23218:32;:38::i;:::-;23312:4;23306:11;23355:2;23349:4;23345:13;23388:8;23379:7;23372:25;3558:929:38;3738:21;3769:16;3795;3829:23;3856:26;3869:12;3856;:26::i;:::-;3828:54;-1:-1:-1;3892:24:38;3919:70;3935:19;3956:22;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;3919:15;:70::i;:::-;3892:97;-1:-1:-1;4087:22:38;;;;:12;:22;:::i;:::-;:32;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4087:37:38;-1:-1:-1;;;4202:20:38;:12;;:20;:::i;:::-;4224:16;1295:18;;;;;;;;;;;;;-1:-1:-1;;;1295:18:38;;;1318:14;;;;;;;;;;;;;;;;;1203;;;;;;;;;;;;;;;;;1162:56;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1162:56:38;;;;;;;;;;1269:90;;;;1162:56;1269:90;;:::i;:::-;;;;;;;;;;;;;1491:29;;;;;;4266:10;4278:9;;4138:159;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;4138:159:38;;;;;;;;;;;;;;-1:-1:-1;;;;;4138:159:38;-1:-1:-1;;;;;;4138:159:38;;;;;;;;;;4087:211;;;;4138:159;4087:211;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4061:237:38;;-1:-1:-1;4061:237:38;-1:-1:-1;4308:143:38;;;;4421:3;4410:30;;;;;;;;;;;;:::i;:::-;4389:51;;-1:-1:-1;4389:51:38;-1:-1:-1;4308:143:38;4460:20;4476:3;4460:15;:20::i;:::-;3818:669;;3558:929;;;;;;;;:::o;1333:274:59:-;1420:4;1527:23;1542:7;1527:14;:23::i;:::-;:73;;;;;1554:46;1579:7;1588:11;1554:24;:46::i;176:288:62:-;264:14;;129:42;373:2;360:16;;240:21;;264:14;360:16;129:42;400:5;389:68;380:77;;335:126;;176:288;:::o;1969:153:43:-;2038:7;2091:22;2111:2;-1:-1:-1;;2091:22:43;:::i;:::-;2071:15;:3;2084:2;2071:15;:::i;:::-;2064:51;;2070:44;2064:2;:51;:::i;429:173:41:-;531:6;517:4;:11;:20;513:83;;;564:20;;429:173::o;1829:229:38:-;1945:23;2022:28;2036:13;;;;:3;:13;:::i;:::-;2022;:28::i;:::-;1998:53;;;;;;25241:25:63;;25229:2;25214:18;;25095:177;1998:53:38;;;;;;;;;;;;;1985:66;;1829:229;;;:::o;4844:291::-;4931:7;4957:171;4968:159;;;;;;;;5002:4;4968:159;;;;;;;;;;;;;;;;;-1:-1:-1;;;4968:159:38;;;;;;;5057:12;5286:9;;5141:170;5057:12;4968:159;;;;5103:9;-1:-1:-1;;;;;4968:159:38;;;;4957:10;:171::i;704:411:59:-;768:4;975:60;1000:7;-1:-1:-1;;;975:24:59;:60::i;:::-;:133;;;;-1:-1:-1;1052:56:59;1077:7;-1:-1:-1;;;;;;1052:24:59;:56::i;:::-;1051:57;956:152;704:411;-1:-1:-1;;704:411:59:o;4223:638::-;4385:71;;;-1:-1:-1;;;;;;26754:33:63;;4385:71:59;;;;26736:52:63;;;;4385:71:59;;;;;;;;;;26709:18:63;;;;4385:71:59;;;;;;;;;-1:-1:-1;;;;;4385:71:59;-1:-1:-1;;;4385:71:59;;;4664:20;;4316:4;;4385:71;4316:4;;;;;;4385:71;4316:4;;4664:20;4629:7;4622:5;4611:86;4600:97;;4724:16;4710:30;;4774:4;4768:11;4753:26;;4806:7;:29;;;;;4831:4;4817:10;:18;;4806:29;:48;;;;;4853:1;4839:11;:15;4806:48;4799:55;4223:638;-1:-1:-1;;;;;;;4223:638:59:o;5644:478:38:-;5723:7;1421:14;;;;;;;;;;;;;;;;;1411:25;;;;;;;;5823:16;;;5857:24;;;5899:30;;;;5947:15;;;;;;;;:::i;:::-;5980:13;;;;;;;;:::i;:::-;6011;;;;;;;;:::i;:::-;6052:17;;;;:3;:17;:::i;:::-;6042:28;;;;;;;:::i;:::-;;;;;;;;;5759:355;;;;;;;;;6088:12;;;;;5759:355;;26142:25:63;;;26198:2;26183:18;;26176:34;;;;26241:2;26226:18;;26219:34;;;;26284:2;26269:18;;26262:34;;;;-1:-1:-1;;;;;26371:15:63;;;26365:3;26350:19;;26343:44;26424:15;;26323:3;26403:19;;26396:44;26477:15;26471:3;26456:19;;26449:44;26524:3;26509:19;;26502:35;26568:3;26553:19;;26546:35;26129:3;26114:19;;25771:816;5759:355:38;;;;;;;;;;;;;5749:366;;;;;;5742:373;;5644:478;;;:::o;5317:321::-;5385:7;1713:109;5504:3;:8;;;5488:26;;;;;;5548:3;:11;;;5532:29;;;;;;5579:3;:11;;;5608:3;:21;;;5421:209;;;;;;;;;;;25536:25:63;;;25592:2;25577:18;;25570:34;;;;25635:2;25620:18;;25613:34;;;;25678:2;25663:18;;25656:34;-1:-1:-1;;;;;25727:32:63;25721:3;25706:19;;25699:61;25523:3;25508:19;;25277:489;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:134:63:-;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:681::-;207:5;260:3;253:4;245:6;241:17;237:27;227:55;;278:1;275;268:12;227:55;314:6;301:20;340:4;364:68;380:51;428:2;380:51;:::i;:::-;364:68;:::i;:::-;454:3;478:2;473:3;466:15;506:2;501:3;497:12;490:19;;541:2;533:6;529:15;593:3;588:2;582;579:1;575:10;567:6;563:23;559:32;556:41;553:61;;;610:1;607;600:12;553:61;632:1;642:163;656:2;653:1;650:9;642:163;;;713:17;;701:30;;751:12;;;;783;;;;674:1;667:9;642:163;;;-1:-1:-1;823:5:63;;153:681;-1:-1:-1;;;;;;;153:681:63:o;839:164::-;915:13;;964;;957:21;947:32;;937:60;;993:1;990;983:12;1008:347;1059:8;1069:6;1123:3;1116:4;1108:6;1104:17;1100:27;1090:55;;1141:1;1138;1131:12;1090:55;-1:-1:-1;1164:20:63;;-1:-1:-1;;;;;1196:30:63;;1193:50;;;1239:1;1236;1229:12;1193:50;1276:4;1268:6;1264:17;1252:29;;1328:3;1321:4;1312:6;1304;1300:19;1296:30;1293:39;1290:59;;;1345:1;1342;1335:12;1290:59;1008:347;;;;;:::o;1360:496::-;1413:5;1466:3;1459:4;1451:6;1447:17;1443:27;1433:55;;1484:1;1481;1474:12;1433:55;1513:6;1507:13;-1:-1:-1;;;;;1535:2:63;1532:26;1529:52;;;1561:18;;:::i;:::-;1605:55;1648:2;1629:13;;-1:-1:-1;;1625:27:63;1654:4;1621:38;1605:55;:::i;:::-;1685:2;1676:7;1669:19;1731:3;1724:4;1719:2;1711:6;1707:15;1703:26;1700:35;1697:55;;;1748:1;1745;1738:12;1697:55;1761:64;1822:2;1815:4;1806:7;1802:18;1795:4;1787:6;1783:17;1761:64;:::i;:::-;1843:7;1360:496;-1:-1:-1;;;;1360:496:63:o;1861:165::-;1930:5;1975:3;1966:6;1961:3;1957:16;1953:26;1950:46;;;1992:1;1989;1982:12;1950:46;-1:-1:-1;2014:6:63;1861:165;-1:-1:-1;1861:165:63:o;2031:160::-;2096:5;2141:2;2132:6;2127:3;2123:16;2119:25;2116:45;;;2157:1;2154;2147:12;2196:159;2263:20;;2323:6;2312:18;;2302:29;;2292:57;;2345:1;2342;2335:12;2360:156;2426:20;;2486:4;2475:16;;2465:27;;2455:55;;2506:1;2503;2496:12;2521:175;2588:20;;-1:-1:-1;;;;;2637:34:63;;2627:45;;2617:73;;2686:1;2683;2676:12;2701:247;2760:6;2813:2;2801:9;2792:7;2788:23;2784:32;2781:52;;;2829:1;2826;2819:12;2781:52;2868:9;2855:23;2887:31;2912:5;2887:31;:::i;2953:323::-;3029:6;3037;3090:2;3078:9;3069:7;3065:23;3061:32;3058:52;;;3106:1;3103;3096:12;3058:52;3145:9;3132:23;3164:31;3189:5;3164:31;:::i;:::-;3214:5;3266:2;3251:18;;;;3238:32;;-1:-1:-1;;;2953:323:63:o;3281:396::-;3357:6;3365;3418:2;3406:9;3397:7;3393:23;3389:32;3386:52;;;3434:1;3431;3424:12;3386:52;3473:9;3460:23;3492:31;3517:5;3492:31;:::i;:::-;3542:5;-1:-1:-1;3599:2:63;3584:18;;3571:32;3612:33;3571:32;3612:33;:::i;:::-;3664:7;3654:17;;;3281:396;;;;;:::o;3682:615::-;3768:6;3776;3829:2;3817:9;3808:7;3804:23;3800:32;3797:52;;;3845:1;3842;3835:12;3797:52;3885:9;3872:23;-1:-1:-1;;;;;3955:2:63;3947:6;3944:14;3941:34;;;3971:1;3968;3961:12;3941:34;4009:6;3998:9;3994:22;3984:32;;4054:7;4047:4;4043:2;4039:13;4035:27;4025:55;;4076:1;4073;4066:12;4025:55;4116:2;4103:16;4142:2;4134:6;4131:14;4128:34;;;4158:1;4155;4148:12;4128:34;4211:7;4206:2;4196:6;4193:1;4189:14;4185:2;4181:23;4177:32;4174:45;4171:65;;;4232:1;4229;4222:12;4171:65;4263:2;4255:11;;;;;4285:6;;-1:-1:-1;3682:615:63;;-1:-1:-1;;;;3682:615:63:o;4302:1242::-;4428:6;4436;4489:2;4477:9;4468:7;4464:23;4460:32;4457:52;;;4505:1;4502;4495:12;4457:52;4545:9;4532:23;-1:-1:-1;;;;;4615:2:63;4607:6;4604:14;4601:34;;;4631:1;4628;4621:12;4601:34;4669:6;4658:9;4654:22;4644:32;;4714:7;4707:4;4703:2;4699:13;4695:27;4685:55;;4736:1;4733;4726:12;4685:55;4772:2;4759:16;4794:4;4818:68;4834:51;4882:2;4834:51;:::i;4818:68::-;4908:3;4932:2;4927:3;4920:15;4960:2;4955:3;4951:12;4944:19;;4991:2;4987;4983:11;5039:7;5034:2;5028;5025:1;5021:10;5017:2;5013:19;5009:28;5006:41;5003:61;;;5060:1;5057;5050:12;5003:61;5082:1;5073:10;;5092:238;5106:2;5103:1;5100:9;5092:238;;;5177:3;5164:17;5194:31;5219:5;5194:31;:::i;:::-;5238:18;;5124:1;5117:9;;;;;5276:12;;;;5308;;5092:238;;;-1:-1:-1;5349:5:63;-1:-1:-1;;5392:18:63;;5379:32;;-1:-1:-1;;5423:16:63;;;5420:36;;;5452:1;5449;5442:12;5420:36;;5475:63;5530:7;5519:8;5508:9;5504:24;5475:63;:::i;:::-;5465:73;;;4302:1242;;;;;:::o;5549:1250::-;5683:6;5691;5744:2;5732:9;5723:7;5719:23;5715:32;5712:52;;;5760:1;5757;5750:12;5712:52;5800:9;5787:23;-1:-1:-1;;;;;5870:2:63;5862:6;5859:14;5856:34;;;5886:1;5883;5876:12;5856:34;5924:6;5913:9;5909:22;5899:32;;5969:7;5962:4;5958:2;5954:13;5950:27;5940:55;;5991:1;5988;5981:12;5940:55;6027:2;6014:16;6049:4;6073:68;6089:51;6137:2;6089:51;:::i;6073:68::-;6163:3;6187:2;6182:3;6175:15;6215:2;6210:3;6206:12;6199:19;;6246:2;6242;6238:11;6294:7;6289:2;6283;6280:1;6276:10;6272:2;6268:19;6264:28;6261:41;6258:61;;;6315:1;6312;6305:12;6258:61;6337:1;6328:10;;6347:238;6361:2;6358:1;6355:9;6347:238;;;6432:3;6419:17;6449:31;6474:5;6449:31;:::i;:::-;6493:18;;6379:1;6372:9;;;;;6531:12;;;;6563;;6347:238;;6804:202;6871:6;6924:2;6912:9;6903:7;6899:23;6895:32;6892:52;;;6940:1;6937;6930:12;6892:52;6963:37;6990:9;6963:37;:::i;7011:414::-;7096:6;7104;7157:2;7145:9;7136:7;7132:23;7128:32;7125:52;;;7173:1;7170;7163:12;7125:52;7196:37;7223:9;7196:37;:::i;:::-;7186:47;;7277:2;7266:9;7262:18;7256:25;-1:-1:-1;;;;;7296:6:63;7293:30;7290:50;;;7336:1;7333;7326:12;7290:50;7359:60;7411:7;7402:6;7391:9;7387:22;7359:60;:::i;7430:286::-;7488:6;7541:2;7529:9;7520:7;7516:23;7512:32;7509:52;;;7557:1;7554;7547:12;7509:52;7583:23;;-1:-1:-1;;;;;;7635:32:63;;7625:43;;7615:71;;7682:1;7679;7672:12;7721:414;7806:6;7814;7867:2;7855:9;7846:7;7842:23;7838:32;7835:52;;;7883:1;7880;7873:12;7835:52;7916:9;7910:16;-1:-1:-1;;;;;7941:6:63;7938:30;7935:50;;;7981:1;7978;7971:12;7935:50;8004:60;8056:7;8047:6;8036:9;8032:22;8004:60;:::i;:::-;7994:70;;;8083:46;8125:2;8114:9;8110:18;8083:46;:::i;:::-;8073:56;;7721:414;;;;;:::o;8408:492::-;8516:6;8524;8577:2;8565:9;8556:7;8552:23;8548:32;8545:52;;;8593:1;8590;8583:12;8545:52;8625:9;8619:16;8664:1;8657:5;8654:12;8644:40;;8680:1;8677;8670:12;8644:40;8752:2;8737:18;;8731:25;8703:5;;-1:-1:-1;;;;;;8768:30:63;;8765:50;;;8811:1;8808;8801:12;8905:1533;9120:6;9128;9136;9144;9152;9160;9168;9176;9184;9192;9245:3;9233:9;9224:7;9220:23;9216:33;9213:53;;;9262:1;9259;9252:12;9213:53;9302:9;9289:23;-1:-1:-1;;;;;9372:2:63;9364:6;9361:14;9358:34;;;9388:1;9385;9378:12;9358:34;9427:58;9477:7;9468:6;9457:9;9453:22;9427:58;:::i;:::-;9504:8;;-1:-1:-1;9401:84:63;-1:-1:-1;9592:2:63;9577:18;;9564:32;;-1:-1:-1;9608:16:63;;;9605:36;;;9637:1;9634;9627:12;9605:36;9660:74;9726:7;9715:8;9704:9;9700:24;9660:74;:::i;:::-;9650:84;;9787:2;9776:9;9772:18;9759:32;9743:48;;9816:2;9806:8;9803:16;9800:36;;;9832:1;9829;9822:12;9800:36;9871:60;9923:7;9912:8;9901:9;9897:24;9871:60;:::i;:::-;9950:8;;-1:-1:-1;9845:86:63;-1:-1:-1;10038:2:63;10023:18;;10010:32;;-1:-1:-1;10054:16:63;;;10051:36;;;10083:1;10080;10073:12;10051:36;;10122:60;10174:7;10163:8;10152:9;10148:24;10122:60;:::i;:::-;10201:8;;-1:-1:-1;10096:86:63;-1:-1:-1;10255:73:63;;-1:-1:-1;10320:7:63;10314:3;10299:19;;10255:73;:::i;:::-;10245:83;;10375:3;10364:9;10360:19;10347:33;10337:43;;10427:3;10416:9;10412:19;10399:33;10389:43;;8905:1533;;;;;;;;;;;;;:::o;10443:1319::-;10604:6;10612;10620;10628;10636;10644;10652;10660;10713:3;10701:9;10692:7;10688:23;10684:33;10681:53;;;10730:1;10727;10720:12;10681:53;10770:9;10757:23;-1:-1:-1;;;;;10840:2:63;10832:6;10829:14;10826:34;;;10856:1;10853;10846:12;10826:34;10895:58;10945:7;10936:6;10925:9;10921:22;10895:58;:::i;:::-;10972:8;;-1:-1:-1;10869:84:63;-1:-1:-1;11054:2:63;11039:18;;11026:32;;-1:-1:-1;11111:2:63;11096:18;;11083:32;;-1:-1:-1;11127:16:63;;;11124:36;;;11156:1;11153;11146:12;11124:36;11179:74;11245:7;11234:8;11223:9;11219:24;11179:74;:::i;:::-;11169:84;;11306:2;11295:9;11291:18;11278:32;11262:48;;11335:2;11325:8;11322:16;11319:36;;;11351:1;11348;11341:12;11319:36;11390:60;11442:7;11431:8;11420:9;11416:24;11390:60;:::i;:::-;11469:8;;-1:-1:-1;11364:86:63;-1:-1:-1;11557:3:63;11542:19;;11529:33;;-1:-1:-1;11574:16:63;;;11571:36;;;11603:1;11600;11593:12;11571:36;;11642:60;11694:7;11683:8;11672:9;11668:24;11642:60;:::i;:::-;10443:1319;;;;-1:-1:-1;10443:1319:63;;-1:-1:-1;10443:1319:63;;;;;;11721:8;-1:-1:-1;;;10443:1319:63:o;11767:630::-;11871:6;11924:3;11912:9;11903:7;11899:23;11895:33;11892:53;;;11941:1;11938;11931:12;11892:53;11974:2;11968:9;12016:3;12008:6;12004:16;12086:6;12074:10;12071:22;-1:-1:-1;;;;;12038:10:63;12035:34;12032:62;12029:88;;;12097:18;;:::i;:::-;12137:10;12133:2;12126:22;;12178:9;12172:16;12164:6;12157:32;12243:2;12232:9;12228:18;12222:25;12217:2;12209:6;12205:15;12198:50;12302:2;12291:9;12287:18;12281:25;12276:2;12268:6;12264:15;12257:50;12361:2;12350:9;12346:18;12340:25;12335:2;12327:6;12323:15;12316:50;12385:6;12375:16;;;11767:630;;;;:::o;12402:856::-;12493:6;12546:3;12534:9;12525:7;12521:23;12517:33;12514:53;;;12563:1;12560;12553:12;12514:53;12589:22;;:::i;:::-;12647:9;12634:23;12627:5;12620:38;12718:2;12707:9;12703:18;12690:32;12685:2;12678:5;12674:14;12667:56;12783:2;12772:9;12768:18;12755:32;12750:2;12743:5;12739:14;12732:56;12848:2;12837:9;12833:18;12820:32;12815:2;12808:5;12804:14;12797:56;12914:3;12903:9;12899:19;12886:33;12880:3;12873:5;12869:15;12862:58;12953:39;12987:3;12976:9;12972:19;12953:39;:::i;:::-;12947:3;12940:5;12936:15;12929:64;13026:37;13058:3;13047:9;13043:19;13026:37;:::i;:::-;13020:3;13013:5;13009:15;13002:62;13097:38;13130:3;13119:9;13115:19;13097:38;:::i;:::-;13091:3;13084:5;13080:15;13073:63;13155:3;13190:37;13223:2;13212:9;13208:18;13190:37;:::i;:::-;13174:14;;;13167:61;13178:5;12402:856;-1:-1:-1;;;12402:856:63:o;13263:929::-;13366:6;13374;13418:9;13409:7;13405:23;13448:3;13444:2;13440:12;13437:32;;;13465:1;13462;13455:12;13437:32;13489:4;13485:2;13481:13;13478:33;;;13507:1;13504;13497:12;13478:33;;13533:22;;:::i;:::-;13584:9;13578:16;13571:5;13564:31;13648:2;13637:9;13633:18;13627:25;13622:2;13615:5;13611:14;13604:49;13706:2;13695:9;13691:18;13685:25;13680:2;13673:5;13669:14;13662:49;13764:2;13753:9;13749:18;13743:25;13738:2;13731:5;13727:14;13720:49;13823:3;13812:9;13808:19;13802:26;13796:3;13789:5;13785:15;13778:51;13874:3;13863:9;13859:19;13853:26;13888:33;13913:7;13888:33;:::i;:::-;13948:3;13937:15;;13930:32;14007:3;13992:19;;13986:26;14021:33;13986:26;14021:33;:::i;:::-;14081:3;14070:15;;14063:32;14074:5;-1:-1:-1;14138:48:63;14180:4;14165:20;;14138:48;:::i;14197:180::-;14256:6;14309:2;14297:9;14288:7;14284:23;14280:32;14277:52;;;14325:1;14322;14315:12;14277:52;-1:-1:-1;14348:23:63;;14197:180;-1:-1:-1;14197:180:63:o;14382:184::-;14452:6;14505:2;14493:9;14484:7;14480:23;14476:32;14473:52;;;14521:1;14518;14511:12;14473:52;-1:-1:-1;14544:16:63;;14382:184;-1:-1:-1;14382:184:63:o;14571:457::-;14668:6;14676;14729:2;14717:9;14708:7;14704:23;14700:32;14697:52;;;14745:1;14742;14735:12;14697:52;14781:9;14768:23;14758:33;;14842:2;14831:9;14827:18;14814:32;-1:-1:-1;;;;;14861:6:63;14858:30;14855:50;;;14901:1;14898;14891:12;14855:50;14924:22;;14980:3;14962:16;;;14958:26;14955:46;;;14997:1;14994;14987:12;15142:266;15230:6;15225:3;15218:19;15282:6;15275:5;15268:4;15263:3;15259:14;15246:43;-1:-1:-1;15334:1:63;15309:16;;;15327:4;15305:27;;;15298:38;;;;15390:2;15369:15;;;-1:-1:-1;;15365:29:63;15356:39;;;15352:50;;15142:266::o;15413:257::-;15454:3;15492:5;15486:12;15519:6;15514:3;15507:19;15535:63;15591:6;15584:4;15579:3;15575:14;15568:4;15561:5;15557:16;15535:63;:::i;:::-;15652:2;15631:15;-1:-1:-1;;15627:29:63;15618:39;;;;15659:4;15614:50;;15413:257;-1:-1:-1;;15413:257:63:o;15675:243::-;15762:1;15755:5;15752:12;15742:143;;15807:10;15802:3;15798:20;15795:1;15788:31;15842:4;15839:1;15832:15;15870:4;15867:1;15860:15;15742:143;15894:18;;15675:243::o;15923:884::-;15989:3;16035:5;16022:19;16050:33;16075:7;16050:33;:::i;:::-;-1:-1:-1;;;;;16142:16:63;;;16130:29;;16207:4;16196:16;;16183:30;;16222:33;16183:30;16222:33;:::i;:::-;16287:16;16280:4;16271:14;;16264:40;16360:4;16349:16;;;16336:30;16320:14;;;16313:54;16423:4;16412:16;;;16399:30;16383:14;;;16376:54;16486:4;16475:16;;;16462:30;16446:14;;;16439:54;16536:55;16585:4;16574:16;;16353:5;16536:55;:::i;:::-;16623:4;16616;16611:3;16607:14;16600:28;16649:69;16712:4;16707:3;16703:14;16689:12;16675;16649:69;:::i;:::-;16637:81;;;16774:4;16767:5;16763:16;16750:30;16743:4;16738:3;16734:14;16727:54;16797:4;16790:11;;;15923:884;;;;:::o;16812:1048::-;16873:3;16901:6;16941:5;16928:19;16923:3;16916:32;17004:4;16997:5;16993:16;16980:30;16973:4;16968:3;16964:14;16957:54;17067:4;17060:5;17056:16;17043:30;17036:4;17031:3;17027:14;17020:54;17122:4;17115:5;17111:16;17098:30;17137:33;17162:7;17137:33;:::i;:::-;-1:-1:-1;;;;;17240:16:63;;;17233:4;17224:14;;17217:40;17305:4;17294:16;;17281:30;;17320:33;17281:30;17320:33;:::i;:::-;17385:16;17378:4;17369:14;;17362:40;17450:4;17439:16;;17426:30;17465:33;17426:30;17465:33;:::i;:::-;-1:-1:-1;;;;;15099:31:63;17544:4;17535:14;;15087:44;17593:55;17642:4;17631:16;;17635:5;17593:55;:::i;:::-;17680:2;17673:4;17668:3;17664:14;17657:26;17704:67;17767:2;17762:3;17758:12;17744;17730;17704:67;:::i;:::-;17692:79;;;;17827:4;17820:5;17816:16;17803:30;17796:4;17791:3;17787:14;17780:54;17850:4;17843:11;;;16812:1048;;;;:::o;17865:680::-;17929:3;17986:5;17973:19;18031:5;18015:14;18011:26;18092:3;18088:8;18084:2;18080:17;18060:18;18056:42;18046:70;;18112:1;18109;18102:12;18046:70;18137:4;18132:3;18125:17;18163:89;18246:4;18241:3;18237:14;18229:5;18209:18;18205:30;18163:89;:::i;:::-;18151:101;-1:-1:-1;18313:4:63;18302:16;;18289:30;-1:-1:-1;;18364:17:63;;18338:44;;18328:72;;18396:1;18393;18386:12;18328:72;18442:3;18436:4;18432:14;18425:4;18420:3;18416:14;18409:38;18463:76;18534:4;18526:5;18504:20;18500:32;18463:76;:::i;:::-;18456:83;17865:680;-1:-1:-1;;;;;;17865:680:63:o;18836:271::-;19019:6;19011;19006:3;18993:33;18975:3;19045:16;;19070:13;;;19045:16;18836:271;-1:-1:-1;18836:271:63:o;19112:274::-;19241:3;19279:6;19273:13;19295:53;19341:6;19336:3;19329:4;19321:6;19317:17;19295:53;:::i;:::-;19364:16;;;;;19112:274;-1:-1:-1;;19112:274:63:o;19391:940::-;19820:3;19858:6;19852:13;19874:53;19920:6;19915:3;19908:4;19900:6;19896:17;19874:53;:::i;:::-;-1:-1:-1;;;19949:16:63;;;19974:18;;;20017:13;;20039:65;20017:13;20091:1;20080:13;;20073:4;20061:17;;20039:65;:::i;:::-;-1:-1:-1;;;20167:1:63;20123:20;;;;20159:10;;;20152:23;20200:13;;20222:62;20200:13;20271:1;20263:10;;20256:4;20244:17;;20222:62;:::i;:::-;20304:17;20323:1;20300:25;;19391:940;-1:-1:-1;;;;;19391:940:63:o;20336:437::-;-1:-1:-1;;;20591:3:63;20584:35;20566:3;20648:6;20642:13;20664:62;20719:6;20714:2;20709:3;20705:12;20698:4;20690:6;20686:17;20664:62;:::i;:::-;20746:16;;;;20764:2;20742:25;;20336:437;-1:-1:-1;;20336:437:63:o;21584:668::-;-1:-1:-1;;;;;21943:15:63;;;21925:34;;21995:15;;;21990:2;21975:18;;21968:43;22047:15;;22042:2;22027:18;;22020:43;-1:-1:-1;;;;;;22099:33:63;;22094:2;22079:18;;22072:61;21874:3;21859:19;;22142:60;22197:3;22182:19;;22174:6;22142:60;:::i;:::-;22239:6;22233:3;22222:9;22218:19;22211:35;21584:668;;;;;;;;;:::o;22257:666::-;-1:-1:-1;;;;;22580:15:63;;;22562:34;;22632:15;;;22627:2;22612:18;;22605:43;22684:15;;22679:2;22664:18;;22657:43;-1:-1:-1;;;;;;22736:33:63;;22731:2;22716:18;;22709:61;22801:3;22786:19;;22779:35;;;22851:3;22542;22830:19;;22823:32;;;22505:4;;22872:45;;22897:19;;22889:6;22872:45;:::i;:::-;22864:53;22257:666;-1:-1:-1;;;;;;;;22257:666:63:o;23207:412::-;23449:1;23445;23440:3;23436:11;23432:19;23424:6;23420:32;23409:9;23402:51;23489:6;23484:2;23473:9;23469:18;23462:34;23532:2;23527;23516:9;23512:18;23505:30;23383:4;23552:61;23609:2;23598:9;23594:18;23586:6;23578;23552:61;:::i;23624:784::-;23852:2;23864:21;;;23837:18;;23920:22;;;23804:4;23999:6;23973:2;23958:18;;23804:4;24033:304;24047:6;24044:1;24041:13;24033:304;;;24122:6;24109:20;24142:31;24167:5;24142:31;:::i;:::-;-1:-1:-1;;;;;24198:31:63;24186:44;;24253:4;24312:15;;;;24277:12;;;;24226:1;24062:9;24033:304;;;-1:-1:-1;24388:4:63;24373:20;;;;24366:36;;;;-1:-1:-1;24354:3:63;23624:784;-1:-1:-1;;;23624:784:63:o;24605:485::-;24862:6;24855:14;24848:22;24837:9;24830:41;24907:6;24902:2;24891:9;24887:18;24880:34;24923:59;24978:2;24967:9;24963:18;24955:6;24923:59;:::i;:::-;25018:3;25013:2;25002:9;24998:18;24991:31;24811:4;25039:45;25079:3;25068:9;25064:19;25056:6;25039:45;:::i;26799:217::-;26946:2;26935:9;26928:21;26909:4;26966:44;27006:2;26995:9;26991:18;26983:6;26966:44;:::i;27021:589::-;27302:3;27291:9;27284:22;27265:4;27329:45;27369:3;27358:9;27354:19;27346:6;27329:45;:::i;:::-;27424:6;27417:14;27410:22;27405:2;27394:9;27390:18;27383:50;27469:6;27464:2;27453:9;27449:18;27442:34;27524:9;27516:6;27512:22;27507:2;27496:9;27492:18;27485:50;27552:52;27597:6;27589;27552:52;:::i;28068:331::-;28243:50;28283:9;28275:6;28243:50;:::i;:::-;28329:2;28324;28313:9;28309:18;28302:30;28224:4;28349:44;28389:2;28378:9;28374:18;28366:6;28349:44;:::i;28404:1340::-;28880:4;28909:3;28939:2;28928:9;28921:21;28965:61;29022:2;29011:9;29007:18;28999:6;28991;28965:61;:::i;:::-;28951:75;;29074:9;29066:6;29062:22;29057:2;29046:9;29042:18;29035:50;29108:55;29156:6;29148;29108:55;:::i;:::-;29094:69;;29211:9;29203:6;29199:22;29194:2;29183:9;29179:18;29172:50;29245:49;29287:6;29279;29271;29245:49;:::i;:::-;29231:63;;29342:9;29334:6;29330:22;29325:2;29314:9;29310:18;29303:50;29370:49;29412:6;29404;29396;29370:49;:::i;:::-;29456:13;;29450:3;29435:19;;29428:42;29525:2;29513:15;;29507:22;29501:3;29486:19;;29479:51;29585:2;29573:15;;29567:22;29561:3;29546:19;;29539:51;29645:2;29633:15;;;29627:22;29621:3;29606:19;;29599:51;-1:-1:-1;;29681:3:63;29666:19;;29659:35;;;;29725:3;29710:19;;;29703:35;29362:57;28404:1340;-1:-1:-1;;;;;;;28404:1340:63:o;29973:316::-;30150:2;30139:9;30132:21;30113:4;30170:44;30210:2;30199:9;30195:18;30187:6;30170:44;:::i;:::-;30162:52;;30279:1;30275;30270:3;30266:11;30262:19;30254:6;30250:32;30245:2;30234:9;30230:18;30223:60;29973:316;;;;;:::o;30294:290::-;30471:2;30460:9;30453:21;30434:4;30491:44;30531:2;30520:9;30516:18;30508:6;30491:44;:::i;:::-;30483:52;;30571:6;30566:2;30555:9;30551:18;30544:34;30294:290;;;;;:::o;30589:460::-;30822:3;30811:9;30804:22;30785:4;30843:45;30883:3;30872:9;30868:19;30860:6;30843:45;:::i;:::-;30919:2;30904:18;;30897:34;;;;-1:-1:-1;;;;;;30967:32:63;;;;30962:2;30947:18;;30940:60;31031:2;31016:18;;;31009:34;30835:53;30589:460;-1:-1:-1;30589:460:63:o;42394:782::-;42747:3;42736:9;42729:22;42710:4;42774:70;42839:3;42828:9;42824:19;42816:6;42774:70;:::i;:::-;42880:6;42875:2;42864:9;42860:18;42853:34;42923:6;42918:2;42907:9;42903:18;42896:34;42978:9;42970:6;42966:22;42961:2;42950:9;42946:18;42939:50;43012:32;43037:6;43029;43012:32;:::i;:::-;42998:46;;43093:9;43085:6;43081:22;43075:3;43064:9;43060:19;43053:51;43121:49;43163:6;43155;43147;43121:49;:::i;:::-;43113:57;42394:782;-1:-1:-1;;;;;;;;;42394:782:63:o;43181:919::-;43337:4;43379:3;43368:9;43364:19;43356:27;;43416:6;43410:13;43399:9;43392:32;43480:4;43472:6;43468:17;43462:24;43455:4;43444:9;43440:20;43433:54;43543:4;43535:6;43531:17;43525:24;43518:4;43507:9;43503:20;43496:54;43606:4;43598:6;43594:17;43588:24;43581:4;43570:9;43566:20;43559:54;43669:4;43661:6;43657:17;43651:24;43644:4;43633:9;43629:20;43622:54;43761:1;43757;43752:3;43748:11;43744:19;43736:4;43728:6;43724:17;43718:24;43714:50;43707:4;43696:9;43692:20;43685:80;43833:4;43825;43817:6;43813:17;43807:24;43803:35;43796:4;43785:9;43781:20;43774:65;43886:4;43878:6;43874:17;43868:24;43901:53;43948:4;43937:9;43933:20;43919:12;-1:-1:-1;;;;;18710:34:63;18698:47;;18645:106;43901:53;-1:-1:-1;43973:6:63;44016:15;;;44010:22;18626:6;18615:18;44075;;;;18603:31;43181:919;:::o;45082:731::-;45413:3;45402:9;45395:22;45376:4;45440:68;45503:3;45492:9;45488:19;45480:6;45440:68;:::i;:::-;45556:9;45548:6;45544:22;45539:2;45528:9;45524:18;45517:50;45590:49;45632:6;45624;45616;45590:49;:::i;:::-;45576:63;;45687:9;45679:6;45675:22;45670:2;45659:9;45655:18;45648:50;45715:49;45757:6;45749;45741;45715:49;:::i;:::-;45707:57;;;45800:6;45795:2;45784:9;45780:18;45773:34;45082:731;;;;;;;;;:::o;46000:521::-;46077:4;46083:6;46143:11;46130:25;46237:2;46233:7;46222:8;46206:14;46202:29;46198:43;46178:18;46174:68;46164:96;;46256:1;46253;46246:12;46164:96;46283:33;;46335:20;;;-1:-1:-1;;;;;;46367:30:63;;46364:50;;;46410:1;46407;46400:12;46364:50;46443:4;46431:17;;-1:-1:-1;46474:14:63;46470:27;;;46460:38;;46457:58;;;46511:1;46508;46501:12;46526:332;46626:4;46684:11;46671:25;46778:3;46774:8;46763;46747:14;46743:29;46739:44;46719:18;46715:69;46705:97;;46798:1;46795;46788:12;46863:327;46958:4;47016:11;47003:25;47110:3;47106:8;47095;47079:14;47075:29;47071:44;47051:18;47047:69;47037:97;;47130:1;47127;47120:12;47195:252;47267:2;47261:9;47309:3;47297:16;;-1:-1:-1;;;;;47328:34:63;;47364:22;;;47325:62;47322:88;;;47390:18;;:::i;:::-;47426:2;47419:22;47195:252;:::o;47452:253::-;47524:2;47518:9;47566:4;47554:17;;-1:-1:-1;;;;;47586:34:63;;47622:22;;;47583:62;47580:88;;;47648:18;;:::i;47710:275::-;47781:2;47775:9;47846:2;47827:13;;-1:-1:-1;;47823:27:63;47811:40;;-1:-1:-1;;;;;47866:34:63;;47902:22;;;47863:62;47860:88;;;47928:18;;:::i;:::-;47964:2;47957:22;47710:275;;-1:-1:-1;47710:275:63:o;47990:191::-;48058:4;-1:-1:-1;;;;;48083:6:63;48080:30;48077:56;;;48113:18;;:::i;:::-;-1:-1:-1;48158:1:63;48154:14;48170:4;48150:25;;47990:191::o;48186:503::-;48244:5;48251:6;48311:3;48298:17;48397:2;48393:7;48382:8;48366:14;48362:29;48358:43;48338:18;48334:68;48324:96;;48416:1;48413;48406:12;48324:96;48444:33;;48548:4;48535:18;;;-1:-1:-1;48496:21:63;;-1:-1:-1;;;;;;48565:30:63;;48562:50;;;48608:1;48605;48598:12;48562:50;48658:6;48642:14;48638:27;48628:8;48624:42;48621:62;;;48679:1;48676;48669:12;48694:224;48733:3;48761:6;48794:2;48791:1;48787:10;48824:2;48821:1;48817:10;48855:3;48851:2;48847:12;48842:3;48839:21;48836:47;;;48863:18;;:::i;:::-;48899:13;;48694:224;-1:-1:-1;;;;48694:224:63:o;48923:128::-;48963:3;48994:1;48990:6;48987:1;48984:13;48981:39;;;49000:18;;:::i;:::-;-1:-1:-1;49036:9:63;;48923:128::o;49056:217::-;49096:1;49122;49112:132;;49166:10;49161:3;49157:20;49154:1;49147:31;49201:4;49198:1;49191:15;49229:4;49226:1;49219:15;49112:132;-1:-1:-1;49258:9:63;;49056:217::o;49278:168::-;49318:7;49384:1;49380;49376:6;49372:14;49369:1;49366:21;49361:1;49354:9;49347:17;49343:45;49340:71;;;49391:18;;:::i;:::-;-1:-1:-1;49431:9:63;;49278:168::o;49451:125::-;49491:4;49519:1;49516;49513:8;49510:34;;;49524:18;;:::i;:::-;-1:-1:-1;49561:9:63;;49451:125::o;49581:258::-;49653:1;49663:113;49677:6;49674:1;49671:13;49663:113;;;49753:11;;;49747:18;49734:11;;;49727:39;49699:2;49692:10;49663:113;;;49794:6;49791:1;49788:13;49785:48;;;-1:-1:-1;;49829:1:63;49811:16;;49804:27;49581:258::o;49973:135::-;50012:3;-1:-1:-1;;50033:17:63;;50030:43;;;50053:18;;:::i;:::-;-1:-1:-1;50100:1:63;50089:13;;49973:135::o;50113:127::-;50174:10;50169:3;50165:20;50162:1;50155:31;50205:4;50202:1;50195:15;50229:4;50226:1;50219:15;50377:127;50438:10;50433:3;50429:20;50426:1;50419:31;50469:4;50466:1;50459:15;50493:4;50490:1;50483:15;50509:127;50570:10;50565:3;50561:20;50558:1;50551:31;50601:4;50598:1;50591:15;50625:4;50622:1;50615:15;50641:127;50702:10;50697:3;50693:20;50690:1;50683:31;50733:4;50730:1;50723:15;50757:4;50754:1;50747:15;50773:131;-1:-1:-1;;;;;50848:31:63;;50838:42;;50828:70;;50894:1;50891;50884:12",
    "source": "pragma solidity ^0.8.0;\npragma abicoder v2;\n\n// SPDX-License-Identifier: GPL-3.0-only\n\nimport \"../RelayHub.sol\";\nimport \"./ArbSys.sol\";\n\n/**\n * @title The RelayHub Implementation for Arbitrum\n * @notice This contract implements the `IRelayHub` interface for the Arbitrum-compatible Rollups.\n *\n * @notice This implementation relies on the `ArbSys` built-ins that do not exist outside of Arbitrum.\n */\ncontract ArbRelayHub is RelayHub {\n\n    /// @inheritdoc IRelayHub\n    function versionHub() override public pure returns (string memory){\n        return \"3.0.0-beta.3+opengsn.arbhub.irelayhub\";\n    }\n\n    ArbSys public immutable arbsys;\n    uint256 internal immutable arbCreationBlock;\n\n    /// @notice we accept the `ArbSys` address in the constructor to allow mocking it in tests.\n    constructor(\n        ArbSys _arbsys,\n        IStakeManager _stakeManager,\n        address _penalizer,\n        address _batchGateway,\n        address _relayRegistrar,\n        RelayHubConfig memory _config\n    ) RelayHub(_stakeManager, _penalizer, _batchGateway, _relayRegistrar, _config){\n        arbsys = _arbsys;\n        arbCreationBlock = _arbsys.arbBlockNumber();\n    }\n\n    /// @inheritdoc IRelayHub\n    /// @notice Uses `ArbSys` L2 block number specific to the Arbitrum Rollup.\n    function getCreationBlock() external override virtual view returns (uint256){\n        return arbCreationBlock;\n    }\n\n    /// @return The block number in which the contract has been deployed.\n    /// @notice Uses original L1 block number.\n    function getL1CreationBlock() external view returns (uint256){\n        return creationBlock;\n    }\n\n    /// @notice Includes the 'storage gas' specific to the Arbitrum Rollup.\n    /// @inheritdoc IRelayHub\n    function aggregateGasleft() public override virtual view returns (uint256){\n        return arbsys.getStorageGasAvailable() + gasleft();\n    }\n}",
    "sourcePath": "/Users/alexf/gsn2/packages/contracts/solpp/arbitrum/ArbRelayHub.sol",
    "ast": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/arbitrum/ArbRelayHub.sol",
        "exportedSymbols": {
            "Address": [
                11486
            ],
            "ArbRelayHub": [
                4450
            ],
            "ArbSys": [
                4466
            ],
            "Context": [
                11508
            ],
            "ERC165": [
                12146
            ],
            "ERC165Checker": [
                12340
            ],
            "GsnEip712Library": [
                8464
            ],
            "GsnTypes": [
                8492
            ],
            "GsnUtils": [
                8572
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IERC2771Recipient": [
                5374
            ],
            "IForwarder": [
                5129
            ],
            "IPaymaster": [
                5447
            ],
            "IRelayHub": [
                5896
            ],
            "IRelayRegistrar": [
                5994
            ],
            "IStakeManager": [
                6284
            ],
            "Math": [
                12856
            ],
            "MinLibBytes": [
                8687
            ],
            "Ownable": [
                10182
            ],
            "RelayHub": [
                3330
            ],
            "RelayHubValidator": [
                9499
            ],
            "console": [
                20920
            ]
        },
        "id": 4451,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 4357,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:6"
            },
            {
                "id": 4358,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "24:19:6"
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/RelayHub.sol",
                "file": "../RelayHub.sol",
                "id": 4359,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 4451,
                "sourceUnit": 3331,
                "src": "87:25:6",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/arbitrum/ArbSys.sol",
                "file": "./ArbSys.sol",
                "id": 4360,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 4451,
                "sourceUnit": 4467,
                "src": "113:22:6",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 4362,
                            "name": "RelayHub",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 3330,
                            "src": "425:8:6"
                        },
                        "id": 4363,
                        "nodeType": "InheritanceSpecifier",
                        "src": "425:8:6"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "documentation": {
                    "id": 4361,
                    "nodeType": "StructuredDocumentation",
                    "src": "137:263:6",
                    "text": " @title The RelayHub Implementation for Arbitrum\n @notice This contract implements the `IRelayHub` interface for the Arbitrum-compatible Rollups.\n @notice This implementation relies on the `ArbSys` built-ins that do not exist outside of Arbitrum."
                },
                "fullyImplemented": true,
                "id": 4450,
                "linearizedBaseContracts": [
                    4450,
                    3330,
                    12146,
                    10182,
                    11508,
                    5896,
                    12352
                ],
                "name": "ArbRelayHub",
                "nameLocation": "410:11:6",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "baseFunctions": [
                            1224
                        ],
                        "body": {
                            "id": 4372,
                            "nodeType": "Block",
                            "src": "537:63:6",
                            "statements": [
                                {
                                    "expression": {
                                        "hexValue": "332e302e302d626574612e332b6f70656e67736e2e6172626875622e6972656c6179687562",
                                        "id": 4370,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "554:39:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_bda69c2034f6149dd9d0459646915bb99380fd54b9bc21774d6383dc4cf2636b",
                                            "typeString": "literal_string \"3.0.0-beta.3+opengsn.arbhub.irelayhub\""
                                        },
                                        "value": "3.0.0-beta.3+opengsn.arbhub.irelayhub"
                                    },
                                    "functionReturnParameters": 4369,
                                    "id": 4371,
                                    "nodeType": "Return",
                                    "src": "547:46:6"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4364,
                            "nodeType": "StructuredDocumentation",
                            "src": "441:25:6",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "d904c732",
                        "id": 4373,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "versionHub",
                        "nameLocation": "480:10:6",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4366,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "493:8:6"
                        },
                        "parameters": {
                            "id": 4365,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "490:2:6"
                        },
                        "returnParameters": {
                            "id": 4369,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4368,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4373,
                                    "src": "523:13:6",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 4367,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "523:6:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "522:15:6"
                        },
                        "scope": 4450,
                        "src": "471:129:6",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "a51c8cb9",
                        "id": 4376,
                        "mutability": "immutable",
                        "name": "arbsys",
                        "nameLocation": "630:6:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 4450,
                        "src": "606:30:6",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ArbSys_$4466",
                            "typeString": "contract ArbSys"
                        },
                        "typeName": {
                            "id": 4375,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                                "id": 4374,
                                "name": "ArbSys",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 4466,
                                "src": "606:6:6"
                            },
                            "referencedDeclaration": 4466,
                            "src": "606:6:6",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ArbSys_$4466",
                                "typeString": "contract ArbSys"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 4378,
                        "mutability": "immutable",
                        "name": "arbCreationBlock",
                        "nameLocation": "669:16:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 4450,
                        "src": "642:43:6",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 4377,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "642:7:6",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 4414,
                            "nodeType": "Block",
                            "src": "1074:86:6",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 4406,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 4404,
                                            "name": "arbsys",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4376,
                                            "src": "1084:6:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_ArbSys_$4466",
                                                "typeString": "contract ArbSys"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 4405,
                                            "name": "_arbsys",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4382,
                                            "src": "1093:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_ArbSys_$4466",
                                                "typeString": "contract ArbSys"
                                            }
                                        },
                                        "src": "1084:16:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_ArbSys_$4466",
                                            "typeString": "contract ArbSys"
                                        }
                                    },
                                    "id": 4407,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1084:16:6"
                                },
                                {
                                    "expression": {
                                        "id": 4412,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 4408,
                                            "name": "arbCreationBlock",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4378,
                                            "src": "1110:16:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [],
                                            "expression": {
                                                "argumentTypes": [],
                                                "expression": {
                                                    "id": 4409,
                                                    "name": "_arbsys",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4382,
                                                    "src": "1129:7:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_ArbSys_$4466",
                                                        "typeString": "contract ArbSys"
                                                    }
                                                },
                                                "id": 4410,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "arbBlockNumber",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 4459,
                                                "src": "1129:22:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                                    "typeString": "function () view external returns (uint256)"
                                                }
                                            },
                                            "id": 4411,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1129:24:6",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1110:43:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 4413,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1110:43:6"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4379,
                            "nodeType": "StructuredDocumentation",
                            "src": "692:91:6",
                            "text": "@notice we accept the `ArbSys` address in the constructor to allow mocking it in tests."
                        },
                        "id": 4415,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "id": 4397,
                                        "name": "_stakeManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4385,
                                        "src": "1007:13:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    {
                                        "id": 4398,
                                        "name": "_penalizer",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4387,
                                        "src": "1022:10:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    {
                                        "id": 4399,
                                        "name": "_batchGateway",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4389,
                                        "src": "1034:13:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    {
                                        "id": 4400,
                                        "name": "_relayRegistrar",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4391,
                                        "src": "1049:15:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    {
                                        "id": 4401,
                                        "name": "_config",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4394,
                                        "src": "1066:7:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig memory"
                                        }
                                    }
                                ],
                                "id": 4402,
                                "kind": "baseConstructorSpecifier",
                                "modifierName": {
                                    "id": 4396,
                                    "name": "RelayHub",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3330,
                                    "src": "998:8:6"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "998:76:6"
                            }
                        ],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4395,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4382,
                                    "mutability": "mutable",
                                    "name": "_arbsys",
                                    "nameLocation": "816:7:6",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4415,
                                    "src": "809:14:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ArbSys_$4466",
                                        "typeString": "contract ArbSys"
                                    },
                                    "typeName": {
                                        "id": 4381,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4380,
                                            "name": "ArbSys",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 4466,
                                            "src": "809:6:6"
                                        },
                                        "referencedDeclaration": 4466,
                                        "src": "809:6:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_ArbSys_$4466",
                                            "typeString": "contract ArbSys"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4385,
                                    "mutability": "mutable",
                                    "name": "_stakeManager",
                                    "nameLocation": "847:13:6",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4415,
                                    "src": "833:27:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                        "typeString": "contract IStakeManager"
                                    },
                                    "typeName": {
                                        "id": 4384,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4383,
                                            "name": "IStakeManager",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6284,
                                            "src": "833:13:6"
                                        },
                                        "referencedDeclaration": 6284,
                                        "src": "833:13:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4387,
                                    "mutability": "mutable",
                                    "name": "_penalizer",
                                    "nameLocation": "878:10:6",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4415,
                                    "src": "870:18:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4386,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "870:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4389,
                                    "mutability": "mutable",
                                    "name": "_batchGateway",
                                    "nameLocation": "906:13:6",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4415,
                                    "src": "898:21:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4388,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "898:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4391,
                                    "mutability": "mutable",
                                    "name": "_relayRegistrar",
                                    "nameLocation": "937:15:6",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4415,
                                    "src": "929:23:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4390,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "929:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4394,
                                    "mutability": "mutable",
                                    "name": "_config",
                                    "nameLocation": "984:7:6",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4415,
                                    "src": "962:29:6",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                        "typeString": "struct IRelayHub.RelayHubConfig"
                                    },
                                    "typeName": {
                                        "id": 4393,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4392,
                                            "name": "RelayHubConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5556,
                                            "src": "962:14:6"
                                        },
                                        "referencedDeclaration": 5556,
                                        "src": "962:14:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "799:198:6"
                        },
                        "returnParameters": {
                            "id": 4403,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1074:0:6"
                        },
                        "scope": 4450,
                        "src": "788:372:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            1410
                        ],
                        "body": {
                            "id": 4424,
                            "nodeType": "Block",
                            "src": "1351:40:6",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 4422,
                                        "name": "arbCreationBlock",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4378,
                                        "src": "1368:16:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 4421,
                                    "id": 4423,
                                    "nodeType": "Return",
                                    "src": "1361:23:6"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4416,
                            "nodeType": "StructuredDocumentation",
                            "src": "1166:104:6",
                            "text": "@inheritdoc IRelayHub\n @notice Uses `ArbSys` L2 block number specific to the Arbitrum Rollup."
                        },
                        "functionSelector": "20ffd56d",
                        "id": 4425,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getCreationBlock",
                        "nameLocation": "1284:16:6",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4418,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1312:8:6"
                        },
                        "parameters": {
                            "id": 4417,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1300:2:6"
                        },
                        "returnParameters": {
                            "id": 4421,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4420,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4425,
                                    "src": "1343:7:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4419,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1343:7:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1342:9:6"
                        },
                        "scope": 4450,
                        "src": "1275:116:6",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 4433,
                            "nodeType": "Block",
                            "src": "1579:37:6",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 4431,
                                        "name": "creationBlock",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1352,
                                        "src": "1596:13:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 4430,
                                    "id": 4432,
                                    "nodeType": "Return",
                                    "src": "1589:20:6"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4426,
                            "nodeType": "StructuredDocumentation",
                            "src": "1397:116:6",
                            "text": "@return The block number in which the contract has been deployed.\n @notice Uses original L1 block number."
                        },
                        "functionSelector": "c5c98a1a",
                        "id": 4434,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getL1CreationBlock",
                        "nameLocation": "1527:18:6",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4427,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1545:2:6"
                        },
                        "returnParameters": {
                            "id": 4430,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4429,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4434,
                                    "src": "1571:7:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4428,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1571:7:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1570:9:6"
                        },
                        "scope": 4450,
                        "src": "1518:98:6",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3329
                        ],
                        "body": {
                            "id": 4448,
                            "nodeType": "Block",
                            "src": "1802:67:6",
                            "statements": [
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 4446,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "arguments": [],
                                            "expression": {
                                                "argumentTypes": [],
                                                "expression": {
                                                    "id": 4441,
                                                    "name": "arbsys",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4376,
                                                    "src": "1819:6:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_ArbSys_$4466",
                                                        "typeString": "contract ArbSys"
                                                    }
                                                },
                                                "id": 4442,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "getStorageGasAvailable",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 4465,
                                                "src": "1819:29:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                                    "typeString": "function () view external returns (uint256)"
                                                }
                                            },
                                            "id": 4443,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1819:31:6",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                            "arguments": [],
                                            "expression": {
                                                "argumentTypes": [],
                                                "id": 4444,
                                                "name": "gasleft",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967289,
                                                "src": "1853:7:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                    "typeString": "function () view returns (uint256)"
                                                }
                                            },
                                            "id": 4445,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1853:9:6",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1819:43:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 4440,
                                    "id": 4447,
                                    "nodeType": "Return",
                                    "src": "1812:50:6"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4435,
                            "nodeType": "StructuredDocumentation",
                            "src": "1622:101:6",
                            "text": "@notice Includes the 'storage gas' specific to the Arbitrum Rollup.\n @inheritdoc IRelayHub"
                        },
                        "functionSelector": "45bdade7",
                        "id": 4449,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "aggregateGasleft",
                        "nameLocation": "1737:16:6",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4437,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1763:8:6"
                        },
                        "parameters": {
                            "id": 4436,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1753:2:6"
                        },
                        "returnParameters": {
                            "id": 4440,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4439,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4449,
                                    "src": "1794:7:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4438,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1794:7:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1793:9:6"
                        },
                        "scope": 4450,
                        "src": "1728:141:6",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "public"
                    }
                ],
                "scope": 4451,
                "src": "401:1470:6",
                "usedErrors": []
            }
        ],
        "src": "0:1871:6"
    },
    "legacyAST": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/arbitrum/ArbRelayHub.sol",
        "exportedSymbols": {
            "Address": [
                11486
            ],
            "ArbRelayHub": [
                4450
            ],
            "ArbSys": [
                4466
            ],
            "Context": [
                11508
            ],
            "ERC165": [
                12146
            ],
            "ERC165Checker": [
                12340
            ],
            "GsnEip712Library": [
                8464
            ],
            "GsnTypes": [
                8492
            ],
            "GsnUtils": [
                8572
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IERC2771Recipient": [
                5374
            ],
            "IForwarder": [
                5129
            ],
            "IPaymaster": [
                5447
            ],
            "IRelayHub": [
                5896
            ],
            "IRelayRegistrar": [
                5994
            ],
            "IStakeManager": [
                6284
            ],
            "Math": [
                12856
            ],
            "MinLibBytes": [
                8687
            ],
            "Ownable": [
                10182
            ],
            "RelayHub": [
                3330
            ],
            "RelayHubValidator": [
                9499
            ],
            "console": [
                20920
            ]
        },
        "id": 4451,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 4357,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:23:6"
            },
            {
                "id": 4358,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "24:19:6"
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/RelayHub.sol",
                "file": "../RelayHub.sol",
                "id": 4359,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 4451,
                "sourceUnit": 3331,
                "src": "87:25:6",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/arbitrum/ArbSys.sol",
                "file": "./ArbSys.sol",
                "id": 4360,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 4451,
                "sourceUnit": 4467,
                "src": "113:22:6",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 4362,
                            "name": "RelayHub",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 3330,
                            "src": "425:8:6"
                        },
                        "id": 4363,
                        "nodeType": "InheritanceSpecifier",
                        "src": "425:8:6"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "contract",
                "documentation": {
                    "id": 4361,
                    "nodeType": "StructuredDocumentation",
                    "src": "137:263:6",
                    "text": " @title The RelayHub Implementation for Arbitrum\n @notice This contract implements the `IRelayHub` interface for the Arbitrum-compatible Rollups.\n @notice This implementation relies on the `ArbSys` built-ins that do not exist outside of Arbitrum."
                },
                "fullyImplemented": true,
                "id": 4450,
                "linearizedBaseContracts": [
                    4450,
                    3330,
                    12146,
                    10182,
                    11508,
                    5896,
                    12352
                ],
                "name": "ArbRelayHub",
                "nameLocation": "410:11:6",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "baseFunctions": [
                            1224
                        ],
                        "body": {
                            "id": 4372,
                            "nodeType": "Block",
                            "src": "537:63:6",
                            "statements": [
                                {
                                    "expression": {
                                        "hexValue": "332e302e302d626574612e332b6f70656e67736e2e6172626875622e6972656c6179687562",
                                        "id": 4370,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "554:39:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_bda69c2034f6149dd9d0459646915bb99380fd54b9bc21774d6383dc4cf2636b",
                                            "typeString": "literal_string \"3.0.0-beta.3+opengsn.arbhub.irelayhub\""
                                        },
                                        "value": "3.0.0-beta.3+opengsn.arbhub.irelayhub"
                                    },
                                    "functionReturnParameters": 4369,
                                    "id": 4371,
                                    "nodeType": "Return",
                                    "src": "547:46:6"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4364,
                            "nodeType": "StructuredDocumentation",
                            "src": "441:25:6",
                            "text": "@inheritdoc IRelayHub"
                        },
                        "functionSelector": "d904c732",
                        "id": 4373,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "versionHub",
                        "nameLocation": "480:10:6",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4366,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "493:8:6"
                        },
                        "parameters": {
                            "id": 4365,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "490:2:6"
                        },
                        "returnParameters": {
                            "id": 4369,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4368,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4373,
                                    "src": "523:13:6",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 4367,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "523:6:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "522:15:6"
                        },
                        "scope": 4450,
                        "src": "471:129:6",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "functionSelector": "a51c8cb9",
                        "id": 4376,
                        "mutability": "immutable",
                        "name": "arbsys",
                        "nameLocation": "630:6:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 4450,
                        "src": "606:30:6",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ArbSys_$4466",
                            "typeString": "contract ArbSys"
                        },
                        "typeName": {
                            "id": 4375,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                                "id": 4374,
                                "name": "ArbSys",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 4466,
                                "src": "606:6:6"
                            },
                            "referencedDeclaration": 4466,
                            "src": "606:6:6",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ArbSys_$4466",
                                "typeString": "contract ArbSys"
                            }
                        },
                        "visibility": "public"
                    },
                    {
                        "constant": false,
                        "id": 4378,
                        "mutability": "immutable",
                        "name": "arbCreationBlock",
                        "nameLocation": "669:16:6",
                        "nodeType": "VariableDeclaration",
                        "scope": 4450,
                        "src": "642:43:6",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 4377,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "642:7:6",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 4414,
                            "nodeType": "Block",
                            "src": "1074:86:6",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 4406,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 4404,
                                            "name": "arbsys",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4376,
                                            "src": "1084:6:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_ArbSys_$4466",
                                                "typeString": "contract ArbSys"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 4405,
                                            "name": "_arbsys",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4382,
                                            "src": "1093:7:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_ArbSys_$4466",
                                                "typeString": "contract ArbSys"
                                            }
                                        },
                                        "src": "1084:16:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_ArbSys_$4466",
                                            "typeString": "contract ArbSys"
                                        }
                                    },
                                    "id": 4407,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1084:16:6"
                                },
                                {
                                    "expression": {
                                        "id": 4412,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 4408,
                                            "name": "arbCreationBlock",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4378,
                                            "src": "1110:16:6",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [],
                                            "expression": {
                                                "argumentTypes": [],
                                                "expression": {
                                                    "id": 4409,
                                                    "name": "_arbsys",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4382,
                                                    "src": "1129:7:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_ArbSys_$4466",
                                                        "typeString": "contract ArbSys"
                                                    }
                                                },
                                                "id": 4410,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "arbBlockNumber",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 4459,
                                                "src": "1129:22:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                                    "typeString": "function () view external returns (uint256)"
                                                }
                                            },
                                            "id": 4411,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1129:24:6",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1110:43:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 4413,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1110:43:6"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4379,
                            "nodeType": "StructuredDocumentation",
                            "src": "692:91:6",
                            "text": "@notice we accept the `ArbSys` address in the constructor to allow mocking it in tests."
                        },
                        "id": 4415,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [
                            {
                                "arguments": [
                                    {
                                        "id": 4397,
                                        "name": "_stakeManager",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4385,
                                        "src": "1007:13:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    {
                                        "id": 4398,
                                        "name": "_penalizer",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4387,
                                        "src": "1022:10:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    {
                                        "id": 4399,
                                        "name": "_batchGateway",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4389,
                                        "src": "1034:13:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    {
                                        "id": 4400,
                                        "name": "_relayRegistrar",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4391,
                                        "src": "1049:15:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    {
                                        "id": 4401,
                                        "name": "_config",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4394,
                                        "src": "1066:7:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig memory"
                                        }
                                    }
                                ],
                                "id": 4402,
                                "kind": "baseConstructorSpecifier",
                                "modifierName": {
                                    "id": 4396,
                                    "name": "RelayHub",
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 3330,
                                    "src": "998:8:6"
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "998:76:6"
                            }
                        ],
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4395,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4382,
                                    "mutability": "mutable",
                                    "name": "_arbsys",
                                    "nameLocation": "816:7:6",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4415,
                                    "src": "809:14:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ArbSys_$4466",
                                        "typeString": "contract ArbSys"
                                    },
                                    "typeName": {
                                        "id": 4381,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4380,
                                            "name": "ArbSys",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 4466,
                                            "src": "809:6:6"
                                        },
                                        "referencedDeclaration": 4466,
                                        "src": "809:6:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_ArbSys_$4466",
                                            "typeString": "contract ArbSys"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4385,
                                    "mutability": "mutable",
                                    "name": "_stakeManager",
                                    "nameLocation": "847:13:6",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4415,
                                    "src": "833:27:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                        "typeString": "contract IStakeManager"
                                    },
                                    "typeName": {
                                        "id": 4384,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4383,
                                            "name": "IStakeManager",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6284,
                                            "src": "833:13:6"
                                        },
                                        "referencedDeclaration": 6284,
                                        "src": "833:13:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IStakeManager_$6284",
                                            "typeString": "contract IStakeManager"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4387,
                                    "mutability": "mutable",
                                    "name": "_penalizer",
                                    "nameLocation": "878:10:6",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4415,
                                    "src": "870:18:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4386,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "870:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4389,
                                    "mutability": "mutable",
                                    "name": "_batchGateway",
                                    "nameLocation": "906:13:6",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4415,
                                    "src": "898:21:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4388,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "898:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4391,
                                    "mutability": "mutable",
                                    "name": "_relayRegistrar",
                                    "nameLocation": "937:15:6",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4415,
                                    "src": "929:23:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4390,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "929:7:6",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4394,
                                    "mutability": "mutable",
                                    "name": "_config",
                                    "nameLocation": "984:7:6",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4415,
                                    "src": "962:29:6",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayHubConfig_$5556_memory_ptr",
                                        "typeString": "struct IRelayHub.RelayHubConfig"
                                    },
                                    "typeName": {
                                        "id": 4393,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 4392,
                                            "name": "RelayHubConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 5556,
                                            "src": "962:14:6"
                                        },
                                        "referencedDeclaration": 5556,
                                        "src": "962:14:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayHubConfig_$5556_storage_ptr",
                                            "typeString": "struct IRelayHub.RelayHubConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "799:198:6"
                        },
                        "returnParameters": {
                            "id": 4403,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1074:0:6"
                        },
                        "scope": 4450,
                        "src": "788:372:6",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            1410
                        ],
                        "body": {
                            "id": 4424,
                            "nodeType": "Block",
                            "src": "1351:40:6",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 4422,
                                        "name": "arbCreationBlock",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4378,
                                        "src": "1368:16:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 4421,
                                    "id": 4423,
                                    "nodeType": "Return",
                                    "src": "1361:23:6"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4416,
                            "nodeType": "StructuredDocumentation",
                            "src": "1166:104:6",
                            "text": "@inheritdoc IRelayHub\n @notice Uses `ArbSys` L2 block number specific to the Arbitrum Rollup."
                        },
                        "functionSelector": "20ffd56d",
                        "id": 4425,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getCreationBlock",
                        "nameLocation": "1284:16:6",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4418,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1312:8:6"
                        },
                        "parameters": {
                            "id": 4417,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1300:2:6"
                        },
                        "returnParameters": {
                            "id": 4421,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4420,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4425,
                                    "src": "1343:7:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4419,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1343:7:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1342:9:6"
                        },
                        "scope": 4450,
                        "src": "1275:116:6",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 4433,
                            "nodeType": "Block",
                            "src": "1579:37:6",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 4431,
                                        "name": "creationBlock",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1352,
                                        "src": "1596:13:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 4430,
                                    "id": 4432,
                                    "nodeType": "Return",
                                    "src": "1589:20:6"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4426,
                            "nodeType": "StructuredDocumentation",
                            "src": "1397:116:6",
                            "text": "@return The block number in which the contract has been deployed.\n @notice Uses original L1 block number."
                        },
                        "functionSelector": "c5c98a1a",
                        "id": 4434,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getL1CreationBlock",
                        "nameLocation": "1527:18:6",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4427,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1545:2:6"
                        },
                        "returnParameters": {
                            "id": 4430,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4429,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4434,
                                    "src": "1571:7:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4428,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1571:7:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1570:9:6"
                        },
                        "scope": 4450,
                        "src": "1518:98:6",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3329
                        ],
                        "body": {
                            "id": 4448,
                            "nodeType": "Block",
                            "src": "1802:67:6",
                            "statements": [
                                {
                                    "expression": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 4446,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "arguments": [],
                                            "expression": {
                                                "argumentTypes": [],
                                                "expression": {
                                                    "id": 4441,
                                                    "name": "arbsys",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4376,
                                                    "src": "1819:6:6",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_ArbSys_$4466",
                                                        "typeString": "contract ArbSys"
                                                    }
                                                },
                                                "id": 4442,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "getStorageGasAvailable",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 4465,
                                                "src": "1819:29:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                                    "typeString": "function () view external returns (uint256)"
                                                }
                                            },
                                            "id": 4443,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1819:31:6",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                            "arguments": [],
                                            "expression": {
                                                "argumentTypes": [],
                                                "id": 4444,
                                                "name": "gasleft",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967289,
                                                "src": "1853:7:6",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                                    "typeString": "function () view returns (uint256)"
                                                }
                                            },
                                            "id": 4445,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1853:9:6",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "1819:43:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 4440,
                                    "id": 4447,
                                    "nodeType": "Return",
                                    "src": "1812:50:6"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 4435,
                            "nodeType": "StructuredDocumentation",
                            "src": "1622:101:6",
                            "text": "@notice Includes the 'storage gas' specific to the Arbitrum Rollup.\n @inheritdoc IRelayHub"
                        },
                        "functionSelector": "45bdade7",
                        "id": 4449,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "aggregateGasleft",
                        "nameLocation": "1737:16:6",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4437,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1763:8:6"
                        },
                        "parameters": {
                            "id": 4436,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1753:2:6"
                        },
                        "returnParameters": {
                            "id": 4440,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4439,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4449,
                                    "src": "1794:7:6",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4438,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1794:7:6",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1793:9:6"
                        },
                        "scope": 4450,
                        "src": "1728:141:6",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "public"
                    }
                ],
                "scope": 4451,
                "src": "401:1470:6",
                "usedErrors": []
            }
        ],
        "src": "0:1871:6"
    },
    "compiler": {
        "name": "solc",
        "version": "0.8.7+commit.e28d00a7.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2023-03-16T16:54:15.184Z",
    "devdoc": {
        "kind": "dev",
        "methods": {
            "aggregateGasleft()": {
                "returns": {
                    "_0": "A total measurable amount of gas left to current execution. Same as 'gasleft()' for pure EVMs."
                }
            },
            "balanceOf(address)": {
                "returns": {
                    "_0": "An account's balance. It can be either a deposit of a `Paymaster`, or a revenue of a Relay Manager."
                }
            },
            "calculateCharge(uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))": {
                "params": {
                    "gasUsed": "An amount of gas used by the transaction.",
                    "relayData": "The details of a transaction signed by the sender."
                },
                "returns": {
                    "_0": "The calculated charge, in wei."
                }
            },
            "calculateDevCharge(uint256)": {
                "params": {
                    "charge": "The amount of Ether in wei the Paymaster will be charged for this transaction."
                },
                "returns": {
                    "_0": "The calculated devFee, in wei."
                }
            },
            "deprecateHub(uint256)": {
                "params": {
                    "_deprecationTime": "The timestamp in seconds after which the `RelayHub` stops serving transactions."
                }
            },
            "getBatchGateway()": {
                "returns": {
                    "_0": "The `BatchGateway` address for this `RelayHub`."
                }
            },
            "getConfiguration()": {
                "returns": {
                    "_0": "The configuration of the `RelayHub`."
                }
            },
            "getCreationBlock()": {
                "returns": {
                    "_0": "The block number in which the contract has been deployed."
                }
            },
            "getDeprecationTime()": {
                "returns": {
                    "_0": "The timestamp from which the hub no longer allows relaying calls."
                }
            },
            "getL1CreationBlock()": {
                "returns": {
                    "_0": "The block number in which the contract has been deployed."
                }
            },
            "getMinimumStakePerToken(address)": {
                "params": {
                    "token": "An address of an ERC-20 compatible tokens."
                },
                "returns": {
                    "_0": "The minimum amount of a given `token` that needs to be staked so that the Relay Manager is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking."
                }
            },
            "getPenalizer()": {
                "returns": {
                    "_0": "The `Penalizer` address for this `RelayHub`."
                }
            },
            "getRelayRegistrar()": {
                "returns": {
                    "_0": "The `RelayRegistrar` address for this `RelayHub`."
                }
            },
            "getStakeManager()": {
                "returns": {
                    "_0": "The `StakeManager` address for this `RelayHub`."
                }
            },
            "getWorkerCount(address)": {
                "params": {
                    "manager": "An address of the Relay Manager."
                },
                "returns": {
                    "_0": "The count of Relay Workers associated with this Relay Manager."
                }
            },
            "getWorkerManager(address)": {
                "params": {
                    "worker": "An address of the Relay Worker."
                },
                "returns": {
                    "_0": "The address of its Relay Manager."
                }
            },
            "isDeprecated()": {
                "returns": {
                    "_0": "`true` if the `RelayHub` is deprecated, `false` it it is not deprecated and can serve transactions."
                }
            },
            "owner()": {
                "details": "Returns the address of the current owner."
            },
            "penalize(address,address)": {
                "params": {
                    "beneficiary": "The address that called the `Penalizer` and will receive a reward for it.",
                    "relayWorker": "The address of the Relay Worker that committed a penalizable offense."
                }
            },
            "relayCall(string,uint256,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes)": {
                "params": {
                    "approvalData": "The dapp-specific data forwarded to the `Paymaster`'s `preRelayedCall` method. This value is **not** verified by the `RelayHub` in any way. As an example, it can be used to pass some kind of a third-party signature to the `Paymaster` for verification. Emits a `TransactionRelayed` event regardless of whether the transaction succeeded or failed.",
                    "domainSeparatorName": "The name of the Domain Separator used to verify the EIP-712 signature",
                    "maxAcceptanceBudget": "The maximum valid value for `paymaster.getGasLimits().acceptanceBudget` to return.",
                    "relayRequest": "All details of the requested relayed call.",
                    "signature": "The client's EIP-712 signature over the `relayRequest` struct."
                }
            },
            "renounceOwnership()": {
                "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
            },
            "setConfiguration((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))": {
                "params": {
                    "_config": "The new configuration."
                }
            },
            "setMinimumStakes(address[],uint256[])": {
                "params": {
                    "minimumStake": "An array of minimal amounts necessary for a corresponding token, in wei.",
                    "token": "An array of addresses of ERC-20 compatible tokens."
                }
            },
            "supportsInterface(bytes4)": {
                "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas."
            },
            "transferOwnership(address)": {
                "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
            },
            "versionHub()": {
                "returns": {
                    "_0": "a SemVer-compliant version of the `RelayHub` contract."
                }
            }
        },
        "title": "The RelayHub Implementation for Arbitrum",
        "version": 1
    },
    "userdoc": {
        "events": {
            "AbandonedRelayManagerBalanceEscheated(address,uint256)": {
                "notice": "This event is emitted in case a `relayManager` has been deemed \"abandoned\" for being unresponsive for a prolonged period of time.This event means the entire balance of the relay has been transferred to the `devAddress`."
            },
            "Deposited(address,address,uint256)": {
                "notice": "Emitted when `depositFor` is called, including the amount and account that was funded."
            },
            "HubDeprecated(uint256)": {
                "notice": "This event is emitted in case this `RelayHub` is deprecated and will stop serving transactions soon."
            },
            "RelayHubConfigured((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))": {
                "notice": "Emitted when a configuration of the `RelayHub` is changed"
            },
            "RelayWorkersAdded(address,address[],uint256)": {
                "notice": "Emitted when relays are added by a relayManager"
            },
            "StakingTokenDataChanged(address,uint256)": {
                "notice": "Emitted for each token configured for staking in setMinimumStakes"
            },
            "TransactionRejectedByPaymaster(address,address,bytes32,address,address,address,bytes4,uint256,bytes)": {
                "notice": "Emitted when an attempt to relay a call fails and the `Paymaster` does not accept the transaction. The actual relayed call was not executed, and the recipient not charged."
            },
            "TransactionRelayed(address,address,bytes32,address,address,address,bytes4,uint8,uint256)": {
                "notice": "Emitted when a transaction is relayed. Note that the actual internal function call might be reverted. The reason for a revert will be indicated in the `status` field of a corresponding `RelayCallStatus` value.`charge` is the Ether value deducted from the `Paymaster` balance. The amount added to the `relayManager` balance will be lower if there is an activated `devFee` in the `config`."
            },
            "TransactionResult(uint8,bytes)": {
                "notice": "This event is emitted in case the internal function returns a value or reverts with a revert string."
            },
            "Withdrawn(address,address,uint256)": {
                "notice": "Emitted when an account withdraws funds from the `RelayHub`."
            }
        },
        "kind": "user",
        "methods": {
            "addRelayWorkers(address[])": {
                "notice": "Add new worker addresses controlled by the sender who must be a staked Relay Manager address. Emits a `RelayWorkersAdded` event. This function can be called multiple times, emitting new events."
            },
            "aggregateGasleft()": {
                "notice": "Includes the 'storage gas' specific to the Arbitrum Rollup."
            },
            "calculateCharge(uint256,(uint256,uint256,uint256,address,address,address,bytes,uint256))": {
                "notice": "The fee is expressed as a base fee in wei plus percentage of the actual charge. For example, a value '40' stands for a 40% fee, so the recipient will be charged for 1.4 times the spent amount."
            },
            "calculateDevCharge(uint256)": {
                "notice": "The fee is expressed as a  percentage of the actual charge. For example, a value '40' stands for a 40% fee, so the Relay Manager will only get 60% of the `charge`."
            },
            "constructor": {
                "notice": "we accept the `ArbSys` address in the constructor to allow mocking it in tests."
            },
            "depositFor(address)": {
                "notice": "Deposits ether for a `Paymaster`, so that it can and pay for relayed transactions. :warning: **Warning** :warning: Unused balance can only be withdrawn by the holder itself, by calling `withdraw`. Emits a `Deposited` event."
            },
            "deprecateHub(uint256)": {
                "notice": "Deprecate hub by reverting all incoming `relayCall()` calls starting from a given timestamp"
            },
            "escheatAbandonedRelayBalance(address)": {
                "notice": "@param relayManager"
            },
            "getCreationBlock()": {
                "notice": "Uses `ArbSys` L2 block number specific to the Arbitrum Rollup."
            },
            "getL1CreationBlock()": {
                "notice": "Uses original L1 block number."
            },
            "innerRelayCall(string,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes,(uint256,uint256,uint256,uint256),uint256,uint256)": {
                "notice": "This method can only by called by this `RelayHub`. It wraps the execution of the `RelayRequest` in a revertable frame context."
            },
            "isRelayEscheatable(address)": {
                "notice": "Uses `StakeManager` to check if the Relay Manager can be considered abandoned or not. Returns true if the stake's abandonment time is in the past including the escheatment delay, false otherwise."
            },
            "onRelayServerRegistered(address)": {
                "notice": "The `RelayRegistrar` callback to notify the `RelayHub` that this `relayManager` has updated registration."
            },
            "penalize(address,address)": {
                "notice": "In case the Relay Worker has been found to be in violation of some rules by the `Penalizer` contract, the `Penalizer` will call this method to execute a penalization. The `RelayHub` will look up the Relay Manager of the given Relay Worker and will forward the call to the `StakeManager` contract. The `RelayHub` does not perform the actual penalization either."
            },
            "relayCall(string,uint256,((address,address,uint256,uint256,uint256,bytes,uint256),(uint256,uint256,uint256,address,address,address,bytes,uint256)),bytes,bytes)": {
                "notice": "Relays a transaction. For this to succeed, multiple conditions must be met:  - `Paymaster`'s `preRelayCall` method must succeed and not revert.  - the `msg.sender` must be a registered Relay Worker that the user signed to use.  - the transaction's gas fees must be equal or larger than the ones that were signed by the sender.  - the transaction must have enough gas to run all internal transactions if they use all gas available to them.  - the `Paymaster` must have enough balance to pay the Relay Worker if all gas is spent.If all conditions are met, the call will be relayed and the `Paymaster` charged."
            },
            "setConfiguration((uint256,uint256,uint256,uint256,uint256,address,uint8,uint80,uint16))": {
                "notice": "Sets or changes the configuration of this `RelayHub`."
            },
            "setMinimumStakes(address[],uint256[])": {
                "notice": "Sets or changes the minimum amount of a given `token` that needs to be staked so that the Relay Manager is considered to be 'staked' by this `RelayHub`. Zero value means this token is not allowed for staking."
            },
            "verifyRelayManagerStaked(address)": {
                "notice": "Uses `StakeManager` to decide if the Relay Manager can be considered staked or not. Returns if the stake's token, amount and delay satisfy all requirements, reverts otherwise."
            },
            "withdraw(address,uint256)": {
                "notice": "Withdraws from an account's balance, sending it back to the caller. Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding. Emits a `Withdrawn` event."
            },
            "withdrawMultiple(address[],uint256[])": {
                "notice": "Withdraws from an account's balance, sending funds to multiple provided addresses. Relay Managers call this to retrieve their revenue, and `Paymasters` can also use it to reduce their funding. Emits a `Withdrawn` event for each destination."
            }
        },
        "notice": "This contract implements the `IRelayHub` interface for the Arbitrum-compatible Rollups.This implementation relies on the `ArbSys` built-ins that do not exist outside of Arbitrum.",
        "version": 1
    }
}
