{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_router",
          "type": "bytes32"
        }
      ],
      "name": "enrollRemoteRouter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_xAppConnectionManager",
          "type": "address"
        }
      ],
      "name": "exposed__XAppConnectionClient_initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "router",
          "type": "bytes32"
        }
      ],
      "name": "exposed_isRemoteRouter",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        }
      ],
      "name": "exposed_mustHaveRemote",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "origin",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "nonce",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        }
      ],
      "name": "handle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "remotes",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_xAppConnectionManager",
          "type": "address"
        }
      ],
      "name": "setXAppConnectionManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "xAppConnectionManager",
      "outputs": [
        {
          "internalType": "contract XAppConnectionManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x608060405234801561001057600080fd5b50610f8c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80638da5cb5b11610081578063bac00be11161005b578063bac00be1146102a2578063c3578c2e146102d5578063f2fde38b146102f8576100c9565b80638da5cb5b146101ae578063ab2dc3f5146101b6578063b49c53a714610279576100c9565b806341bdc8b5116100b257806341bdc8b51461013c578063715018a61461017157806383bbb80614610179576100c9565b80633339df96146100ce5780633e4332d8146100ff575b600080fd5b6100d661032b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101286004803603604081101561011557600080fd5b5063ffffffff8135169060200135610347565b604080519115158252519081900360200190f35b61016f6004803603602081101561015257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661035a565b005b61016f610449565b61019c6004803603602081101561018f57600080fd5b503563ffffffff16610560565b60408051918252519081900360200190f35b6100d6610572565b61016f600480360360808110156101cc57600080fd5b63ffffffff82358116926020810135909116916040820135919081019060808101606082013564010000000081111561020457600080fd5b82018360208201111561021657600080fd5b8035906020019184600183028401116401000000008311171561023857600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061058e945050505050565b61016f6004803603604081101561028f57600080fd5b5063ffffffff8135169060200135610594565b61016f600480360360208110156102b857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106e8565b61019c600480360360208110156102eb57600080fd5b503563ffffffff166106f4565b61016f6004803603602081101561030e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610707565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b600061035383836108a9565b9392505050565b6103626108d0565b73ffffffffffffffffffffffffffffffffffffffff16610380610572565b73ffffffffffffffffffffffffffffffffffffffff161461040257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6104516108d0565b73ffffffffffffffffffffffffffffffffffffffff1661046f610572565b73ffffffffffffffffffffffffffffffffffffffff16146104f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60335460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60976020526000908152604090205481565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b50505050565b61059c6108d0565b73ffffffffffffffffffffffffffffffffffffffff166105ba610572565b73ffffffffffffffffffffffffffffffffffffffff161461063c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6106446108d4565b63ffffffff168263ffffffff1614158015610664575063ffffffff821615155b6106cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21646f6d61696e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff909116600090815260976020526040902055565b6106f181610970565b50565b60006106ff82610acd565b90505b919050565b61070f6108d0565b73ffffffffffffffffffffffffffffffffffffffff1661072d610572565b73ffffffffffffffffffffffffffffffffffffffff16146107af57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661081b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180610f2c6026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b63ffffffff8216600090815260976020526040812054821480156103535750501515919050565b3390565b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561093f57600080fd5b505afa158015610953573d6000803e3d6000fd5b505050506040513d602081101561096957600080fd5b5051905090565b600054610100900460ff16806109895750610989610b4f565b80610997575060005460ff16155b6109ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610f52602e913960400191505060405180910390fd5b600054610100900460ff16158015610a5257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055610a9a610b60565b8015610ac957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b63ffffffff81166000908152609760205260409020548061070257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f746500000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610b5a30610c83565b15905090565b600054610100900460ff1680610b795750610b79610b4f565b80610b87575060005460ff16155b610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610f52602e913960400191505060405180910390fd5b600054610100900460ff16158015610c4257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b610c4a610c89565b610c52610d9b565b80156106f157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b3b151590565b600054610100900460ff1680610ca25750610ca2610b4f565b80610cb0575060005460ff16155b610d05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610f52602e913960400191505060405180910390fd5b600054610100900460ff16158015610c5257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091166101001716600117905580156106f157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680610db45750610db4610b4f565b80610dc2575060005460ff16155b610e17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610f52602e913960400191505060405180910390fd5b600054610100900460ff16158015610e7d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000610e876108d0565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156106f157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a164736f6c6343000706000a",
    "sourceMap": "145:708:34:-:0;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106100c95760003560e01c80638da5cb5b11610081578063bac00be11161005b578063bac00be1146102a2578063c3578c2e146102d5578063f2fde38b146102f8576100c9565b80638da5cb5b146101ae578063ab2dc3f5146101b6578063b49c53a714610279576100c9565b806341bdc8b5116100b257806341bdc8b51461013c578063715018a61461017157806383bbb80614610179576100c9565b80633339df96146100ce5780633e4332d8146100ff575b600080fd5b6100d661032b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101286004803603604081101561011557600080fd5b5063ffffffff8135169060200135610347565b604080519115158252519081900360200190f35b61016f6004803603602081101561015257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661035a565b005b61016f610449565b61019c6004803603602081101561018f57600080fd5b503563ffffffff16610560565b60408051918252519081900360200190f35b6100d6610572565b61016f600480360360808110156101cc57600080fd5b63ffffffff82358116926020810135909116916040820135919081019060808101606082013564010000000081111561020457600080fd5b82018360208201111561021657600080fd5b8035906020019184600183028401116401000000008311171561023857600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061058e945050505050565b61016f6004803603604081101561028f57600080fd5b5063ffffffff8135169060200135610594565b61016f600480360360208110156102b857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106e8565b61019c600480360360208110156102eb57600080fd5b503563ffffffff166106f4565b61016f6004803603602081101561030e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610707565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b600061035383836108a9565b9392505050565b6103626108d0565b73ffffffffffffffffffffffffffffffffffffffff16610380610572565b73ffffffffffffffffffffffffffffffffffffffff161461040257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6104516108d0565b73ffffffffffffffffffffffffffffffffffffffff1661046f610572565b73ffffffffffffffffffffffffffffffffffffffff16146104f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60335460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60976020526000908152604090205481565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b50505050565b61059c6108d0565b73ffffffffffffffffffffffffffffffffffffffff166105ba610572565b73ffffffffffffffffffffffffffffffffffffffff161461063c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6106446108d4565b63ffffffff168263ffffffff1614158015610664575063ffffffff821615155b6106cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21646f6d61696e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff909116600090815260976020526040902055565b6106f181610970565b50565b60006106ff82610acd565b90505b919050565b61070f6108d0565b73ffffffffffffffffffffffffffffffffffffffff1661072d610572565b73ffffffffffffffffffffffffffffffffffffffff16146107af57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661081b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180610f2c6026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b63ffffffff8216600090815260976020526040812054821480156103535750501515919050565b3390565b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561093f57600080fd5b505afa158015610953573d6000803e3d6000fd5b505050506040513d602081101561096957600080fd5b5051905090565b600054610100900460ff16806109895750610989610b4f565b80610997575060005460ff16155b6109ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610f52602e913960400191505060405180910390fd5b600054610100900460ff16158015610a5257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055610a9a610b60565b8015610ac957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b63ffffffff81166000908152609760205260409020548061070257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f746500000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610b5a30610c83565b15905090565b600054610100900460ff1680610b795750610b79610b4f565b80610b87575060005460ff16155b610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610f52602e913960400191505060405180910390fd5b600054610100900460ff16158015610c4257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b610c4a610c89565b610c52610d9b565b80156106f157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b3b151590565b600054610100900460ff1680610ca25750610ca2610b4f565b80610cb0575060005460ff16155b610d05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610f52602e913960400191505060405180910390fd5b600054610100900460ff16158015610c5257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091166101001716600117905580156106f157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680610db45750610db4610b4f565b80610dc2575060005460ff16155b610e17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610f52602e913960400191505060405180910390fd5b600054610100900460ff16158015610e7d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000610e876108d0565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156106f157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a164736f6c6343000706000a",
    "sourceMap": "145:708:34:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;504:50:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;529:175:34;;;;;;;;;;;;;;;;-1:-1:-1;529:175:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1353:191:31;;;;;;;;;;;;;;;;-1:-1:-1;1353:191:31;;;;:::i;:::-;;1967:145:7;;;:::i;456:41:30:-;;;;;;;;;;;;;;;;-1:-1:-1;456:41:30;;;;:::i;:::-;;;;;;;;;;;;;;;;1335:85:7;;;:::i;710:141:34:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;710:141:34;;-1:-1:-1;710:141:34;;-1:-1:-1;;;;;710:141:34:i;1242:214:30:-;;;;;;;;;;;;;;;;-1:-1:-1;1242:214:30;;;;;;;;;:::i;184:179:34:-;;;;;;;;;;;;;;;;-1:-1:-1;184:179:34;;;;:::i;369:154::-;;;;;;;;;;;;;;;;-1:-1:-1;369:154:34;;;;:::i;2261:240:7:-;;;;;;;;;;;;;;;;-1:-1:-1;2261:240:7;;;;:::i;504:50:31:-;;;;;;:::o;529:175:34:-;639:4;666:31;682:6;690;666:15;:31::i;:::-;659:38;529:175;-1:-1:-1;;;529:175:34:o;1353:191:31:-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1468:21:31::1;:69:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1353:191::o;1967:145:7:-;1558:12;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2057:6:::1;::::0;2036:40:::1;::::0;2073:1:::1;::::0;2036:40:::1;2057:6;::::0;2036:40:::1;::::0;2073:1;;2036:40:::1;2086:6;:19:::0;;;::::1;::::0;;1967:145::o;456:41:30:-;;;;;;;;;;;;;:::o;1335:85:7:-;1407:6;;;;1335:85;:::o;710:141:34:-;;;;;:::o;1242:214:30:-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1371:14:30::1;:12;:14::i;:::-;1360:25;;:7;:25;;;;:41;;;;-1:-1:-1::0;1389:12:30::1;::::0;::::1;::::0;::::1;1360:41;1352:61;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;1423:16;::::0;;::::1;;::::0;;;:7:::1;:16;::::0;;;;:26;1242:214::o;184:179:34:-;299:57;333:22;299:33;:57::i;:::-;184:179;:::o;369:154::-;463:7;493:23;509:6;493:15;:23::i;:::-;486:30;;369:154;;;;:::o;2261:240:7:-;1558:12;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:22:::1;::::0;::::1;2341:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2450:6;::::0;2429:38:::1;::::0;::::1;::::0;;::::1;::::0;2450:6:::1;::::0;2429:38:::1;::::0;2450:6:::1;::::0;2429:38:::1;2477:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2261:240::o;1973:191:30:-;2105:16;;;2078:4;2105:16;;;:7;:16;;;;;;:27;;:52;;;;-1:-1:-1;;2136:21:30;;;1973:191;-1:-1:-1;1973:191:30:o;828:104:10:-;915:10;828:104;:::o;2391:122:31:-;2471:21;;:35;;;;;;;;2446:6;;2471:21;;;:33;;:35;;;;;;;;;;;;;;:21;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2471:35:31;;-1:-1:-1;2391:122:31;:::o;884:228::-;1512:13:8;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:8;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;1010:21:31::1;:69:::0;;;::::1;;::::0;::::1;;::::0;;1089:16:::1;:14;:16::i;:::-;1794:14:8::0;1790:66;;;1840:5;1824:21;;;;;;1790:66;884:228:31;;:::o;2433:203:30:-;2562:16;;;2521:15;2562:16;;;:7;:16;;;;;;2596:21;2588:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1952:123:8;2000:4;2024:44;2062:4;2024:29;:44::i;:::-;2023:45;2016:52;;1952:123;:::o;935:126:7:-;1512:13:8;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:8;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;992:26:7::1;:24;:26::i;:::-;1028;:24;:26::i;:::-;1794:14:8::0;1790:66;;;1840:5;1824:21;;;;;;935:126:7;:::o;737:413:9:-;1097:20;1135:8;;;737:413::o;759:64:10:-;1512:13:8;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:8;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1794:14;1790:66;;;1840:5;1824:21;;;;;;759:64:10;:::o;1067:192:7:-;1512:13:8;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:8;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;1134:17:7::1;1154:12;:10;:12::i;:::-;1176:6;:18:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;1209:43:::1;::::0;1176:18;;-1:-1:-1;1176:18:7;-1:-1:-1;;1209:43:7::1;::::0;-1:-1:-1;;1209:43:7::1;1778:1:8;1794:14:::0;1790:66;;;1840:5;1824:21;;;;;;1067:192:7;:::o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "enrollRemoteRouter(uint32,bytes32)": "b49c53a7",
    "exposed__XAppConnectionClient_initialize(address)": "bac00be1",
    "exposed_isRemoteRouter(uint32,bytes32)": "3e4332d8",
    "exposed_mustHaveRemote(uint32)": "c3578c2e",
    "handle(uint32,uint32,bytes32,bytes)": "ab2dc3f5",
    "owner()": "8da5cb5b",
    "remotes(uint32)": "83bbb806",
    "renounceOwnership()": "715018a6",
    "setXAppConnectionManager(address)": "41bdc8b5",
    "transferOwnership(address)": "f2fde38b",
    "xAppConnectionManager()": "3339df96"
  },
  "ast": {
    "absolutePath": "packages/contracts-router/contracts/test/harnesses/RouterHarness.sol",
    "id": 29691,
    "exportedSymbols": {
      "Router": [
        28855
      ],
      "RouterHarness": [
        29690
      ],
      "console2": [
        23037
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:808:34",
    "nodes": [
      {
        "id": 29634,
        "nodeType": "PragmaDirective",
        "src": "46:22:34",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 29636,
        "nodeType": "ImportDirective",
        "src": "70:40:34",
        "absolutePath": "packages/contracts-router/contracts/Router.sol",
        "file": "../../Router.sol",
        "scope": 29691,
        "sourceUnit": 28856,
        "symbolAliases": [
          {
            "foreign": {
              "id": 29635,
              "name": "Router",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "78:6:34",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 29637,
        "nodeType": "ImportDirective",
        "src": "111:32:34",
        "absolutePath": "lib/forge-std/src/console2.sol",
        "file": "forge-std/console2.sol",
        "scope": 29691,
        "sourceUnit": 23038,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 29690,
        "nodeType": "ContractDefinition",
        "src": "145:708:34",
        "nodes": [
          {
            "id": 29649,
            "nodeType": "FunctionDefinition",
            "src": "184:179:34",
            "body": {
              "id": 29648,
              "nodeType": "Block",
              "src": "289:74:34",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29645,
                        "name": "_xAppConnectionManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29641,
                        "src": "333:22:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 29644,
                      "name": "__XAppConnectionClient_initialize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28901,
                      "src": "299:33:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 29646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "299:57:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29647,
                  "nodeType": "ExpressionStatement",
                  "src": "299:57:34"
                }
              ]
            },
            "functionSelector": "bac00be1",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "exposed__XAppConnectionClient_initialize",
            "parameters": {
              "id": 29642,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29641,
                  "mutability": "mutable",
                  "name": "_xAppConnectionManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 29649,
                  "src": "243:30:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 29640,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "243:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "233:46:34"
            },
            "returnParameters": {
              "id": 29643,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "289:0:34"
            },
            "scope": 29690,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 29661,
            "nodeType": "FunctionDefinition",
            "src": "369:154:34",
            "body": {
              "id": 29660,
              "nodeType": "Block",
              "src": "476:47:34",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29657,
                        "name": "domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29651,
                        "src": "509:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 29656,
                      "name": "_mustHaveRemote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28854,
                      "src": "493:15:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint32_$returns$_t_bytes32_$",
                        "typeString": "function (uint32) view returns (bytes32)"
                      }
                    },
                    "id": 29658,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "493:23:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 29655,
                  "id": 29659,
                  "nodeType": "Return",
                  "src": "486:30:34"
                }
              ]
            },
            "functionSelector": "c3578c2e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "exposed_mustHaveRemote",
            "parameters": {
              "id": 29652,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29651,
                  "mutability": "mutable",
                  "name": "domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 29661,
                  "src": "401:13:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 29650,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "401:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "400:15:34"
            },
            "returnParameters": {
              "id": 29655,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29654,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29661,
                  "src": "463:7:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29653,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "463:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "462:9:34"
            },
            "scope": 29690,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 29676,
            "nodeType": "FunctionDefinition",
            "src": "529:175:34",
            "body": {
              "id": 29675,
              "nodeType": "Block",
              "src": "649:55:34",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 29671,
                        "name": "domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29663,
                        "src": "682:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 29672,
                        "name": "router",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29665,
                        "src": "690:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 29670,
                      "name": "_isRemoteRouter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28829,
                      "src": "666:15:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint32_$_t_bytes32_$returns$_t_bool_$",
                        "typeString": "function (uint32,bytes32) view returns (bool)"
                      }
                    },
                    "id": 29673,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "666:31:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 29669,
                  "id": 29674,
                  "nodeType": "Return",
                  "src": "659:38:34"
                }
              ]
            },
            "functionSelector": "3e4332d8",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "exposed_isRemoteRouter",
            "parameters": {
              "id": 29666,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29663,
                  "mutability": "mutable",
                  "name": "domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 29676,
                  "src": "561:13:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 29662,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "561:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29665,
                  "mutability": "mutable",
                  "name": "router",
                  "nodeType": "VariableDeclaration",
                  "scope": 29676,
                  "src": "576:14:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29664,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "576:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "560:31:34"
            },
            "returnParameters": {
              "id": 29669,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29668,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 29676,
                  "src": "639:4:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 29667,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "639:4:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "638:6:34"
            },
            "scope": 29690,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 29689,
            "nodeType": "FunctionDefinition",
            "src": "710:141:34",
            "body": {
              "id": 29688,
              "nodeType": "Block",
              "src": "849:2:34",
              "statements": []
            },
            "baseFunctions": [
              28805
            ],
            "functionSelector": "ab2dc3f5",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "handle",
            "overrides": {
              "id": 29686,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "840:8:34"
            },
            "parameters": {
              "id": 29685,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29678,
                  "mutability": "mutable",
                  "name": "origin",
                  "nodeType": "VariableDeclaration",
                  "scope": 29689,
                  "src": "735:13:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 29677,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "735:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29680,
                  "mutability": "mutable",
                  "name": "nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 29689,
                  "src": "758:12:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 29679,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "758:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29682,
                  "mutability": "mutable",
                  "name": "sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 29689,
                  "src": "780:14:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29681,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "780:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29684,
                  "mutability": "mutable",
                  "name": "message",
                  "nodeType": "VariableDeclaration",
                  "scope": 29689,
                  "src": "804:20:34",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 29683,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "804:5:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "725:105:34"
            },
            "returnParameters": {
              "id": 29687,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "849:0:34"
            },
            "scope": 29690,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 29638,
              "name": "Router",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 28855,
              "src": "171:6:34",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Router_$28855",
                "typeString": "contract Router"
              }
            },
            "id": 29639,
            "nodeType": "InheritanceSpecifier",
            "src": "171:6:34"
          }
        ],
        "contractDependencies": [
          23168,
          23234,
          23523,
          27418,
          28855,
          28953
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          29690,
          28855,
          27418,
          28953,
          23168,
          23523,
          23234
        ],
        "name": "RouterHarness",
        "scope": 29691
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 34
}