{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "log",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "log_address",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "val",
          "type": "uint256[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256[]",
          "name": "val",
          "type": "int256[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "val",
          "type": "address[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "log_bytes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "log_bytes32",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "name": "log_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "val",
          "type": "address"
        }
      ],
      "name": "log_named_address",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "val",
          "type": "uint256[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256[]",
          "name": "val",
          "type": "int256[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "val",
          "type": "address[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "val",
          "type": "bytes"
        }
      ],
      "name": "log_named_bytes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "val",
          "type": "bytes32"
        }
      ],
      "name": "log_named_bytes32",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "val",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decimals",
          "type": "uint256"
        }
      ],
      "name": "log_named_decimal_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decimals",
          "type": "uint256"
        }
      ],
      "name": "log_named_decimal_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "val",
          "type": "int256"
        }
      ],
      "name": "log_named_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "val",
          "type": "string"
        }
      ],
      "name": "log_named_string",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        }
      ],
      "name": "log_named_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "log_string",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "log_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "logs",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "IS_SCRIPT",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "IS_TEST",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "failed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setUp",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_enrollRemoteRouter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "newDomain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "newRouter",
          "type": "bytes32"
        }
      ],
      "name": "test_enrollRemoteRouterFuzzed",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_enrollRemoteRouterOnlyOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "test_enrollRemoteRouterOnlyOwnerFuzzed",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_isRemoteRouter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "routerAddress",
          "type": "bytes32"
        }
      ],
      "name": "test_isRemoteRouterFuzzed",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_mustHaveRemote",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        }
      ],
      "name": "test_mustHaveRemoteFuzzed",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "vm",
      "outputs": [
        {
          "internalType": "contract Vm",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60806040526000805462ff00001960ff19909116600117166201000017905534801561002a57600080fd5b5061304b8061003a6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063b8a979c61161008c578063c50e1df011610066578063c50e1df0146101b7578063d32636e3146101da578063f8ccbf4714610203578063fa7626d41461020b576100df565b8063b8a979c61461016a578063ba414fa614610193578063c2a76e2a146101af576100df565b80633a768463116100bd5780633a768463146100fe5780638aa399491461012f5780639ae7ca2e14610137576100df565b8063034faeab146100e45780630a9254e4146100ee5780630ec27ca0146100f6575b600080fd5b6100ec610213565b005b6100ec61077c565b6100ec6109d9565b610106610bbf565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100ec610bd7565b6100ec6004803603602081101561014d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611064565b6100ec6004803603604081101561018057600080fd5b5063ffffffff813516906020013561139f565b61019b61141e565b604080519115158252519081900360200190f35b6100ec611650565b6100ec600480360360208110156101cd57600080fd5b503563ffffffff166118db565b6100ec600480360360408110156101f057600080fd5b5063ffffffff8135169060200135611a32565b61019b611b7e565b61019b611b8d565b600854600954604080517fb49c53a700000000000000000000000000000000000000000000000000000000815263ffffffff74010000000000000000000000000000000000000000850416600482015260248101929092525173ffffffffffffffffffffffffffffffffffffffff9092169163b49c53a79160448082019260009290919082900301818387803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050600854604080517fc3578c2e00000000000000000000000000000000000000000000000000000000815263ffffffff7401000000000000000000000000000000000000000084041660048201529051610389945073ffffffffffffffffffffffffffffffffffffffff909216925063c3578c2e916024808301926020929190829003018186803b15801561035557600080fd5b505afa158015610369573d6000803e3d6000fd5b505050506040513d602081101561037f57600080fd5b5051600954611b96565b604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f74650000000000000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480830192600092919082900301818387803b15801561042257600080fd5b505af1158015610436573d6000803e3d6000fd5b5050600854604080517fc3578c2e0000000000000000000000000000000000000000000000000000000081526101576004820152905173ffffffffffffffffffffffffffffffffffffffff909216935063c3578c2e9250602480820192602092909190829003018186803b1580156104ad57600080fd5b505afa1580156104c1573d6000803e3d6000fd5b505050506040513d60208110156104d757600080fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f74650000000000000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480830192600092919082900301818387803b15801561057257600080fd5b505af1158015610586573d6000803e3d6000fd5b5050600854604080517fc3578c2e00000000000000000000000000000000000000000000000000000000815260006004820152905173ffffffffffffffffffffffffffffffffffffffff909216935063c3578c2e9250602480820192602092909190829003018186803b1580156105fc57600080fd5b505afa158015610610573d6000803e3d6000fd5b505050506040513d602081101561062657600080fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f74650000000000000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480830192600092919082900301818387803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b5050600854604080517fc3578c2e00000000000000000000000000000000000000000000000000000000815263ffffffff6004820152905173ffffffffffffffffffffffffffffffffffffffff909216935063c3578c2e9250602480820192602092909190829003018186803b15801561074e57600080fd5b505afa158015610762573d6000803e3d6000fd5b505050506040513d602081101561077857600080fd5b5050565b60405161078890611f76565b604051809103906000f0801580156107a4573d6000803e3d6000fd5b50600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000606f6040516107f590611f83565b63ffffffff909116815260405190819003602001906000f08015801561081f573d6000803e3d6000fd5b50600854604080517fbac00be100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085166004830152915193945091169163bac00be19160248082019260009290919082900301818387803b15801561089657600080fd5b505af11580156108aa573d6000803e3d6000fd5b5050600880547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167601e14d000000000000000000000000000000000000000017908190557f726f757465722061646472657373000000000000000000000000000000000000600955604080517f83bbb80600000000000000000000000000000000000000000000000000000000815263ffffffff74010000000000000000000000000000000000000000840416600482015290516109d6945073ffffffffffffffffffffffffffffffffffffffff90921692506383bbb806916024808301926020929190829003018186803b1580156109a357600080fd5b505afa1580156109b7573d6000803e3d6000fd5b505050506040513d60208110156109cd57600080fd5b50516000611b96565b50565b600854604080517f83bbb806000000000000000000000000000000000000000000000000000000008152600c60048201819052915191927f307842454546000000000000000000000000000000000000000000000000000092610a749273ffffffffffffffffffffffffffffffffffffffff909216916383bbb806916024808301926020929190829003018186803b1580156109a357600080fd5b600854604080517f3e4332d800000000000000000000000000000000000000000000000000000000815263ffffffff85166004820152602481018490529051610b249273ffffffffffffffffffffffffffffffffffffffff1691633e4332d8916044808301926020929190829003018186803b158015610af357600080fd5b505afa158015610b07573d6000803e3d6000fd5b505050506040513d6020811015610b1d57600080fd5b5051611cbc565b600854604080517fb49c53a700000000000000000000000000000000000000000000000000000000815263ffffffff8516600482015260248101849052905173ffffffffffffffffffffffffffffffffffffffff9092169163b49c53a79160448082019260009290919082900301818387803b158015610ba357600080fd5b505af1158015610bb7573d6000803e3d6000fd5b505050505050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d81565b600854600954604080517fb49c53a700000000000000000000000000000000000000000000000000000000815263ffffffff74010000000000000000000000000000000000000000850416600482015260248101929092525173ffffffffffffffffffffffffffffffffffffffff9092169163b49c53a79160448082019260009290919082900301818387803b158015610c7057600080fd5b505af1158015610c84573d6000803e3d6000fd5b5050600854600954604080517f3e4332d800000000000000000000000000000000000000000000000000000000815263ffffffff74010000000000000000000000000000000000000000850416600482015260248101929092525173ffffffffffffffffffffffffffffffffffffffff9092169350633e4332d89250604480820192602092909190829003018186803b158015610d2057600080fd5b505afa158015610d34573d6000803e3d6000fd5b505050506040513d6020811015610d4a57600080fd5b5051610d5257fe5b600854604080517f3e4332d8000000000000000000000000000000000000000000000000000000008152610157600482015260006024820152905173ffffffffffffffffffffffffffffffffffffffff90921691633e4332d891604480820192602092909190829003018186803b158015610dcc57600080fd5b505afa158015610de0573d6000803e3d6000fd5b505050506040513d6020811015610df657600080fd5b505115610dff57fe5b600854600954604080517f3e4332d8000000000000000000000000000000000000000000000000000000008152610157600482015260248101929092525173ffffffffffffffffffffffffffffffffffffffff90921691633e4332d891604480820192602092909190829003018186803b158015610e7c57600080fd5b505afa158015610e90573d6000803e3d6000fd5b505050506040513d6020811015610ea657600080fd5b505115610eaf57fe5b600854604080517f3e4332d800000000000000000000000000000000000000000000000000000000815263ffffffff7401000000000000000000000000000000000000000084041660048201527f6e6f74206120726f7574657200000000000000000000000000000000000000006024820152905173ffffffffffffffffffffffffffffffffffffffff90921691633e4332d891604480820192602092909190829003018186803b158015610f6357600080fd5b505afa158015610f77573d6000803e3d6000fd5b505050506040513d6020811015610f8d57600080fd5b505115610f9657fe5b600854604080517f3e4332d800000000000000000000000000000000000000000000000000000000815261015760048201527f6e6f74206120726f7574657200000000000000000000000000000000000000006024820152905173ffffffffffffffffffffffffffffffffffffffff90921691633e4332d891604480820192602092909190829003018186803b15801561102f57600080fd5b505afa158015611043573d6000803e3d6000fd5b505050506040513d602081101561105957600080fd5b50511561106257fe5b565b600854604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051737109709ecfa91a80626ff3989d68f67f5b1dd12d92634c63e5629273ffffffffffffffffffffffffffffffffffffffff90911691638da5cb5b91600480820192602092909190829003018186803b1580156110eb57600080fd5b505afa1580156110ff573d6000803e3d6000fd5b505050506040513d602081101561111557600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff86811693169290921415600483015251602480830192600092919082900301818387803b15801561118957600080fd5b505af115801561119d573d6000803e3d6000fd5b5050604080517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d93506306447d569250602480830192600092919082900301818387803b15801561122257600080fd5b505af1158015611236573d6000803e3d6000fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250606480830192600092919082900301818387803b1580156112d357600080fd5b505af11580156112e7573d6000803e3d6000fd5b5050600854600954604080517fb49c53a700000000000000000000000000000000000000000000000000000000815263ffffffff74010000000000000000000000000000000000000000850416600482015260248101929092525173ffffffffffffffffffffffffffffffffffffffff909216935063b49c53a7925060448082019260009290919082900301818387803b15801561138457600080fd5b505af1158015611398573d6000803e3d6000fd5b5050505050565b600854604080517f3e4332d800000000000000000000000000000000000000000000000000000000815263ffffffff851660048201526024810184905290516107789273ffffffffffffffffffffffffffffffffffffffff1691633e4332d8916044808301926020929190829003018186803b158015610af357600080fd5b60008054610100900460ff16156114405750600054610100900460ff1661164d565b600061144a611cc6565b1561164a5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d60208083018290527f6661696c6564000000000000000000000000000000000000000000000000000083850152835180840385018152606084019094527f667f9d700000000000000000000000000000000000000000000000000000000060808401908152845160009593947f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49493608490910191908401908083835b6020831061154257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611505565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106115c457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611587565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611626576040519150601f19603f3d011682016040523d82523d6000602084013e61162b565b606091505b5091505080806020019051602081101561164457600080fd5b50519150505b90505b90565b604080517fffa1864900000000000000000000000000000000000000000000000000000000815263496318ff60048201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d5691839163ffa186499160248083019260209291908290030181600087803b1580156116c857600080fd5b505af11580156116dc573d6000803e3d6000fd5b505050506040513d60208110156116f257600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015251602480830192600092919082900301818387803b15801561175f57600080fd5b505af1158015611773573d6000803e3d6000fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250606480830192600092919082900301818387803b15801561181057600080fd5b505af1158015611824573d6000803e3d6000fd5b5050600854600954604080517fb49c53a700000000000000000000000000000000000000000000000000000000815263ffffffff74010000000000000000000000000000000000000000850416600482015260248101929092525173ffffffffffffffffffffffffffffffffffffffff909216935063b49c53a7925060448082019260009290919082900301818387803b1580156118c157600080fd5b505af11580156118d5573d6000803e3d6000fd5b50505050565b604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f74650000000000000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480830192600092919082900301818387803b15801561197457600080fd5b505af1158015611988573d6000803e3d6000fd5b5050600854604080517fc3578c2e00000000000000000000000000000000000000000000000000000000815263ffffffff86166004820152905173ffffffffffffffffffffffffffffffffffffffff909216935063c3578c2e9250602480820192602092909190829003018186803b158015611a0357600080fd5b505afa158015611a17573d6000803e3d6000fd5b505050506040513d6020811015611a2d57600080fd5b505050565b63ffffffff8216606f1480611a4b575063ffffffff8216155b15611b0657604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21646f6d61696e0000000000000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480830192600092919082900301818387803b158015611ae957600080fd5b505af1158015611afd573d6000803e3d6000fd5b50505050610b24565b600854604080517f83bbb80600000000000000000000000000000000000000000000000000000000815263ffffffff851660048201529051610a749273ffffffffffffffffffffffffffffffffffffffff16916383bbb806916024808301926020929190829003018186803b1580156109a357600080fd5b60005462010000900460ff1681565b60005460ff1681565b808214610778577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405180806020018281038252602581526020018061301a6025913960400191505060405180910390a16040805160208101839052818152600a818301527f2020457870656374656400000000000000000000000000000000000000000000606082015290517fafb795c9c61e4fe7468c386f925d7a5429ecad9c0495ddb8d38d690614d32f999181900360800190a16040805160208101849052818152600a818301527f2020202041637475616c00000000000000000000000000000000000000000000606082015290517fafb795c9c61e4fe7468c386f925d7a5429ecad9c0495ddb8d38d690614d32f999181900360800190a1610778611ce1565b6109d68115611f09565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b151590565b611ce9611cc6565b15611edb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d60208083018290527f6661696c6564000000000000000000000000000000000000000000000000000083850152600160608481019190915284518085039091018152608084019094527f70ca10bb0000000000000000000000000000000000000000000000000000000060a08401908152845160009593947f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc4949360a490910191908401908083835b60208310611ded57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611db0565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b60208310611e6f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611e32565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611ed1576040519150601f19603f3d011682016040523d82523d6000602084013e611ed6565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b806109d6576040805160208082526017908201527f4572726f723a20417373657274696f6e204661696c65640000000000000000008183015290517f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f509181900360600190a16109d6611ce1565b610fac80611f9083390190565b60de80612f3c8339019056fe608060405234801561001057600080fd5b50610f8c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80638da5cb5b11610081578063bac00be11161005b578063bac00be1146102a2578063c3578c2e146102d5578063f2fde38b146102f8576100c9565b80638da5cb5b146101ae578063ab2dc3f5146101b6578063b49c53a714610279576100c9565b806341bdc8b5116100b257806341bdc8b51461013c578063715018a61461017157806383bbb80614610179576100c9565b80633339df96146100ce5780633e4332d8146100ff575b600080fd5b6100d661032b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101286004803603604081101561011557600080fd5b5063ffffffff8135169060200135610347565b604080519115158252519081900360200190f35b61016f6004803603602081101561015257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661035a565b005b61016f610449565b61019c6004803603602081101561018f57600080fd5b503563ffffffff16610560565b60408051918252519081900360200190f35b6100d6610572565b61016f600480360360808110156101cc57600080fd5b63ffffffff82358116926020810135909116916040820135919081019060808101606082013564010000000081111561020457600080fd5b82018360208201111561021657600080fd5b8035906020019184600183028401116401000000008311171561023857600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061058e945050505050565b61016f6004803603604081101561028f57600080fd5b5063ffffffff8135169060200135610594565b61016f600480360360208110156102b857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106e8565b61019c600480360360208110156102eb57600080fd5b503563ffffffff166106f4565b61016f6004803603602081101561030e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610707565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b600061035383836108a9565b9392505050565b6103626108d0565b73ffffffffffffffffffffffffffffffffffffffff16610380610572565b73ffffffffffffffffffffffffffffffffffffffff161461040257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6104516108d0565b73ffffffffffffffffffffffffffffffffffffffff1661046f610572565b73ffffffffffffffffffffffffffffffffffffffff16146104f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60335460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60976020526000908152604090205481565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b50505050565b61059c6108d0565b73ffffffffffffffffffffffffffffffffffffffff166105ba610572565b73ffffffffffffffffffffffffffffffffffffffff161461063c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6106446108d4565b63ffffffff168263ffffffff1614158015610664575063ffffffff821615155b6106cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21646f6d61696e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff909116600090815260976020526040902055565b6106f181610970565b50565b60006106ff82610acd565b90505b919050565b61070f6108d0565b73ffffffffffffffffffffffffffffffffffffffff1661072d610572565b73ffffffffffffffffffffffffffffffffffffffff16146107af57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661081b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180610f2c6026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b63ffffffff8216600090815260976020526040812054821480156103535750501515919050565b3390565b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561093f57600080fd5b505afa158015610953573d6000803e3d6000fd5b505050506040513d602081101561096957600080fd5b5051905090565b600054610100900460ff16806109895750610989610b4f565b80610997575060005460ff16155b6109ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610f52602e913960400191505060405180910390fd5b600054610100900460ff16158015610a5257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055610a9a610b60565b8015610ac957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b63ffffffff81166000908152609760205260409020548061070257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f746500000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610b5a30610c83565b15905090565b600054610100900460ff1680610b795750610b79610b4f565b80610b87575060005460ff16155b610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610f52602e913960400191505060405180910390fd5b600054610100900460ff16158015610c4257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b610c4a610c89565b610c52610d9b565b80156106f157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b3b151590565b600054610100900460ff1680610ca25750610ca2610b4f565b80610cb0575060005460ff16155b610d05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610f52602e913960400191505060405180910390fd5b600054610100900460ff16158015610c5257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091166101001716600117905580156106f157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680610db45750610db4610b4f565b80610dc2575060005460ff16155b610e17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610f52602e913960400191505060405180910390fd5b600054610100900460ff16158015610e7d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000610e876108d0565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156106f157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a164736f6c6343000706000a60a060405234801561001057600080fd5b506040516100de3803806100de8339818101604052602081101561003357600080fd5b505160e081901b6001600160e01b03191660805263ffffffff16607d61006160003980604e5250607d6000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80638d3638f414602d575b600080fd5b6033604c565b6040805163ffffffff9092168252519081900360200190f35b7f00000000000000000000000000000000000000000000000000000000000000009056fea164736f6c6343000706000a4572726f723a2061203d3d2062206e6f7420736174697366696564205b627974657333325da164736f6c6343000706000a",
    "sourceMap": "356:3070:32:-:0;;;1572:26:0;;;-1:-1:-1;;;;1572:26:0;;;1594:4;1572:26;170:28:1;;;;;356:3070:32;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063b8a979c61161008c578063c50e1df011610066578063c50e1df0146101b7578063d32636e3146101da578063f8ccbf4714610203578063fa7626d41461020b576100df565b8063b8a979c61461016a578063ba414fa614610193578063c2a76e2a146101af576100df565b80633a768463116100bd5780633a768463146100fe5780638aa399491461012f5780639ae7ca2e14610137576100df565b8063034faeab146100e45780630a9254e4146100ee5780630ec27ca0146100f6575b600080fd5b6100ec610213565b005b6100ec61077c565b6100ec6109d9565b610106610bbf565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100ec610bd7565b6100ec6004803603602081101561014d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611064565b6100ec6004803603604081101561018057600080fd5b5063ffffffff813516906020013561139f565b61019b61141e565b604080519115158252519081900360200190f35b6100ec611650565b6100ec600480360360208110156101cd57600080fd5b503563ffffffff166118db565b6100ec600480360360408110156101f057600080fd5b5063ffffffff8135169060200135611a32565b61019b611b7e565b61019b611b8d565b600854600954604080517fb49c53a700000000000000000000000000000000000000000000000000000000815263ffffffff74010000000000000000000000000000000000000000850416600482015260248101929092525173ffffffffffffffffffffffffffffffffffffffff9092169163b49c53a79160448082019260009290919082900301818387803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050600854604080517fc3578c2e00000000000000000000000000000000000000000000000000000000815263ffffffff7401000000000000000000000000000000000000000084041660048201529051610389945073ffffffffffffffffffffffffffffffffffffffff909216925063c3578c2e916024808301926020929190829003018186803b15801561035557600080fd5b505afa158015610369573d6000803e3d6000fd5b505050506040513d602081101561037f57600080fd5b5051600954611b96565b604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f74650000000000000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480830192600092919082900301818387803b15801561042257600080fd5b505af1158015610436573d6000803e3d6000fd5b5050600854604080517fc3578c2e0000000000000000000000000000000000000000000000000000000081526101576004820152905173ffffffffffffffffffffffffffffffffffffffff909216935063c3578c2e9250602480820192602092909190829003018186803b1580156104ad57600080fd5b505afa1580156104c1573d6000803e3d6000fd5b505050506040513d60208110156104d757600080fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f74650000000000000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480830192600092919082900301818387803b15801561057257600080fd5b505af1158015610586573d6000803e3d6000fd5b5050600854604080517fc3578c2e00000000000000000000000000000000000000000000000000000000815260006004820152905173ffffffffffffffffffffffffffffffffffffffff909216935063c3578c2e9250602480820192602092909190829003018186803b1580156105fc57600080fd5b505afa158015610610573d6000803e3d6000fd5b505050506040513d602081101561062657600080fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f74650000000000000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480830192600092919082900301818387803b1580156106c157600080fd5b505af11580156106d5573d6000803e3d6000fd5b5050600854604080517fc3578c2e00000000000000000000000000000000000000000000000000000000815263ffffffff6004820152905173ffffffffffffffffffffffffffffffffffffffff909216935063c3578c2e9250602480820192602092909190829003018186803b15801561074e57600080fd5b505afa158015610762573d6000803e3d6000fd5b505050506040513d602081101561077857600080fd5b5050565b60405161078890611f76565b604051809103906000f0801580156107a4573d6000803e3d6000fd5b50600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000606f6040516107f590611f83565b63ffffffff909116815260405190819003602001906000f08015801561081f573d6000803e3d6000fd5b50600854604080517fbac00be100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085166004830152915193945091169163bac00be19160248082019260009290919082900301818387803b15801561089657600080fd5b505af11580156108aa573d6000803e3d6000fd5b5050600880547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167601e14d000000000000000000000000000000000000000017908190557f726f757465722061646472657373000000000000000000000000000000000000600955604080517f83bbb80600000000000000000000000000000000000000000000000000000000815263ffffffff74010000000000000000000000000000000000000000840416600482015290516109d6945073ffffffffffffffffffffffffffffffffffffffff90921692506383bbb806916024808301926020929190829003018186803b1580156109a357600080fd5b505afa1580156109b7573d6000803e3d6000fd5b505050506040513d60208110156109cd57600080fd5b50516000611b96565b50565b600854604080517f83bbb806000000000000000000000000000000000000000000000000000000008152600c60048201819052915191927f307842454546000000000000000000000000000000000000000000000000000092610a749273ffffffffffffffffffffffffffffffffffffffff909216916383bbb806916024808301926020929190829003018186803b1580156109a357600080fd5b600854604080517f3e4332d800000000000000000000000000000000000000000000000000000000815263ffffffff85166004820152602481018490529051610b249273ffffffffffffffffffffffffffffffffffffffff1691633e4332d8916044808301926020929190829003018186803b158015610af357600080fd5b505afa158015610b07573d6000803e3d6000fd5b505050506040513d6020811015610b1d57600080fd5b5051611cbc565b600854604080517fb49c53a700000000000000000000000000000000000000000000000000000000815263ffffffff8516600482015260248101849052905173ffffffffffffffffffffffffffffffffffffffff9092169163b49c53a79160448082019260009290919082900301818387803b158015610ba357600080fd5b505af1158015610bb7573d6000803e3d6000fd5b505050505050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d81565b600854600954604080517fb49c53a700000000000000000000000000000000000000000000000000000000815263ffffffff74010000000000000000000000000000000000000000850416600482015260248101929092525173ffffffffffffffffffffffffffffffffffffffff9092169163b49c53a79160448082019260009290919082900301818387803b158015610c7057600080fd5b505af1158015610c84573d6000803e3d6000fd5b5050600854600954604080517f3e4332d800000000000000000000000000000000000000000000000000000000815263ffffffff74010000000000000000000000000000000000000000850416600482015260248101929092525173ffffffffffffffffffffffffffffffffffffffff9092169350633e4332d89250604480820192602092909190829003018186803b158015610d2057600080fd5b505afa158015610d34573d6000803e3d6000fd5b505050506040513d6020811015610d4a57600080fd5b5051610d5257fe5b600854604080517f3e4332d8000000000000000000000000000000000000000000000000000000008152610157600482015260006024820152905173ffffffffffffffffffffffffffffffffffffffff90921691633e4332d891604480820192602092909190829003018186803b158015610dcc57600080fd5b505afa158015610de0573d6000803e3d6000fd5b505050506040513d6020811015610df657600080fd5b505115610dff57fe5b600854600954604080517f3e4332d8000000000000000000000000000000000000000000000000000000008152610157600482015260248101929092525173ffffffffffffffffffffffffffffffffffffffff90921691633e4332d891604480820192602092909190829003018186803b158015610e7c57600080fd5b505afa158015610e90573d6000803e3d6000fd5b505050506040513d6020811015610ea657600080fd5b505115610eaf57fe5b600854604080517f3e4332d800000000000000000000000000000000000000000000000000000000815263ffffffff7401000000000000000000000000000000000000000084041660048201527f6e6f74206120726f7574657200000000000000000000000000000000000000006024820152905173ffffffffffffffffffffffffffffffffffffffff90921691633e4332d891604480820192602092909190829003018186803b158015610f6357600080fd5b505afa158015610f77573d6000803e3d6000fd5b505050506040513d6020811015610f8d57600080fd5b505115610f9657fe5b600854604080517f3e4332d800000000000000000000000000000000000000000000000000000000815261015760048201527f6e6f74206120726f7574657200000000000000000000000000000000000000006024820152905173ffffffffffffffffffffffffffffffffffffffff90921691633e4332d891604480820192602092909190829003018186803b15801561102f57600080fd5b505afa158015611043573d6000803e3d6000fd5b505050506040513d602081101561105957600080fd5b50511561106257fe5b565b600854604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051737109709ecfa91a80626ff3989d68f67f5b1dd12d92634c63e5629273ffffffffffffffffffffffffffffffffffffffff90911691638da5cb5b91600480820192602092909190829003018186803b1580156110eb57600080fd5b505afa1580156110ff573d6000803e3d6000fd5b505050506040513d602081101561111557600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff86811693169290921415600483015251602480830192600092919082900301818387803b15801561118957600080fd5b505af115801561119d573d6000803e3d6000fd5b5050604080517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d93506306447d569250602480830192600092919082900301818387803b15801561122257600080fd5b505af1158015611236573d6000803e3d6000fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250606480830192600092919082900301818387803b1580156112d357600080fd5b505af11580156112e7573d6000803e3d6000fd5b5050600854600954604080517fb49c53a700000000000000000000000000000000000000000000000000000000815263ffffffff74010000000000000000000000000000000000000000850416600482015260248101929092525173ffffffffffffffffffffffffffffffffffffffff909216935063b49c53a7925060448082019260009290919082900301818387803b15801561138457600080fd5b505af1158015611398573d6000803e3d6000fd5b5050505050565b600854604080517f3e4332d800000000000000000000000000000000000000000000000000000000815263ffffffff851660048201526024810184905290516107789273ffffffffffffffffffffffffffffffffffffffff1691633e4332d8916044808301926020929190829003018186803b158015610af357600080fd5b60008054610100900460ff16156114405750600054610100900460ff1661164d565b600061144a611cc6565b1561164a5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d60208083018290527f6661696c6564000000000000000000000000000000000000000000000000000083850152835180840385018152606084019094527f667f9d700000000000000000000000000000000000000000000000000000000060808401908152845160009593947f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49493608490910191908401908083835b6020831061154257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611505565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106115c457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611587565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611626576040519150601f19603f3d011682016040523d82523d6000602084013e61162b565b606091505b5091505080806020019051602081101561164457600080fd5b50519150505b90505b90565b604080517fffa1864900000000000000000000000000000000000000000000000000000000815263496318ff60048201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d5691839163ffa186499160248083019260209291908290030181600087803b1580156116c857600080fd5b505af11580156116dc573d6000803e3d6000fd5b505050506040513d60208110156116f257600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015251602480830192600092919082900301818387803b15801561175f57600080fd5b505af1158015611773573d6000803e3d6000fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250606480830192600092919082900301818387803b15801561181057600080fd5b505af1158015611824573d6000803e3d6000fd5b5050600854600954604080517fb49c53a700000000000000000000000000000000000000000000000000000000815263ffffffff74010000000000000000000000000000000000000000850416600482015260248101929092525173ffffffffffffffffffffffffffffffffffffffff909216935063b49c53a7925060448082019260009290919082900301818387803b1580156118c157600080fd5b505af11580156118d5573d6000803e3d6000fd5b50505050565b604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f74650000000000000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480830192600092919082900301818387803b15801561197457600080fd5b505af1158015611988573d6000803e3d6000fd5b5050600854604080517fc3578c2e00000000000000000000000000000000000000000000000000000000815263ffffffff86166004820152905173ffffffffffffffffffffffffffffffffffffffff909216935063c3578c2e9250602480820192602092909190829003018186803b158015611a0357600080fd5b505afa158015611a17573d6000803e3d6000fd5b505050506040513d6020811015611a2d57600080fd5b505050565b63ffffffff8216606f1480611a4b575063ffffffff8216155b15611b0657604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21646f6d61696e0000000000000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480830192600092919082900301818387803b158015611ae957600080fd5b505af1158015611afd573d6000803e3d6000fd5b50505050610b24565b600854604080517f83bbb80600000000000000000000000000000000000000000000000000000000815263ffffffff851660048201529051610a749273ffffffffffffffffffffffffffffffffffffffff16916383bbb806916024808301926020929190829003018186803b1580156109a357600080fd5b60005462010000900460ff1681565b60005460ff1681565b808214610778577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405180806020018281038252602581526020018061301a6025913960400191505060405180910390a16040805160208101839052818152600a818301527f2020457870656374656400000000000000000000000000000000000000000000606082015290517fafb795c9c61e4fe7468c386f925d7a5429ecad9c0495ddb8d38d690614d32f999181900360800190a16040805160208101849052818152600a818301527f2020202041637475616c00000000000000000000000000000000000000000000606082015290517fafb795c9c61e4fe7468c386f925d7a5429ecad9c0495ddb8d38d690614d32f999181900360800190a1610778611ce1565b6109d68115611f09565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b151590565b611ce9611cc6565b15611edb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d60208083018290527f6661696c6564000000000000000000000000000000000000000000000000000083850152600160608481019190915284518085039091018152608084019094527f70ca10bb0000000000000000000000000000000000000000000000000000000060a08401908152845160009593947f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc4949360a490910191908401908083835b60208310611ded57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611db0565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b60208310611e6f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611e32565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611ed1576040519150601f19603f3d011682016040523d82523d6000602084013e611ed6565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b806109d6576040805160208082526017908201527f4572726f723a20417373657274696f6e204661696c65640000000000000000008183015290517f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f509181900360600190a16109d6611ce1565b610fac80611f9083390190565b60de80612f3c8339019056fe608060405234801561001057600080fd5b50610f8c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80638da5cb5b11610081578063bac00be11161005b578063bac00be1146102a2578063c3578c2e146102d5578063f2fde38b146102f8576100c9565b80638da5cb5b146101ae578063ab2dc3f5146101b6578063b49c53a714610279576100c9565b806341bdc8b5116100b257806341bdc8b51461013c578063715018a61461017157806383bbb80614610179576100c9565b80633339df96146100ce5780633e4332d8146100ff575b600080fd5b6100d661032b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101286004803603604081101561011557600080fd5b5063ffffffff8135169060200135610347565b604080519115158252519081900360200190f35b61016f6004803603602081101561015257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661035a565b005b61016f610449565b61019c6004803603602081101561018f57600080fd5b503563ffffffff16610560565b60408051918252519081900360200190f35b6100d6610572565b61016f600480360360808110156101cc57600080fd5b63ffffffff82358116926020810135909116916040820135919081019060808101606082013564010000000081111561020457600080fd5b82018360208201111561021657600080fd5b8035906020019184600183028401116401000000008311171561023857600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061058e945050505050565b61016f6004803603604081101561028f57600080fd5b5063ffffffff8135169060200135610594565b61016f600480360360208110156102b857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106e8565b61019c600480360360208110156102eb57600080fd5b503563ffffffff166106f4565b61016f6004803603602081101561030e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610707565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b600061035383836108a9565b9392505050565b6103626108d0565b73ffffffffffffffffffffffffffffffffffffffff16610380610572565b73ffffffffffffffffffffffffffffffffffffffff161461040257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6104516108d0565b73ffffffffffffffffffffffffffffffffffffffff1661046f610572565b73ffffffffffffffffffffffffffffffffffffffff16146104f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60335460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60976020526000908152604090205481565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b50505050565b61059c6108d0565b73ffffffffffffffffffffffffffffffffffffffff166105ba610572565b73ffffffffffffffffffffffffffffffffffffffff161461063c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6106446108d4565b63ffffffff168263ffffffff1614158015610664575063ffffffff821615155b6106cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21646f6d61696e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff909116600090815260976020526040902055565b6106f181610970565b50565b60006106ff82610acd565b90505b919050565b61070f6108d0565b73ffffffffffffffffffffffffffffffffffffffff1661072d610572565b73ffffffffffffffffffffffffffffffffffffffff16146107af57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661081b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180610f2c6026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b63ffffffff8216600090815260976020526040812054821480156103535750501515919050565b3390565b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561093f57600080fd5b505afa158015610953573d6000803e3d6000fd5b505050506040513d602081101561096957600080fd5b5051905090565b600054610100900460ff16806109895750610989610b4f565b80610997575060005460ff16155b6109ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610f52602e913960400191505060405180910390fd5b600054610100900460ff16158015610a5257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055610a9a610b60565b8015610ac957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b63ffffffff81166000908152609760205260409020548061070257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f746500000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610b5a30610c83565b15905090565b600054610100900460ff1680610b795750610b79610b4f565b80610b87575060005460ff16155b610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610f52602e913960400191505060405180910390fd5b600054610100900460ff16158015610c4257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b610c4a610c89565b610c52610d9b565b80156106f157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b3b151590565b600054610100900460ff1680610ca25750610ca2610b4f565b80610cb0575060005460ff16155b610d05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610f52602e913960400191505060405180910390fd5b600054610100900460ff16158015610c5257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091166101001716600117905580156106f157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680610db45750610db4610b4f565b80610dc2575060005460ff16155b610e17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610f52602e913960400191505060405180910390fd5b600054610100900460ff16158015610e7d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000610e876108d0565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156106f157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a164736f6c6343000706000a60a060405234801561001057600080fd5b506040516100de3803806100de8339818101604052602081101561003357600080fd5b505160e081901b6001600160e01b03191660805263ffffffff16607d61006160003980604e5250607d6000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80638d3638f414602d575b600080fd5b6033604c565b6040805163ffffffff9092168252519081900360200190f35b7f00000000000000000000000000000000000000000000000000000000000000009056fea164736f6c6343000706000a4572726f723a2061203d3d2062206e6f7420736174697366696564205b627974657333325da164736f6c6343000706000a",
    "sourceMap": "356:3070:32:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2843:428;;;:::i;:::-;;505:443;;;:::i;954:306::-;;;:::i;321:38:1:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2207:450:32;;;:::i;1924:277::-;;;;;;;;;;;;;;;;-1:-1:-1;1924:277:32;;;;:::i;2663:174::-;;;;;;;;;;;;;;;;-1:-1:-1;2663:174:32;;;;;;;;;:::i;1819:584:0:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;1696:222:32;;;:::i;3277:147::-;;;;;;;;;;;;;;;;-1:-1:-1;3277:147:32;;;;:::i;1266:424::-;;;;;;;;;;;;;;;;-1:-1:-1;1266:424:32;;;;;;;;;:::i;170:28:1:-;;;:::i;1572:26:0:-;;;:::i;2843:428:32:-;2891:6;;2929:10;;2891:49;;;;;;2917:10;;;;;2891:49;;;;;;;;;;;;:6;;;;;:25;;:49;;;;;:6;;:49;;;;;;;;:6;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2959:6:32;;:41;;;;;;2989:10;;;;;2959:41;;;;;;2950:63;;-1:-1:-1;2959:6:32;;;;;-1:-1:-1;2959:29:32;;:41;;;;;;;;;;;;;;:6;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2959:41:32;3002:10;;2950:8;:63::i;:::-;3023:26;;;;;;;;;;;;;;;;;;;;;;;250:64:1;;3023:15:32;;:26;;;;;274:37:1;;3023:26:32;;;;;;;274:37:1;250:64;3023:26:32;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3059:6:32;;:34;;;;;;3089:3;3059:34;;;;;;:6;;;;;-1:-1:-1;3059:29:32;;-1:-1:-1;3059:34:32;;;;;;;;;;;;;;;:6;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3103:26:32;;;;;;3059:34;3103:26;;;;;;;;;;;;;;;;250:64:1;;3103:15:32;;:26;;;;;274:37:1;;3103:26:32;;;;;;;274:37:1;250:64;3103:26:32;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3139:6:32;;:32;;;;;;:6;:32;;;;;;:6;;;;;-1:-1:-1;3139:29:32;;-1:-1:-1;3139:32:32;;;;;;;;;;;;;;;:6;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3181:26:32;;;;;;3139:32;3181:26;;;;;;;;;;;;;;;;250:64:1;;3181:15:32;;:26;;;;;274:37:1;;3181:26:32;;;;;;;274:37:1;250:64;3181:26:32;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3217:6:32;;:47;;;;;;3247:16;3217:47;;;;;;:6;;;;;-1:-1:-1;3217:29:32;;-1:-1:-1;3217:47:32;;;;;;;;;;;;;;;:6;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2843:428:32:o;505:443::-;588:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;579:6;;:28;;;;;;;;;;;;;;;;;;617:29;495:3;657:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;692:6:32;;:70;;;;;;:6;:70;;;;;;;;;617:65;;-1:-1:-1;692:6:32;;;:47;;:70;;;;;:6;;:70;;;;;;;;:6;;:70;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;772:10:32;:19;;;;;;;;;;801:29;:10;:29;902:26;;;;;;772:19;;917:10;;;902:26;;;;;;893:48;;-1:-1:-1;902:6:32;;;;;-1:-1:-1;902:14:32;;:26;;;;;;;;;;;;;;:6;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;902:26:32;938:1;893:8;:48::i;:::-;505:443;:::o;954:306::-;1084:6;;:25;;;;;;1025:2;1084:25;;;;;;;;1025:2;;1037:28;;1075:47;;1084:6;;;;;:14;;:25;;;;;;;;;;;;;;:6;:25;;;;;;;;;;1075:47;1144:6;;:51;;;;;;;;;;;;;;;;;;;;;1132:64;;1144:6;;;:29;;:51;;;;;;;;;;;;;;:6;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1144:51:32;1132:11;:64::i;:::-;1206:6;;:47;;;;;;;;;;;;;;;;;;;;;:6;;;;;:25;;:47;;;;;:6;;:47;;;;;;;;:6;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;954:306;;:::o;321:38:1:-;250:64;321:38;:::o;2207:450:32:-;2255:6;;2293:10;;2255:49;;;;;;2281:10;;;;;2255:49;;;;;;;;;;;;:6;;;;;:25;;:49;;;;;:6;;:49;;;;;;;;:6;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2321:6:32;;2363:10;;2321:53;;;;;;2351:10;;;;;2321:53;;;;;;;;;;;;:6;;;;;-1:-1:-1;2321:29:32;;-1:-1:-1;2321:53:32;;;;;;;;;;;;;;;:6;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2321:53:32;2314:61;;;;2393:6;;:46;;;;;;2423:3;2393:46;;;;:6;:46;;;;;;:6;;;;;:29;;:46;;;;;;;;;;;;;;;:6;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2393:46:32;2392:47;2385:55;;;;2458:6;;2493:10;;2458:46;;;;;;2488:3;2458:46;;;;;;;;;;;;:6;;;;;:29;;:46;;;;;;;;;;;;;;;:6;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2458:46:32;2457:47;2450:55;;;;2523:6;;:57;;;;;;2553:10;;;;;2523:57;;;;;;;;;;;:6;;;;;:29;;:57;;;;;;;;;;;;;;;:6;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2523:57:32;2522:58;2515:66;;;;2599:6;;:50;;;;;;2629:3;2599:50;;;;;;;;;;;:6;;;;;:29;;:50;;;;;;;;;;;;;;;:6;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2599:50:32;2598:51;2591:59;;;;2207:450::o;1924:277::-;2029:6;;:14;;;;;;;;250:64:1;;2003:9:32;;;2029:6;;;;:12;;:14;;;;;;;;;;;;;;;:6;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2029:14:32;2003:42;;;;;;;;;;;2013:31;;;;;;;;;;;2003:42;;;;;;;;;;-1:-1:-1;;2003:42:32;;;;;;;-1:-1:-1;2003:42:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2055:19:32;;;;;;:13;:19;;;;;;;;250:64:1;;-1:-1:-1;2055:13:32;;-1:-1:-1;2055:19:32;;;;;274:37:1;;2055:19:32;;;;;;;274:37:1;250:64;2055:19:32;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2084:51:32;;;;;;;;;;;;;;;;;;;;;;;;250:64:1;;-1:-1:-1;2084:15:32;;-1:-1:-1;2084:51:32;;;;;274:37:1;;2084:51:32;;;;;;;274:37:1;250:64;2084:51:32;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2145:6:32;;2183:10;;2145:49;;;;;;2171:10;;;;;2145:49;;;;;;;;;;;;:6;;;;;-1:-1:-1;2145:25:32;;-1:-1:-1;2145:49:32;;;;;:6;;:49;;;;;;;;:6;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1924:277;:::o;2663:174::-;2777:6;;:52;;;;;;;;;;;;;;;;;;;;;2765:65;;2777:6;;;:29;;:52;;;;;;;;;;;;;;:6;:52;;;;;;;;;;1819:584:0;1853:4;1873:7;;;;;;;1869:528;;;-1:-1:-1;1903:7:0;;;;;;;1896:14;;1869:528;1941:17;1984:16;:14;:16::i;:::-;1980:374;;;2196:43;;;1671:64;2196:43;;;;;;;2221:17;2196:43;;;;;;;;;;;;;1679:55;2196:43;;;;;2086:175;;;;;;;;;2023:20;;1671:64;;2135:34;;2196:43;2086:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2047:232;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2020:259;;;2323:7;2312:27;;;;;;;;;;;;;;;-1:-1:-1;2312:27:0;;-1:-1:-1;;1980:374:0;2374:12;-1:-1:-1;1869:528:0;1819:584;:::o;1696:222:32:-;1771:19;;;;;;1779:10;1771:19;;;;;;250:64:1;;1757:13:32;;250:64:1;;1771:7:32;;:19;;;;;;;;;;;;;;274:37:1;250:64;1771:19:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1771:19:32;1757:34;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1757:34:32;;;;;;;-1:-1:-1;1757:34:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1801:51:32;;;;;;;;;;;;;;;;;;;;;;;;250:64:1;;-1:-1:-1;1801:15:32;;-1:-1:-1;1801:51:32;;;;;274:37:1;;1801:51:32;;;;;;;274:37:1;250:64;1801:51:32;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1862:6:32;;1900:10;;1862:49;;;;;;1888:10;;;;;1862:49;;;;;;;;;;;;:6;;;;;-1:-1:-1;1862:25:32;;-1:-1:-1;1862:49:32;;;;;:6;;:49;;;;;;;;:6;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1696:222::o;3277:147::-;3344:26;;;;;;;;;;;;;;;;;;;;;;;250:64:1;;3344:15:32;;:26;;;;;274:37:1;;3344:26:32;;;;;;;274:37:1;250:64;3344:26:32;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3380:6:32;;:37;;;;;;;;;;;;;;;:6;;;;;-1:-1:-1;3380:29:32;;-1:-1:-1;3380:37:32;;;;;;;;;;;;;;;:6;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3277:147:32:o;1266:424::-;1375:24;;;495:3;1375:24;;:42;;-1:-1:-1;1403:14:32;;;;1375:42;1371:256;;;1433:26;;;;;;;;;;;;;;;;;;;;;;;250:64:1;;1433:15:32;;:26;;;;;274:37:1;;1433:26:32;;;;;;;274:37:1;250:64;1433:26:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1371:256;;;1500:6;;:25;;;;;;;;;;;;;;;1491:47;;1500:6;;;:14;;:25;;;;;;;;;;;;;;:6;:25;;;;;;;;;;170:28:1;;;;;;;;;:::o;1572:26:0:-;;;;;;:::o;4088:277::-;4156:1;4151;:6;4147:212;;4178:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4241:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4294;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4342:6;:4;:6::i;7848:83:3:-;7907:17;7919:4;7918:5;7907:10;:17::i;2840:242:0:-;2990:42;2978:55;3059:16;;2840:242;:::o;2410:424::-;2449:16;:14;:16::i;:::-;2445:359;;;2645:67;;;1671:64;2645:67;;;;;;;2670:17;2645:67;;;;2705:4;1679:55;2645:67;;;;;;;;;;;;;;;;;;;;;;;2534:196;;;;;;;;;2482:11;;1671:64;;2579:43;;2645:67;2534:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2499:245;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;2445:359:0;2813:7;:14;;;;;;;;2410:424::o;3255:157::-;3315:9;3310:96;;3345:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;3389:6;:4;:6::i;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;;:::o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "IS_SCRIPT()": "f8ccbf47",
    "IS_TEST()": "fa7626d4",
    "failed()": "ba414fa6",
    "setUp()": "0a9254e4",
    "test_enrollRemoteRouter()": "0ec27ca0",
    "test_enrollRemoteRouterFuzzed(uint32,bytes32)": "d32636e3",
    "test_enrollRemoteRouterOnlyOwner()": "c2a76e2a",
    "test_enrollRemoteRouterOnlyOwnerFuzzed(address)": "9ae7ca2e",
    "test_isRemoteRouter()": "8aa39949",
    "test_isRemoteRouterFuzzed(uint32,bytes32)": "b8a979c6",
    "test_mustHaveRemote()": "034faeab",
    "test_mustHaveRemoteFuzzed(uint32)": "c50e1df0",
    "vm()": "3a768463"
  },
  "ast": {
    "absolutePath": "packages/contracts-router/contracts/test/Router.t.sol",
    "id": 29340,
    "exportedSymbols": {
      "DSTest": [
        1786
      ],
      "MockXcm": [
        28979
      ],
      "RouterHarness": [
        29690
      ],
      "RouterTest": [
        29339
      ],
      "Script": [
        2021
      ],
      "StdStorage": [
        5000
      ],
      "Test": [
        4902
      ],
      "Vm": [
        6909
      ],
      "console": [
        14973
      ],
      "console2": [
        23037
      ],
      "stdError": [
        4972
      ],
      "stdJson": [
        2380
      ],
      "stdMath": [
        6215
      ],
      "stdStorage": [
        6076
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:3381:32",
    "nodes": [
      {
        "id": 28955,
        "nodeType": "PragmaDirective",
        "src": "46:22:32",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 28956,
        "nodeType": "ImportDirective",
        "src": "70:28:32",
        "absolutePath": "lib/forge-std/src/Test.sol",
        "file": "forge-std/Test.sol",
        "scope": 29340,
        "sourceUnit": 6216,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 28958,
        "nodeType": "ImportDirective",
        "src": "99:60:32",
        "absolutePath": "packages/contracts-router/contracts/test/harnesses/RouterHarness.sol",
        "file": "./harnesses/RouterHarness.sol",
        "scope": 29340,
        "sourceUnit": 29691,
        "symbolAliases": [
          {
            "foreign": {
              "id": 28957,
              "name": "RouterHarness",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "107:13:32",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 28979,
        "nodeType": "ContractDefinition",
        "src": "161:193:32",
        "nodes": [
          {
            "id": 28960,
            "nodeType": "VariableDeclaration",
            "src": "184:23:32",
            "constant": false,
            "mutability": "immutable",
            "name": "domain",
            "scope": 28979,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 28959,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "184:6:32",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 28970,
            "nodeType": "FunctionDefinition",
            "src": "213:50:32",
            "body": {
              "id": 28969,
              "nodeType": "Block",
              "src": "236:27:32",
              "statements": [
                {
                  "expression": {
                    "id": 28967,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 28965,
                      "name": "domain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28960,
                      "src": "246:6:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 28966,
                      "name": "d",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28962,
                      "src": "255:1:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "246:10:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 28968,
                  "nodeType": "ExpressionStatement",
                  "src": "246:10:32"
                }
              ]
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "parameters": {
              "id": 28963,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28962,
                  "mutability": "mutable",
                  "name": "d",
                  "nodeType": "VariableDeclaration",
                  "scope": 28970,
                  "src": "226:8:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 28961,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "226:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "225:10:32"
            },
            "returnParameters": {
              "id": 28964,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "236:0:32"
            },
            "scope": 28979,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 28978,
            "nodeType": "FunctionDefinition",
            "src": "268:84:32",
            "body": {
              "id": 28977,
              "nodeType": "Block",
              "src": "322:30:32",
              "statements": [
                {
                  "expression": {
                    "id": 28975,
                    "name": "domain",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 28960,
                    "src": "339:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "functionReturnParameters": 28974,
                  "id": 28976,
                  "nodeType": "Return",
                  "src": "332:13:32"
                }
              ]
            },
            "functionSelector": "8d3638f4",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "localDomain",
            "parameters": {
              "id": 28971,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "288:2:32"
            },
            "returnParameters": {
              "id": 28974,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28973,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 28978,
                  "src": "314:6:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 28972,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "314:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "313:8:32"
            },
            "scope": 28979,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          28979
        ],
        "name": "MockXcm",
        "scope": 29340
      },
      {
        "id": 29339,
        "nodeType": "ContractDefinition",
        "src": "356:3070:32",
        "nodes": [
          {
            "id": 28983,
            "nodeType": "VariableDeclaration",
            "src": "390:20:32",
            "constant": false,
            "mutability": "mutable",
            "name": "router",
            "scope": 29339,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_RouterHarness_$29690",
              "typeString": "contract RouterHarness"
            },
            "typeName": {
              "id": 28982,
              "name": "RouterHarness",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 29690,
              "src": "390:13:32",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_RouterHarness_$29690",
                "typeString": "contract RouterHarness"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 28985,
            "nodeType": "VariableDeclaration",
            "src": "417:17:32",
            "constant": false,
            "mutability": "mutable",
            "name": "testDomain",
            "scope": 29339,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 28984,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "417:6:32",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 28987,
            "nodeType": "VariableDeclaration",
            "src": "440:18:32",
            "constant": false,
            "mutability": "mutable",
            "name": "testRouter",
            "scope": 29339,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 28986,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "440:7:32",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 28990,
            "nodeType": "VariableDeclaration",
            "src": "465:33:32",
            "constant": true,
            "mutability": "constant",
            "name": "localDomain",
            "scope": 29339,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 28988,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "465:6:32",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "hexValue": "313131",
              "id": 28989,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "495:3:32",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_111_by_1",
                "typeString": "int_const 111"
              },
              "value": "111"
            },
            "visibility": "internal"
          },
          {
            "id": 29035,
            "nodeType": "FunctionDefinition",
            "src": "505:443:32",
            "body": {
              "id": 29034,
              "nodeType": "Block",
              "src": "529:419:32",
              "statements": [
                {
                  "expression": {
                    "id": 28997,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 28993,
                      "name": "router",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28983,
                      "src": "579:6:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_RouterHarness_$29690",
                        "typeString": "contract RouterHarness"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 28995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "588:17:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_RouterHarness_$29690_$",
                          "typeString": "function () returns (contract RouterHarness)"
                        },
                        "typeName": {
                          "id": 28994,
                          "name": "RouterHarness",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 29690,
                          "src": "592:13:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_RouterHarness_$29690",
                            "typeString": "contract RouterHarness"
                          }
                        }
                      },
                      "id": 28996,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "588:19:32",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_RouterHarness_$29690",
                        "typeString": "contract RouterHarness"
                      }
                    },
                    "src": "579:28:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_RouterHarness_$29690",
                      "typeString": "contract RouterHarness"
                    }
                  },
                  "id": 28998,
                  "nodeType": "ExpressionStatement",
                  "src": "579:28:32"
                },
                {
                  "assignments": [
                    29000
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29000,
                      "mutability": "mutable",
                      "name": "xAppConnectionManager",
                      "nodeType": "VariableDeclaration",
                      "scope": 29034,
                      "src": "617:29:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 28999,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "617:7:32",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29008,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 29005,
                            "name": "localDomain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28990,
                            "src": "669:11:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "id": 29004,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "NewExpression",
                          "src": "657:11:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_creation_nonpayable$_t_uint32_$returns$_t_contract$_MockXcm_$28979_$",
                            "typeString": "function (uint32) returns (contract MockXcm)"
                          },
                          "typeName": {
                            "id": 29003,
                            "name": "MockXcm",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 28979,
                            "src": "661:7:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockXcm_$28979",
                              "typeString": "contract MockXcm"
                            }
                          }
                        },
                        "id": 29006,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "657:24:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MockXcm_$28979",
                          "typeString": "contract MockXcm"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_MockXcm_$28979",
                          "typeString": "contract MockXcm"
                        }
                      ],
                      "id": 29002,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "649:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 29001,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "649:7:32",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 29007,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "649:33:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "617:65:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29012,
                        "name": "xAppConnectionManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29000,
                        "src": "740:21:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 29009,
                        "name": "router",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28983,
                        "src": "692:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_RouterHarness_$29690",
                          "typeString": "contract RouterHarness"
                        }
                      },
                      "id": 29011,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "exposed__XAppConnectionClient_initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29649,
                      "src": "692:47:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 29013,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "692:70:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29014,
                  "nodeType": "ExpressionStatement",
                  "src": "692:70:32"
                },
                {
                  "expression": {
                    "id": 29017,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 29015,
                      "name": "testDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28985,
                      "src": "772:10:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "313233323133",
                      "id": 29016,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "785:6:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_123213_by_1",
                        "typeString": "int_const 123213"
                      },
                      "value": "123213"
                    },
                    "src": "772:19:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 29018,
                  "nodeType": "ExpressionStatement",
                  "src": "772:19:32"
                },
                {
                  "expression": {
                    "id": 29021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 29019,
                      "name": "testRouter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28987,
                      "src": "801:10:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "726f757465722061646472657373",
                      "id": 29020,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "814:16:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_2ce718dd49f15a0fcb42d7008fd614de7ae53171ec60d8822f2c68465ea13bc9",
                        "typeString": "literal_string \"router address\""
                      },
                      "value": "router address"
                    },
                    "src": "801:29:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 29022,
                  "nodeType": "ExpressionStatement",
                  "src": "801:29:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 29026,
                            "name": "testDomain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28985,
                            "src": "917:10:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "expression": {
                            "id": 29024,
                            "name": "router",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28983,
                            "src": "902:6:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_RouterHarness_$29690",
                              "typeString": "contract RouterHarness"
                            }
                          },
                          "id": 29025,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "remotes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28743,
                          "src": "902:14:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_uint32_$returns$_t_bytes32_$",
                            "typeString": "function (uint32) view external returns (bytes32)"
                          }
                        },
                        "id": 29027,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "902:26:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 29030,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "938:1:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 29029,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "930:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": {
                            "id": 29028,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "930:7:32",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 29031,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "930:10:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 29023,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 375,
                      "src": "893:8:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32,bytes32)"
                      }
                    },
                    "id": 29032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "893:48:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29033,
                  "nodeType": "ExpressionStatement",
                  "src": "893:48:32"
                }
              ]
            },
            "functionSelector": "0a9254e4",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setUp",
            "parameters": {
              "id": 28991,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "519:2:32"
            },
            "returnParameters": {
              "id": 28992,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "529:0:32"
            },
            "scope": 29339,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 29073,
            "nodeType": "FunctionDefinition",
            "src": "954:306:32",
            "body": {
              "id": 29072,
              "nodeType": "Block",
              "src": "996:264:32",
              "statements": [
                {
                  "assignments": [
                    29039
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29039,
                      "mutability": "mutable",
                      "name": "newDomain",
                      "nodeType": "VariableDeclaration",
                      "scope": 29072,
                      "src": "1006:16:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 29038,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1006:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29041,
                  "initialValue": {
                    "hexValue": "3132",
                    "id": 29040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1025:2:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_12_by_1",
                      "typeString": "int_const 12"
                    },
                    "value": "12"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1006:21:32"
                },
                {
                  "assignments": [
                    29043
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29043,
                      "mutability": "mutable",
                      "name": "newRouter",
                      "nodeType": "VariableDeclaration",
                      "scope": 29072,
                      "src": "1037:17:32",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 29042,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1037:7:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 29045,
                  "initialValue": {
                    "hexValue": "307842454546",
                    "id": 29044,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1057:8:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_dcb455995f85c647ee08644c1b4270bf2e76bdba6dc3ac02197adf19df52b3c5",
                      "typeString": "literal_string \"0xBEEF\""
                    },
                    "value": "0xBEEF"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1037:28:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 29049,
                            "name": "newDomain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29039,
                            "src": "1099:9:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "expression": {
                            "id": 29047,
                            "name": "router",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28983,
                            "src": "1084:6:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_RouterHarness_$29690",
                              "typeString": "contract RouterHarness"
                            }
                          },
                          "id": 29048,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "remotes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28743,
                          "src": "1084:14:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_uint32_$returns$_t_bytes32_$",
                            "typeString": "function (uint32) view external returns (bytes32)"
                          }
                        },
                        "id": 29050,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1084:25:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 29053,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1119:1:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 29052,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1111:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": {
                            "id": 29051,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "1111:7:32",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 29054,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1111:10:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 29046,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 375,
                      "src": "1075:8:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32,bytes32)"
                      }
                    },
                    "id": 29055,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1075:47:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29056,
                  "nodeType": "ExpressionStatement",
                  "src": "1075:47:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 29060,
                            "name": "newDomain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29039,
                            "src": "1174:9:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "id": 29061,
                            "name": "newRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29043,
                            "src": "1185:9:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 29058,
                            "name": "router",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28983,
                            "src": "1144:6:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_RouterHarness_$29690",
                              "typeString": "contract RouterHarness"
                            }
                          },
                          "id": 29059,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "exposed_isRemoteRouter",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 29676,
                          "src": "1144:29:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_uint32_$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (uint32,bytes32) view external returns (bool)"
                          }
                        },
                        "id": 29062,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1144:51:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 29057,
                      "name": "assertFalse",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3086,
                        3100
                      ],
                      "referencedDeclaration": 3086,
                      "src": "1132:11:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$returns$__$",
                        "typeString": "function (bool)"
                      }
                    },
                    "id": 29063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1132:64:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29064,
                  "nodeType": "ExpressionStatement",
                  "src": "1132:64:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29068,
                        "name": "newDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29039,
                        "src": "1232:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 29069,
                        "name": "newRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29043,
                        "src": "1243:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 29065,
                        "name": "router",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28983,
                        "src": "1206:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_RouterHarness_$29690",
                          "typeString": "contract RouterHarness"
                        }
                      },
                      "id": 29067,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "enrollRemoteRouter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28793,
                      "src": "1206:25:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_bytes32_$returns$__$",
                        "typeString": "function (uint32,bytes32) external"
                      }
                    },
                    "id": 29070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1206:47:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29071,
                  "nodeType": "ExpressionStatement",
                  "src": "1206:47:32"
                }
              ]
            },
            "functionSelector": "0ec27ca0",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_enrollRemoteRouter",
            "parameters": {
              "id": 29036,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "986:2:32"
            },
            "returnParameters": {
              "id": 29037,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "996:0:32"
            },
            "scope": 29339,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 29123,
            "nodeType": "FunctionDefinition",
            "src": "1266:424:32",
            "body": {
              "id": 29122,
              "nodeType": "Block",
              "src": "1361:329:32",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 29086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 29082,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 29080,
                        "name": "newDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29075,
                        "src": "1375:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 29081,
                        "name": "localDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28990,
                        "src": "1388:11:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "1375:24:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 29085,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 29083,
                        "name": "newDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29075,
                        "src": "1403:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 29084,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1416:1:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "1403:14:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1375:42:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 29113,
                    "nodeType": "Block",
                    "src": "1476:151:32",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 29097,
                                  "name": "newDomain",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29075,
                                  "src": "1515:9:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                ],
                                "expression": {
                                  "id": 29095,
                                  "name": "router",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 28983,
                                  "src": "1500:6:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_RouterHarness_$29690",
                                    "typeString": "contract RouterHarness"
                                  }
                                },
                                "id": 29096,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "remotes",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 28743,
                                "src": "1500:14:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_uint32_$returns$_t_bytes32_$",
                                  "typeString": "function (uint32) view external returns (bytes32)"
                                }
                              },
                              "id": 29098,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1500:25:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 29101,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1535:1:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 29100,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1527:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 29099,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1527:7:32",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 29102,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1527:10:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 29094,
                            "name": "assertEq",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3136,
                              3161,
                              3174,
                              3190,
                              3232,
                              3274,
                              3316,
                              3353,
                              3390,
                              3427,
                              320,
                              345,
                              375,
                              400,
                              459,
                              484,
                              514,
                              539,
                              1639,
                              1674
                            ],
                            "referencedDeclaration": 375,
                            "src": "1491:8:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$",
                              "typeString": "function (bytes32,bytes32)"
                            }
                          },
                          "id": 29103,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1491:47:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 29104,
                        "nodeType": "ExpressionStatement",
                        "src": "1491:47:32"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 29108,
                                  "name": "newDomain",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29075,
                                  "src": "1594:9:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                {
                                  "id": 29109,
                                  "name": "newRouter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29077,
                                  "src": "1605:9:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 29106,
                                  "name": "router",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 28983,
                                  "src": "1564:6:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_RouterHarness_$29690",
                                    "typeString": "contract RouterHarness"
                                  }
                                },
                                "id": 29107,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "exposed_isRemoteRouter",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 29676,
                                "src": "1564:29:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_uint32_$_t_bytes32_$returns$_t_bool_$",
                                  "typeString": "function (uint32,bytes32) view external returns (bool)"
                                }
                              },
                              "id": 29110,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1564:51:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 29105,
                            "name": "assertFalse",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3086,
                              3100
                            ],
                            "referencedDeclaration": 3086,
                            "src": "1552:11:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$returns$__$",
                              "typeString": "function (bool)"
                            }
                          },
                          "id": 29111,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1552:64:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 29112,
                        "nodeType": "ExpressionStatement",
                        "src": "1552:64:32"
                      }
                    ]
                  },
                  "id": 29114,
                  "nodeType": "IfStatement",
                  "src": "1371:256:32",
                  "trueBody": {
                    "id": 29093,
                    "nodeType": "Block",
                    "src": "1419:51:32",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "21646f6d61696e",
                              "id": 29090,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1449:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_713a62ac7d6699d26c5564c3c29686998f05bfd595516cfcf220240bfe0fc1a7",
                                "typeString": "literal_string \"!domain\""
                              },
                              "value": "!domain"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_713a62ac7d6699d26c5564c3c29686998f05bfd595516cfcf220240bfe0fc1a7",
                                "typeString": "literal_string \"!domain\""
                              }
                            ],
                            "expression": {
                              "id": 29087,
                              "name": "vm",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1816,
                              "src": "1433:2:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Vm_$6909",
                                "typeString": "contract Vm"
                              }
                            },
                            "id": 29089,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "expectRevert",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6481,
                            "src": "1433:15:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (bytes memory) external"
                            }
                          },
                          "id": 29091,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1433:26:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 29092,
                        "nodeType": "ExpressionStatement",
                        "src": "1433:26:32"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29118,
                        "name": "newDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29075,
                        "src": "1662:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 29119,
                        "name": "newRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29077,
                        "src": "1673:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 29115,
                        "name": "router",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28983,
                        "src": "1636:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_RouterHarness_$29690",
                          "typeString": "contract RouterHarness"
                        }
                      },
                      "id": 29117,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "enrollRemoteRouter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28793,
                      "src": "1636:25:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_bytes32_$returns$__$",
                        "typeString": "function (uint32,bytes32) external"
                      }
                    },
                    "id": 29120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1636:47:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29121,
                  "nodeType": "ExpressionStatement",
                  "src": "1636:47:32"
                }
              ]
            },
            "functionSelector": "d32636e3",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_enrollRemoteRouterFuzzed",
            "parameters": {
              "id": 29078,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29075,
                  "mutability": "mutable",
                  "name": "newDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 29123,
                  "src": "1305:16:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 29074,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1305:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29077,
                  "mutability": "mutable",
                  "name": "newRouter",
                  "nodeType": "VariableDeclaration",
                  "scope": 29123,
                  "src": "1323:17:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29076,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1323:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1304:37:32"
            },
            "returnParameters": {
              "id": 29079,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1361:0:32"
            },
            "scope": 29339,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 29149,
            "nodeType": "FunctionDefinition",
            "src": "1696:222:32",
            "body": {
              "id": 29148,
              "nodeType": "Block",
              "src": "1747:171:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "31323331323331323331",
                            "id": 29131,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1779:10:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1231231231_by_1",
                              "typeString": "int_const 1231231231"
                            },
                            "value": "1231231231"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_1231231231_by_1",
                              "typeString": "int_const 1231231231"
                            }
                          ],
                          "expression": {
                            "id": 29129,
                            "name": "vm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1816,
                            "src": "1771:2:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Vm_$6909",
                              "typeString": "contract Vm"
                            }
                          },
                          "id": 29130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "addr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6287,
                          "src": "1771:7:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_address_$",
                            "typeString": "function (uint256) external returns (address)"
                          }
                        },
                        "id": 29132,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1771:19:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 29126,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "1757:2:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 29128,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "startPrank",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6445,
                      "src": "1757:13:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 29133,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1757:34:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29134,
                  "nodeType": "ExpressionStatement",
                  "src": "1757:34:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
                        "id": 29138,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1817:34:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe",
                          "typeString": "literal_string \"Ownable: caller is not the owner\""
                        },
                        "value": "Ownable: caller is not the owner"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe",
                          "typeString": "literal_string \"Ownable: caller is not the owner\""
                        }
                      ],
                      "expression": {
                        "id": 29135,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "1801:2:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 29137,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "1801:15:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 29139,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1801:51:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29140,
                  "nodeType": "ExpressionStatement",
                  "src": "1801:51:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29144,
                        "name": "testDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28985,
                        "src": "1888:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 29145,
                        "name": "testRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28987,
                        "src": "1900:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 29141,
                        "name": "router",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28983,
                        "src": "1862:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_RouterHarness_$29690",
                          "typeString": "contract RouterHarness"
                        }
                      },
                      "id": 29143,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "enrollRemoteRouter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28793,
                      "src": "1862:25:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_bytes32_$returns$__$",
                        "typeString": "function (uint32,bytes32) external"
                      }
                    },
                    "id": 29146,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1862:49:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29147,
                  "nodeType": "ExpressionStatement",
                  "src": "1862:49:32"
                }
              ]
            },
            "functionSelector": "c2a76e2a",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_enrollRemoteRouterOnlyOwner",
            "parameters": {
              "id": 29124,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1737:2:32"
            },
            "returnParameters": {
              "id": 29125,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1747:0:32"
            },
            "scope": 29339,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 29187,
            "nodeType": "FunctionDefinition",
            "src": "1924:277:32",
            "body": {
              "id": 29186,
              "nodeType": "Block",
              "src": "1993:208:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 29164,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 29157,
                          "name": "user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29151,
                          "src": "2013:4:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 29160,
                                  "name": "router",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 28983,
                                  "src": "2029:6:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_RouterHarness_$29690",
                                    "typeString": "contract RouterHarness"
                                  }
                                },
                                "id": 29161,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "owner",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 23099,
                                "src": "2029:12:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 29162,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2029:14:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 29159,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2021:7:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 29158,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2021:7:32",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 29163,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2021:23:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2013:31:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "expression": {
                        "id": 29154,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "2003:2:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 29156,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "assume",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6585,
                      "src": "2003:9:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bool_$returns$__$",
                        "typeString": "function (bool) external"
                      }
                    },
                    "id": 29165,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2003:42:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29166,
                  "nodeType": "ExpressionStatement",
                  "src": "2003:42:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29170,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29151,
                        "src": "2069:4:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 29167,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "2055:2:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 29169,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "startPrank",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6445,
                      "src": "2055:13:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 29171,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2055:19:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29172,
                  "nodeType": "ExpressionStatement",
                  "src": "2055:19:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
                        "id": 29176,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2100:34:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe",
                          "typeString": "literal_string \"Ownable: caller is not the owner\""
                        },
                        "value": "Ownable: caller is not the owner"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe",
                          "typeString": "literal_string \"Ownable: caller is not the owner\""
                        }
                      ],
                      "expression": {
                        "id": 29173,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "2084:2:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 29175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "2084:15:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 29177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2084:51:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29178,
                  "nodeType": "ExpressionStatement",
                  "src": "2084:51:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29182,
                        "name": "testDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28985,
                        "src": "2171:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 29183,
                        "name": "testRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28987,
                        "src": "2183:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 29179,
                        "name": "router",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28983,
                        "src": "2145:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_RouterHarness_$29690",
                          "typeString": "contract RouterHarness"
                        }
                      },
                      "id": 29181,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "enrollRemoteRouter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28793,
                      "src": "2145:25:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_bytes32_$returns$__$",
                        "typeString": "function (uint32,bytes32) external"
                      }
                    },
                    "id": 29184,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2145:49:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29185,
                  "nodeType": "ExpressionStatement",
                  "src": "2145:49:32"
                }
              ]
            },
            "functionSelector": "9ae7ca2e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_enrollRemoteRouterOnlyOwnerFuzzed",
            "parameters": {
              "id": 29152,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29151,
                  "mutability": "mutable",
                  "name": "user",
                  "nodeType": "VariableDeclaration",
                  "scope": 29187,
                  "src": "1972:12:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 29150,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1972:7:32",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1971:14:32"
            },
            "returnParameters": {
              "id": 29153,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1993:0:32"
            },
            "scope": 29339,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 29245,
            "nodeType": "FunctionDefinition",
            "src": "2207:450:32",
            "body": {
              "id": 29244,
              "nodeType": "Block",
              "src": "2245:412:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29193,
                        "name": "testDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28985,
                        "src": "2281:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 29194,
                        "name": "testRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28987,
                        "src": "2293:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 29190,
                        "name": "router",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28983,
                        "src": "2255:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_RouterHarness_$29690",
                          "typeString": "contract RouterHarness"
                        }
                      },
                      "id": 29192,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "enrollRemoteRouter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28793,
                      "src": "2255:25:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_bytes32_$returns$__$",
                        "typeString": "function (uint32,bytes32) external"
                      }
                    },
                    "id": 29195,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2255:49:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29196,
                  "nodeType": "ExpressionStatement",
                  "src": "2255:49:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 29200,
                            "name": "testDomain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28985,
                            "src": "2351:10:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "id": 29201,
                            "name": "testRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28987,
                            "src": "2363:10:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 29198,
                            "name": "router",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28983,
                            "src": "2321:6:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_RouterHarness_$29690",
                              "typeString": "contract RouterHarness"
                            }
                          },
                          "id": 29199,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "exposed_isRemoteRouter",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 29676,
                          "src": "2321:29:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_uint32_$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (uint32,bytes32) view external returns (bool)"
                          }
                        },
                        "id": 29202,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2321:53:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 29197,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -3,
                      "src": "2314:6:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 29203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2314:61:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29204,
                  "nodeType": "ExpressionStatement",
                  "src": "2314:61:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29214,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2392:47:32",
                        "subExpression": {
                          "arguments": [
                            {
                              "hexValue": "333433",
                              "id": 29208,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2423:3:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_343_by_1",
                                "typeString": "int_const 343"
                              },
                              "value": "343"
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 29211,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2436:1:32",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 29210,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2428:7:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 29209,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2428:7:32",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 29212,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2428:10:32",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_343_by_1",
                                "typeString": "int_const 343"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 29206,
                              "name": "router",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28983,
                              "src": "2393:6:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_RouterHarness_$29690",
                                "typeString": "contract RouterHarness"
                              }
                            },
                            "id": 29207,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "exposed_isRemoteRouter",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 29676,
                            "src": "2393:29:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint32_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (uint32,bytes32) view external returns (bool)"
                            }
                          },
                          "id": 29213,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2393:46:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 29205,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -3,
                      "src": "2385:6:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 29215,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2385:55:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29216,
                  "nodeType": "ExpressionStatement",
                  "src": "2385:55:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29223,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2457:47:32",
                        "subExpression": {
                          "arguments": [
                            {
                              "hexValue": "333433",
                              "id": 29220,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2488:3:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_343_by_1",
                                "typeString": "int_const 343"
                              },
                              "value": "343"
                            },
                            {
                              "id": 29221,
                              "name": "testRouter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28987,
                              "src": "2493:10:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_343_by_1",
                                "typeString": "int_const 343"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 29218,
                              "name": "router",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28983,
                              "src": "2458:6:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_RouterHarness_$29690",
                                "typeString": "contract RouterHarness"
                              }
                            },
                            "id": 29219,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "exposed_isRemoteRouter",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 29676,
                            "src": "2458:29:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint32_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (uint32,bytes32) view external returns (bool)"
                            }
                          },
                          "id": 29222,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2458:46:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 29217,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -3,
                      "src": "2450:6:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 29224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2450:55:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29225,
                  "nodeType": "ExpressionStatement",
                  "src": "2450:55:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29232,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2522:58:32",
                        "subExpression": {
                          "arguments": [
                            {
                              "id": 29229,
                              "name": "testDomain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28985,
                              "src": "2553:10:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "hexValue": "6e6f74206120726f75746572",
                              "id": 29230,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2565:14:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ddec5bfc4007ee17e88cf9d7a4cc8a4a34368bd1df9110384c584f8ee1d91b15",
                                "typeString": "literal_string \"not a router\""
                              },
                              "value": "not a router"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ddec5bfc4007ee17e88cf9d7a4cc8a4a34368bd1df9110384c584f8ee1d91b15",
                                "typeString": "literal_string \"not a router\""
                              }
                            ],
                            "expression": {
                              "id": 29227,
                              "name": "router",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28983,
                              "src": "2523:6:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_RouterHarness_$29690",
                                "typeString": "contract RouterHarness"
                              }
                            },
                            "id": 29228,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "exposed_isRemoteRouter",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 29676,
                            "src": "2523:29:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint32_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (uint32,bytes32) view external returns (bool)"
                            }
                          },
                          "id": 29231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2523:57:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 29226,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -3,
                      "src": "2515:6:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 29233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2515:66:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29234,
                  "nodeType": "ExpressionStatement",
                  "src": "2515:66:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29241,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2598:51:32",
                        "subExpression": {
                          "arguments": [
                            {
                              "hexValue": "333433",
                              "id": 29238,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2629:3:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_343_by_1",
                                "typeString": "int_const 343"
                              },
                              "value": "343"
                            },
                            {
                              "hexValue": "6e6f74206120726f75746572",
                              "id": 29239,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2634:14:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ddec5bfc4007ee17e88cf9d7a4cc8a4a34368bd1df9110384c584f8ee1d91b15",
                                "typeString": "literal_string \"not a router\""
                              },
                              "value": "not a router"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_343_by_1",
                                "typeString": "int_const 343"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ddec5bfc4007ee17e88cf9d7a4cc8a4a34368bd1df9110384c584f8ee1d91b15",
                                "typeString": "literal_string \"not a router\""
                              }
                            ],
                            "expression": {
                              "id": 29236,
                              "name": "router",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28983,
                              "src": "2599:6:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_RouterHarness_$29690",
                                "typeString": "contract RouterHarness"
                              }
                            },
                            "id": 29237,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "exposed_isRemoteRouter",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 29676,
                            "src": "2599:29:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint32_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (uint32,bytes32) view external returns (bool)"
                            }
                          },
                          "id": 29240,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2599:50:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 29235,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -3,
                      "src": "2591:6:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 29242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2591:59:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29243,
                  "nodeType": "ExpressionStatement",
                  "src": "2591:59:32"
                }
              ]
            },
            "functionSelector": "8aa39949",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_isRemoteRouter",
            "parameters": {
              "id": 29188,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2235:2:32"
            },
            "returnParameters": {
              "id": 29189,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2245:0:32"
            },
            "scope": 29339,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 29261,
            "nodeType": "FunctionDefinition",
            "src": "2663:174:32",
            "body": {
              "id": 29260,
              "nodeType": "Block",
              "src": "2755:82:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 29255,
                            "name": "domain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29247,
                            "src": "2807:6:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "id": 29256,
                            "name": "routerAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29249,
                            "src": "2815:13:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 29253,
                            "name": "router",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28983,
                            "src": "2777:6:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_RouterHarness_$29690",
                              "typeString": "contract RouterHarness"
                            }
                          },
                          "id": 29254,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "exposed_isRemoteRouter",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 29676,
                          "src": "2777:29:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_uint32_$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (uint32,bytes32) view external returns (bool)"
                          }
                        },
                        "id": 29257,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2777:52:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 29252,
                      "name": "assertFalse",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3086,
                        3100
                      ],
                      "referencedDeclaration": 3086,
                      "src": "2765:11:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$returns$__$",
                        "typeString": "function (bool)"
                      }
                    },
                    "id": 29258,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2765:65:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29259,
                  "nodeType": "ExpressionStatement",
                  "src": "2765:65:32"
                }
              ]
            },
            "functionSelector": "b8a979c6",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_isRemoteRouterFuzzed",
            "parameters": {
              "id": 29250,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29247,
                  "mutability": "mutable",
                  "name": "domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 29261,
                  "src": "2698:13:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 29246,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2698:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29249,
                  "mutability": "mutable",
                  "name": "routerAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 29261,
                  "src": "2713:21:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29248,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2713:7:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2697:38:32"
            },
            "returnParameters": {
              "id": 29251,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2755:0:32"
            },
            "scope": 29339,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 29320,
            "nodeType": "FunctionDefinition",
            "src": "2843:428:32",
            "body": {
              "id": 29319,
              "nodeType": "Block",
              "src": "2881:390:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29267,
                        "name": "testDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28985,
                        "src": "2917:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 29268,
                        "name": "testRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28987,
                        "src": "2929:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 29264,
                        "name": "router",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28983,
                        "src": "2891:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_RouterHarness_$29690",
                          "typeString": "contract RouterHarness"
                        }
                      },
                      "id": 29266,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "enrollRemoteRouter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28793,
                      "src": "2891:25:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_bytes32_$returns$__$",
                        "typeString": "function (uint32,bytes32) external"
                      }
                    },
                    "id": 29269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2891:49:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29270,
                  "nodeType": "ExpressionStatement",
                  "src": "2891:49:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 29274,
                            "name": "testDomain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28985,
                            "src": "2989:10:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "expression": {
                            "id": 29272,
                            "name": "router",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28983,
                            "src": "2959:6:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_RouterHarness_$29690",
                              "typeString": "contract RouterHarness"
                            }
                          },
                          "id": 29273,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "exposed_mustHaveRemote",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 29661,
                          "src": "2959:29:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_uint32_$returns$_t_bytes32_$",
                            "typeString": "function (uint32) view external returns (bytes32)"
                          }
                        },
                        "id": 29275,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2959:41:32",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 29276,
                        "name": "testRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28987,
                        "src": "3002:10:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 29271,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 375,
                      "src": "2950:8:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32,bytes32)"
                      }
                    },
                    "id": 29277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2950:63:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29278,
                  "nodeType": "ExpressionStatement",
                  "src": "2950:63:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "2172656d6f7465",
                        "id": 29282,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3039:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b4cb45e2eca7e91596896d9d6d0088e023ee382fb860b627f6924eb294dd23de",
                          "typeString": "literal_string \"!remote\""
                        },
                        "value": "!remote"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_b4cb45e2eca7e91596896d9d6d0088e023ee382fb860b627f6924eb294dd23de",
                          "typeString": "literal_string \"!remote\""
                        }
                      ],
                      "expression": {
                        "id": 29279,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "3023:2:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 29281,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "3023:15:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 29283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3023:26:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29284,
                  "nodeType": "ExpressionStatement",
                  "src": "3023:26:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "333433",
                        "id": 29288,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3089:3:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_343_by_1",
                          "typeString": "int_const 343"
                        },
                        "value": "343"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_343_by_1",
                          "typeString": "int_const 343"
                        }
                      ],
                      "expression": {
                        "id": 29285,
                        "name": "router",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28983,
                        "src": "3059:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_RouterHarness_$29690",
                          "typeString": "contract RouterHarness"
                        }
                      },
                      "id": 29287,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "exposed_mustHaveRemote",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29661,
                      "src": "3059:29:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint32_$returns$_t_bytes32_$",
                        "typeString": "function (uint32) view external returns (bytes32)"
                      }
                    },
                    "id": 29289,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3059:34:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 29290,
                  "nodeType": "ExpressionStatement",
                  "src": "3059:34:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "2172656d6f7465",
                        "id": 29294,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3119:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b4cb45e2eca7e91596896d9d6d0088e023ee382fb860b627f6924eb294dd23de",
                          "typeString": "literal_string \"!remote\""
                        },
                        "value": "!remote"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_b4cb45e2eca7e91596896d9d6d0088e023ee382fb860b627f6924eb294dd23de",
                          "typeString": "literal_string \"!remote\""
                        }
                      ],
                      "expression": {
                        "id": 29291,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "3103:2:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 29293,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "3103:15:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 29295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3103:26:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29296,
                  "nodeType": "ExpressionStatement",
                  "src": "3103:26:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "30",
                        "id": 29300,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3169:1:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "expression": {
                        "id": 29297,
                        "name": "router",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28983,
                        "src": "3139:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_RouterHarness_$29690",
                          "typeString": "contract RouterHarness"
                        }
                      },
                      "id": 29299,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "exposed_mustHaveRemote",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29661,
                      "src": "3139:29:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint32_$returns$_t_bytes32_$",
                        "typeString": "function (uint32) view external returns (bytes32)"
                      }
                    },
                    "id": 29301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3139:32:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 29302,
                  "nodeType": "ExpressionStatement",
                  "src": "3139:32:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "2172656d6f7465",
                        "id": 29306,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3197:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b4cb45e2eca7e91596896d9d6d0088e023ee382fb860b627f6924eb294dd23de",
                          "typeString": "literal_string \"!remote\""
                        },
                        "value": "!remote"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_b4cb45e2eca7e91596896d9d6d0088e023ee382fb860b627f6924eb294dd23de",
                          "typeString": "literal_string \"!remote\""
                        }
                      ],
                      "expression": {
                        "id": 29303,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "3181:2:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 29305,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "3181:15:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 29307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3181:26:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29308,
                  "nodeType": "ExpressionStatement",
                  "src": "3181:26:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 29314,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3252:6:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint32_$",
                                "typeString": "type(uint32)"
                              },
                              "typeName": {
                                "id": 29313,
                                "name": "uint32",
                                "nodeType": "ElementaryTypeName",
                                "src": "3252:6:32",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_type$_t_uint32_$",
                                "typeString": "type(uint32)"
                              }
                            ],
                            "id": 29312,
                            "name": "type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -27,
                            "src": "3247:4:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 29315,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3247:12:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_meta_type_t_uint32",
                            "typeString": "type(uint32)"
                          }
                        },
                        "id": 29316,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "max",
                        "nodeType": "MemberAccess",
                        "src": "3247:16:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "expression": {
                        "id": 29309,
                        "name": "router",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28983,
                        "src": "3217:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_RouterHarness_$29690",
                          "typeString": "contract RouterHarness"
                        }
                      },
                      "id": 29311,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "exposed_mustHaveRemote",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29661,
                      "src": "3217:29:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint32_$returns$_t_bytes32_$",
                        "typeString": "function (uint32) view external returns (bytes32)"
                      }
                    },
                    "id": 29317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3217:47:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 29318,
                  "nodeType": "ExpressionStatement",
                  "src": "3217:47:32"
                }
              ]
            },
            "functionSelector": "034faeab",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_mustHaveRemote",
            "parameters": {
              "id": 29262,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2871:2:32"
            },
            "returnParameters": {
              "id": 29263,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2881:0:32"
            },
            "scope": 29339,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 29338,
            "nodeType": "FunctionDefinition",
            "src": "3277:147:32",
            "body": {
              "id": 29337,
              "nodeType": "Block",
              "src": "3334:90:32",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "2172656d6f7465",
                        "id": 29328,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3360:9:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b4cb45e2eca7e91596896d9d6d0088e023ee382fb860b627f6924eb294dd23de",
                          "typeString": "literal_string \"!remote\""
                        },
                        "value": "!remote"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_b4cb45e2eca7e91596896d9d6d0088e023ee382fb860b627f6924eb294dd23de",
                          "typeString": "literal_string \"!remote\""
                        }
                      ],
                      "expression": {
                        "id": 29325,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "3344:2:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 29327,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "3344:15:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 29329,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3344:26:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29330,
                  "nodeType": "ExpressionStatement",
                  "src": "3344:26:32"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29334,
                        "name": "domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29322,
                        "src": "3410:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "expression": {
                        "id": 29331,
                        "name": "router",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28983,
                        "src": "3380:6:32",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_RouterHarness_$29690",
                          "typeString": "contract RouterHarness"
                        }
                      },
                      "id": 29333,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "exposed_mustHaveRemote",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29661,
                      "src": "3380:29:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint32_$returns$_t_bytes32_$",
                        "typeString": "function (uint32) view external returns (bytes32)"
                      }
                    },
                    "id": 29335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3380:37:32",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 29336,
                  "nodeType": "ExpressionStatement",
                  "src": "3380:37:32"
                }
              ]
            },
            "functionSelector": "c50e1df0",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_mustHaveRemoteFuzzed",
            "parameters": {
              "id": 29323,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29322,
                  "mutability": "mutable",
                  "name": "domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 29338,
                  "src": "3312:13:32",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 29321,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3312:6:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3311:15:32"
            },
            "returnParameters": {
              "id": 29324,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3334:0:32"
            },
            "scope": 29339,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 28980,
              "name": "Test",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4902,
              "src": "379:4:32",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Test_$4902",
                "typeString": "contract Test"
              }
            },
            "id": 28981,
            "nodeType": "InheritanceSpecifier",
            "src": "379:4:32"
          }
        ],
        "contractDependencies": [
          1786,
          2021,
          4902,
          28979,
          29690
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          29339,
          4902,
          2021,
          1786
        ],
        "name": "RouterTest",
        "scope": 29340
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 32
}