{
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "replica",
          "type": "address"
        }
      ],
      "name": "ReplicaEnrolled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "replica",
          "type": "address"
        }
      ],
      "name": "ReplicaUnenrolled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "watcher",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "access",
          "type": "bool"
        }
      ],
      "name": "WatcherPermissionSet",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "domainToReplica",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "home",
      "outputs": [
        {
          "internalType": "contract Home",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_replica",
          "type": "address"
        }
      ],
      "name": "isReplica",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "localDomain",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_replica",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        }
      ],
      "name": "ownerEnrollReplica",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_replica",
          "type": "address"
        }
      ],
      "name": "ownerUnenrollReplica",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "replicaToDomain",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_home",
          "type": "address"
        }
      ],
      "name": "setHome",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_watcher",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bool",
          "name": "_access",
          "type": "bool"
        }
      ],
      "name": "setWatcherPermission",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_updater",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "unenrollReplica",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_watcher",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        }
      ],
      "name": "watcherPermission",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6115048061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638f5d90e01161008c578063b9cff16211610066578063b9cff162146102b9578063e0e7a913146102dc578063f2fde38b14610394578063f31faefb146103c7576100ea565b80638f5d90e014610237578063916c34701461026a5780639fa92f9d146102b1576100ea565b80636ef0f37f116100c85780636ef0f37f146101c1578063715018a6146101f65780638d3638f4146101fe5780638da5cb5b14610206576100ea565b8063427ebef5146100ef5780635190bc53146101425780635f8b1dba14610175575b600080fd5b61012e6004803603604081101561010557600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16610406565b604080519115158252519081900360200190f35b61012e6004803603602081101561015857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610446565b6101a86004803603602081101561018b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610476565b6040805163ffffffff9092168252519081900360200190f35b6101f4600480360360208110156101d757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661048e565b005b6101f461057d565b6101a8610627565b61020e6106c3565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101f46004803603602081101561024d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106df565b6101f46004803603606081101561028057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169063ffffffff60208201351690604001351515610793565b61020e6108e1565b61020e600480360360208110156102cf57600080fd5b503563ffffffff166108fd565b6101f4600480360360608110156102f257600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561031f57600080fd5b82018360208201111561033157600080fd5b8035906020019184600183028401116401000000008311171561035357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610925945050505050565b6101f4600480360360208110156103aa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b9e565b6101f4600480360360408110156103dd57600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16610d3f565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020908152604080832063ffffffff8516845290915290205460ff1692915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205463ffffffff16151590565b60026020526000908152604090205463ffffffff1681565b610496610ebc565b73ffffffffffffffffffffffffffffffffffffffff166104b46106c3565b73ffffffffffffffffffffffffffffffffffffffff161461053657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610585610ebc565b73ffffffffffffffffffffffffffffffffffffffff166105a36106c3565b73ffffffffffffffffffffffffffffffffffffffff161461062557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b600154604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561069257600080fd5b505afa1580156106a6573d6000803e3d6000fd5b505050506040513d60208110156106bc57600080fd5b5051905090565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6106e7610ebc565b73ffffffffffffffffffffffffffffffffffffffff166107056106c3565b73ffffffffffffffffffffffffffffffffffffffff161461078757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61079081610ec0565b50565b61079b610ebc565b73ffffffffffffffffffffffffffffffffffffffff166107b96106c3565b73ffffffffffffffffffffffffffffffffffffffff161461083b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600081815260046020908152604080832063ffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815194855291840191909152805191927f517de16b526853f481451c5151e87484e1b251ec7d0302efa1019c2ece179c2c929081900390910190a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b63ffffffff831660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16806109bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f217265706c696361206578697374730000000000000000000000000000000000604482015290519081900360640190fd5b6109c683610fad565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663df034cd06040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d6020811015610a4c57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614610ad057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f2163757272656e74207570646174657200000000000000000000000000000000604482015290519081900360640190fd5b6000610ae685610adf84610fb0565b8686610fc9565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604080832063ffffffff8a16845290915290205490915060ff16610b8e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2176616c69642077617463686572000000000000000000000000000000000000604482015290519081900360640190fd5b610b9782610ec0565b5050505050565b610ba6610ebc565b73ffffffffffffffffffffffffffffffffffffffff16610bc46106c3565b73ffffffffffffffffffffffffffffffffffffffff1614610c4657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610cb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061148e6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610d47610ebc565b73ffffffffffffffffffffffffffffffffffffffff16610d656106c3565b73ffffffffffffffffffffffffffffffffffffffff1614610de757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610df082610ec0565b610df9816110bf565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8716908117909155808452600383529281902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168517905580519384525191927f8440df9bf8a8542634a9eb196da1735b786ed9aa2fc12b080ac34c5fa81a9234929081900390910190a25050565b3390565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205463ffffffff168015610fa95763ffffffff8116600081815260036020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff8616808452600283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690558051928352517fce1533133fb359ace801d3176bbad25ace030d714aed35e38a6293c8a60b115b9281900390910190a25b5050565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b600080610fd585610fad565b73ffffffffffffffffffffffffffffffffffffffff166345630b1a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561101a57600080fd5b505afa15801561102e573d6000803e3d6000fd5b505050506040513d602081101561104457600080fd5b50516040805160208181018490527fffffffff0000000000000000000000000000000000000000000000000000000060e08b901b1682840152604480830189905283518084039091018152606490920190925280519101209091506110a8816111ab565b90506110b481856111fc565b979650505050505050565b63ffffffff811660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff168015610fa95763ffffffff8216600081815260036020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff8516808452600283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690558051928352517fce1533133fb359ace801d3176bbad25ace030d714aed35e38a6293c8a60b115b9281900390910190a25050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461126e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61128c86828585611296565b9695505050505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611311576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114b46022913960400191505060405180910390fd5b8360ff16601b148061132657508360ff16601c145b61137b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114d66022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156113d7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661148457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565a164736f6c6343000706000a",
    "sourceMap": "667:7759:69:-:0;;;2275:26;;;;;;;;;-1:-1:-1;884:17:22;904:12;:10;:12::i;:::-;926:6;:18;;-1:-1:-1;926:18:22;-1:-1:-1;926:18:22;;;;;;;959:43;;926:18;;-1:-1:-1;926:18:22;959:43;;926:6;;959:43;850:159;667:7759:69;;598:104:30;685:10;598:104;:::o;667:7759:69:-;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638f5d90e01161008c578063b9cff16211610066578063b9cff162146102b9578063e0e7a913146102dc578063f2fde38b14610394578063f31faefb146103c7576100ea565b80638f5d90e014610237578063916c34701461026a5780639fa92f9d146102b1576100ea565b80636ef0f37f116100c85780636ef0f37f146101c1578063715018a6146101f65780638d3638f4146101fe5780638da5cb5b14610206576100ea565b8063427ebef5146100ef5780635190bc53146101425780635f8b1dba14610175575b600080fd5b61012e6004803603604081101561010557600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16610406565b604080519115158252519081900360200190f35b61012e6004803603602081101561015857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610446565b6101a86004803603602081101561018b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610476565b6040805163ffffffff9092168252519081900360200190f35b6101f4600480360360208110156101d757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661048e565b005b6101f461057d565b6101a8610627565b61020e6106c3565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101f46004803603602081101561024d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106df565b6101f46004803603606081101561028057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169063ffffffff60208201351690604001351515610793565b61020e6108e1565b61020e600480360360208110156102cf57600080fd5b503563ffffffff166108fd565b6101f4600480360360608110156102f257600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561031f57600080fd5b82018360208201111561033157600080fd5b8035906020019184600183028401116401000000008311171561035357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610925945050505050565b6101f4600480360360208110156103aa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b9e565b6101f4600480360360408110156103dd57600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16610d3f565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020908152604080832063ffffffff8516845290915290205460ff1692915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205463ffffffff16151590565b60026020526000908152604090205463ffffffff1681565b610496610ebc565b73ffffffffffffffffffffffffffffffffffffffff166104b46106c3565b73ffffffffffffffffffffffffffffffffffffffff161461053657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610585610ebc565b73ffffffffffffffffffffffffffffffffffffffff166105a36106c3565b73ffffffffffffffffffffffffffffffffffffffff161461062557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b600154604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561069257600080fd5b505afa1580156106a6573d6000803e3d6000fd5b505050506040513d60208110156106bc57600080fd5b5051905090565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6106e7610ebc565b73ffffffffffffffffffffffffffffffffffffffff166107056106c3565b73ffffffffffffffffffffffffffffffffffffffff161461078757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61079081610ec0565b50565b61079b610ebc565b73ffffffffffffffffffffffffffffffffffffffff166107b96106c3565b73ffffffffffffffffffffffffffffffffffffffff161461083b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600081815260046020908152604080832063ffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815194855291840191909152805191927f517de16b526853f481451c5151e87484e1b251ec7d0302efa1019c2ece179c2c929081900390910190a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b63ffffffff831660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16806109bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f217265706c696361206578697374730000000000000000000000000000000000604482015290519081900360640190fd5b6109c683610fad565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663df034cd06040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d6020811015610a4c57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614610ad057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f2163757272656e74207570646174657200000000000000000000000000000000604482015290519081900360640190fd5b6000610ae685610adf84610fb0565b8686610fc9565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604080832063ffffffff8a16845290915290205490915060ff16610b8e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2176616c69642077617463686572000000000000000000000000000000000000604482015290519081900360640190fd5b610b9782610ec0565b5050505050565b610ba6610ebc565b73ffffffffffffffffffffffffffffffffffffffff16610bc46106c3565b73ffffffffffffffffffffffffffffffffffffffff1614610c4657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610cb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061148e6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610d47610ebc565b73ffffffffffffffffffffffffffffffffffffffff16610d656106c3565b73ffffffffffffffffffffffffffffffffffffffff1614610de757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610df082610ec0565b610df9816110bf565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8716908117909155808452600383529281902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168517905580519384525191927f8440df9bf8a8542634a9eb196da1735b786ed9aa2fc12b080ac34c5fa81a9234929081900390910190a25050565b3390565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205463ffffffff168015610fa95763ffffffff8116600081815260036020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff8616808452600283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690558051928352517fce1533133fb359ace801d3176bbad25ace030d714aed35e38a6293c8a60b115b9281900390910190a25b5050565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b600080610fd585610fad565b73ffffffffffffffffffffffffffffffffffffffff166345630b1a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561101a57600080fd5b505afa15801561102e573d6000803e3d6000fd5b505050506040513d602081101561104457600080fd5b50516040805160208181018490527fffffffff0000000000000000000000000000000000000000000000000000000060e08b901b1682840152604480830189905283518084039091018152606490920190925280519101209091506110a8816111ab565b90506110b481856111fc565b979650505050505050565b63ffffffff811660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff168015610fa95763ffffffff8216600081815260036020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff8516808452600283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690558051928352517fce1533133fb359ace801d3176bbad25ace030d714aed35e38a6293c8a60b115b9281900390910190a25050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461126e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61128c86828585611296565b9695505050505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611311576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114b46022913960400191505060405180910390fd5b8360ff16601b148061132657508360ff16601c145b61137b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114d66022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156113d7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661148457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565a164736f6c6343000706000a",
    "sourceMap": "667:7759:69:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6026:179;;;;;;;;;;;;;;;;-1:-1:-1;6026:179:69;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6432:118;;;;;;;;;;;;;;;;-1:-1:-1;6432:118:69;;;;:::i;858:49::-;;;;;;;;;;;;;;;;-1:-1:-1;858:49:69;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4049:86;;;;;;;;;;;;;;;;-1:-1:-1;4049:86:69;;;;:::i;:::-;;8340:84;;;:::i;5643:96::-;;;:::i;1085:85:22:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4883:107:69;;;;;;;;;;;;;;;;-1:-1:-1;4883:107:69;;;;:::i;5295:254::-;;;;;;;;;;;;;;;;-1:-1:-1;5295:254:69;;;;;;;;;;;;;;;;;;:::i;785:16::-;;;:::i;964:49::-;;;;;;;;;;;;;;;;-1:-1:-1;964:49:69;;;;:::i;2950:960::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2950:960:69;;-1:-1:-1;2950:960:69;;-1:-1:-1;;;;;2950:960:69:i;2011:240:22:-;;;;;;;;;;;;;;;;-1:-1:-1;2011:240:22;;;;:::i;4338:416:69:-;;;;;;;;;;;;;;;;-1:-1:-1;4338:416:69;;;;;;;;;;;:::i;6026:179::-;6161:28;;;6134:4;6161:28;;;:18;:28;;;;;;;;:37;;;;;;;;;;;;;6026:179;;;;:::o;6432:118::-;6513:25;;6490:4;6513:25;;;:15;:25;;;;;;;;:30;;;6432:118::o;858:49::-;;;;;;;;;;;;;;;:::o;4049:86::-;1308:12:22;:10;:12::i;:::-;1297:23;;:7;:5;:7::i;:::-;:23;;;1289:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4110:4:69::1;:18:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;4049:86::o;8340:84::-;1308:12:22;:10;:12::i;:::-;1297:23;;:7;:5;:7::i;:::-;:23;;;1289:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8340:84:69:o;5643:96::-;5714:4;;:18;;;;;;;;5689:6;;5714:4;;;:16;;:18;;;;;;;;;;;;;;:4;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5714:18:69;;-1:-1:-1;5643:96:69;:::o;1085:85:22:-;1131:7;1157:6;;;1085:85;:::o;4883:107:69:-;1308:12:22;:10;:12::i;:::-;1297:23;;:7;:5;:7::i;:::-;:23;;;1289:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4960:23:69::1;4974:8;4960:13;:23::i;:::-;4883:107:::0;:::o;5295:254::-;1308:12:22;:10;:12::i;:::-;1297:23;;:7;:5;:7::i;:::-;:23;;;1289:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5432:28:69::1;::::0;::::1;;::::0;;;:18:::1;:28;::::0;;;;;;;:37:::1;::::0;::::1;::::0;;;;;;;;;;:47;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;5494:48;;;;;;;::::1;::::0;;;;;;5432:37;;5494:48:::1;::::0;;;;;;;;;::::1;5295:254:::0;;;:::o;785:16::-;;;;;;:::o;964:49::-;;;;;;;;;;;;;;;:::o;2950:960::-;3154:24;;;3135:16;3154:24;;;:15;:24;;;;;;;;3196:22;3188:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3362:36;3389:8;3362:26;:36::i;:::-;3331:67;;3339:8;3331:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3331:27:69;:67;;;3310:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3584:16;3603:149;3639:7;3660:36;3687:8;3660:26;:36::i;:::-;3710:8;3732:10;3603:22;:149::i;:::-;3770:28;;;;;;;:18;:28;;;;;;;;:37;;;;;;;;;;;3584:168;;-1:-1:-1;3770:37:69;;3762:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3880:23;3894:8;3880:13;:23::i;:::-;2950:960;;;;;:::o;2011:240:22:-;1308:12;:10;:12::i;:::-;1297:23;;:7;:5;:7::i;:::-;:23;;;1289:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2099:22:::1;::::0;::::1;2091:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2200:6;::::0;;2179:38:::1;::::0;::::1;::::0;;::::1;::::0;2200:6;::::1;::::0;2179:38:::1;::::0;::::1;2227:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2011:240::o;4338:416:69:-;1308:12:22;:10;:12::i;:::-;1297:23;;:7;:5;:7::i;:::-;:23;;;1289:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4501:23:69::1;4515:8;4501:13;:23::i;:::-;4534:21;4547:7;4534:12;:21::i;:::-;4618:25;::::0;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:35;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;4663:24;;;:15:::1;:24:::0;;;;;;:35;;;::::1;::::0;::::1;::::0;;4713:34;;;;;;4618:35;;4713:34:::1;::::0;;;;;;;;;::::1;4338:416:::0;;:::o;598:104:30:-;685:10;598:104;:::o;6729:324:69:-;6813:25;;;6789:21;6813:25;;;:15;:25;;;;;;;;6852:19;;6848:199;;6887:31;;;6929:1;6887:31;;;:15;:31;;;;;;;;:44;;;;;;;6945:25;;;;;:15;:25;;;;;;:29;;;;;;6993:43;;;;;;;;;;;;;;;;6848:199;6729:324;;:::o;1167:127:75:-;1280:4;1167:127::o;999:129::-;1097:23;;;999:129::o;7642:518:69:-;7812:7;7831:23;7865:36;7892:8;7865:26;:36::i;:::-;7857:73;;;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7857:75:69;7983:52;;;7857:75;7983:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7960:85;;;;;7857:75;;-1:-1:-1;8065:37:69;7960:85;8065:28;:37::i;:::-;8055:47;;8119:34;8133:7;8142:10;8119:13;:34::i;:::-;8112:41;7642:518;-1:-1:-1;;;;;;;7642:518:69:o;7175:332::-;7258:24;;;7232:23;7258:24;;;:15;:24;;;;;;;;7296:29;;7292:209;;7341:24;;;7376:1;7341:24;;;:15;:24;;;;;;;;:37;;;;;;;7392:32;;;;;:15;:32;;;;;;:36;;;;;;7447:43;;;;;;;;;;;;;;;;7175:332;;:::o;3638:265:23:-;3837:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3827:69;;;;;;3638:265::o;1072:740::-;1150:7;1211:9;:16;1231:2;1211:22;1207:94;;1249:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1207:94;1651:4;1636:20;;1630:27;1696:4;1681:20;;1675:27;1749:4;1734:20;;1728:27;1367:9;1720:36;1783:22;1791:4;1720:36;1630:27;1675;1783:7;:22::i;:::-;1776:29;1072:740;-1:-1:-1;;;;;;1072:740:23:o;1960:1414::-;2045:7;2960:66;2946:80;;;2938:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3083:1;:7;;3088:2;3083:7;:18;;;;3094:1;:7;;3099:2;3094:7;3083:18;3075:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3235:14;3252:24;3262:4;3268:1;3271;3274;3252:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3252:24:23;;;;;;-1:-1:-1;;3294:20:23;;;3286:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3361:6;1960:1414;-1:-1:-1;;;;;1960:1414:23:o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "domainToReplica(uint32)": "b9cff162",
    "home()": "9fa92f9d",
    "isReplica(address)": "5190bc53",
    "localDomain()": "8d3638f4",
    "owner()": "8da5cb5b",
    "ownerEnrollReplica(address,uint32)": "f31faefb",
    "ownerUnenrollReplica(address)": "8f5d90e0",
    "renounceOwnership()": "715018a6",
    "replicaToDomain(address)": "5f8b1dba",
    "setHome(address)": "6ef0f37f",
    "setWatcherPermission(address,uint32,bool)": "916c3470",
    "transferOwnership(address)": "f2fde38b",
    "unenrollReplica(uint32,bytes32,bytes)": "e0e7a913",
    "watcherPermission(address,uint32)": "427ebef5"
  },
  "ast": {
    "absolutePath": "packages/contracts-core/contracts/XAppConnectionManager.sol",
    "id": 45021,
    "exportedSymbols": {
      "ECDSA": [
        26496
      ],
      "Home": [
        43790
      ],
      "Ownable": [
        26380
      ],
      "Replica": [
        44615
      ],
      "TypeCasts": [
        46345
      ],
      "XAppConnectionManager": [
        45020
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:8381:69",
    "nodes": [
      {
        "id": 44624,
        "nodeType": "PragmaDirective",
        "src": "46:22:69",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 44626,
        "nodeType": "ImportDirective",
        "src": "116:32:69",
        "absolutePath": "packages/contracts-core/contracts/Home.sol",
        "file": "./Home.sol",
        "scope": 45021,
        "sourceUnit": 43791,
        "symbolAliases": [
          {
            "foreign": {
              "id": 44625,
              "name": "Home",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:4:69",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 44628,
        "nodeType": "ImportDirective",
        "src": "149:38:69",
        "absolutePath": "packages/contracts-core/contracts/Replica.sol",
        "file": "./Replica.sol",
        "scope": 45021,
        "sourceUnit": 44616,
        "symbolAliases": [
          {
            "foreign": {
              "id": 44627,
              "name": "Replica",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "157:7:69",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 44630,
        "nodeType": "ImportDirective",
        "src": "188:47:69",
        "absolutePath": "packages/contracts-core/contracts/libs/TypeCasts.sol",
        "file": "./libs/TypeCasts.sol",
        "scope": 45021,
        "sourceUnit": 46346,
        "symbolAliases": [
          {
            "foreign": {
              "id": 44629,
              "name": "TypeCasts",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "196:9:69",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 44632,
        "nodeType": "ImportDirective",
        "src": "282:69:69",
        "absolutePath": "node_modules/@openzeppelin/contracts/cryptography/ECDSA.sol",
        "file": "@openzeppelin/contracts/cryptography/ECDSA.sol",
        "scope": 45021,
        "sourceUnit": 26497,
        "symbolAliases": [
          {
            "foreign": {
              "id": 44631,
              "name": "ECDSA",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "290:5:69",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 44634,
        "nodeType": "ImportDirective",
        "src": "352:67:69",
        "absolutePath": "node_modules/@openzeppelin/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "scope": 45021,
        "sourceUnit": 26381,
        "symbolAliases": [
          {
            "foreign": {
              "id": 44633,
              "name": "Ownable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "360:7:69",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 45020,
        "nodeType": "ContractDefinition",
        "src": "667:7759:69",
        "nodes": [
          {
            "id": 44639,
            "nodeType": "VariableDeclaration",
            "src": "785:16:69",
            "constant": false,
            "functionSelector": "9fa92f9d",
            "mutability": "mutable",
            "name": "home",
            "scope": 45020,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Home_$43790",
              "typeString": "contract Home"
            },
            "typeName": {
              "id": 44638,
              "name": "Home",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 43790,
              "src": "785:4:69",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Home_$43790",
                "typeString": "contract Home"
              }
            },
            "visibility": "public"
          },
          {
            "id": 44643,
            "nodeType": "VariableDeclaration",
            "src": "858:49:69",
            "constant": false,
            "functionSelector": "5f8b1dba",
            "mutability": "mutable",
            "name": "replicaToDomain",
            "scope": 45020,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$",
              "typeString": "mapping(address => uint32)"
            },
            "typeName": {
              "id": 44642,
              "keyType": {
                "id": 44640,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "866:7:69",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "858:26:69",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$",
                "typeString": "mapping(address => uint32)"
              },
              "valueType": {
                "id": 44641,
                "name": "uint32",
                "nodeType": "ElementaryTypeName",
                "src": "877:6:69",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 44647,
            "nodeType": "VariableDeclaration",
            "src": "964:49:69",
            "constant": false,
            "functionSelector": "b9cff162",
            "mutability": "mutable",
            "name": "domainToReplica",
            "scope": 45020,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint32_$_t_address_$",
              "typeString": "mapping(uint32 => address)"
            },
            "typeName": {
              "id": 44646,
              "keyType": {
                "id": 44644,
                "name": "uint32",
                "nodeType": "ElementaryTypeName",
                "src": "972:6:69",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                }
              },
              "nodeType": "Mapping",
              "src": "964:26:69",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint32_$_t_address_$",
                "typeString": "mapping(uint32 => address)"
              },
              "valueType": {
                "id": 44645,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "982:7:69",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 44653,
            "nodeType": "VariableDeclaration",
            "src": "1098:70:69",
            "constant": false,
            "mutability": "mutable",
            "name": "watcherPermissions",
            "scope": 45020,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_bool_$_$",
              "typeString": "mapping(address => mapping(uint32 => bool))"
            },
            "typeName": {
              "id": 44652,
              "keyType": {
                "id": 44648,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1106:7:69",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1098:43:69",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_bool_$_$",
                "typeString": "mapping(address => mapping(uint32 => bool))"
              },
              "valueType": {
                "id": 44651,
                "keyType": {
                  "id": 44649,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1125:6:69",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "nodeType": "Mapping",
                "src": "1117:23:69",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint32_$_t_bool_$",
                  "typeString": "mapping(uint32 => bool)"
                },
                "valueType": {
                  "id": 44650,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "1135:4:69",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "id": 44660,
            "nodeType": "EventDefinition",
            "src": "1419:62:69",
            "anonymous": false,
            "documentation": {
              "id": 44654,
              "nodeType": "StructuredDocumentation",
              "src": "1216:198:69",
              "text": " @notice Emitted when a new Replica is enrolled / added\n @param domain the remote domain of the Home contract for the Replica\n @param replica the address of the Replica"
            },
            "name": "ReplicaEnrolled",
            "parameters": {
              "id": 44659,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44656,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 44660,
                  "src": "1441:21:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 44655,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1441:6:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44658,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "replica",
                  "nodeType": "VariableDeclaration",
                  "scope": 44660,
                  "src": "1464:15:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 44657,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1464:7:69",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1440:40:69"
            }
          },
          {
            "id": 44667,
            "nodeType": "EventDefinition",
            "src": "1695:64:69",
            "anonymous": false,
            "documentation": {
              "id": 44661,
              "nodeType": "StructuredDocumentation",
              "src": "1487:203:69",
              "text": " @notice Emitted when a new Replica is un-enrolled / removed\n @param domain the remote domain of the Home contract for the Replica\n @param replica the address of the Replica"
            },
            "name": "ReplicaUnenrolled",
            "parameters": {
              "id": 44666,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44663,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 44667,
                  "src": "1719:21:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 44662,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1719:6:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44665,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "replica",
                  "nodeType": "VariableDeclaration",
                  "scope": 44667,
                  "src": "1742:15:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 44664,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1742:7:69",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1718:40:69"
            }
          },
          {
            "id": 44676,
            "nodeType": "EventDefinition",
            "src": "2064:110:69",
            "anonymous": false,
            "documentation": {
              "id": 44668,
              "nodeType": "StructuredDocumentation",
              "src": "1765:294:69",
              "text": " @notice Emitted when Watcher permissions are changed\n @param domain the remote domain of the Home contract for the Replica\n @param watcher the address of the Watcher\n @param access TRUE if the Watcher was given permissions, FALSE if permissions were removed"
            },
            "name": "WatcherPermissionSet",
            "parameters": {
              "id": 44675,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44670,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 44676,
                  "src": "2100:21:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 44669,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2100:6:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44672,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "watcher",
                  "nodeType": "VariableDeclaration",
                  "scope": 44676,
                  "src": "2131:15:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 44671,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2131:7:69",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44674,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "access",
                  "nodeType": "VariableDeclaration",
                  "scope": 44676,
                  "src": "2156:11:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 44673,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2156:4:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2090:83:69"
            }
          },
          {
            "id": 44682,
            "nodeType": "FunctionDefinition",
            "src": "2275:26:69",
            "body": {
              "id": 44681,
              "nodeType": "Block",
              "src": "2299:2:69",
              "statements": []
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [],
                "id": 44679,
                "modifierName": {
                  "id": 44678,
                  "name": "Ownable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 26380,
                  "src": "2289:7:69",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Ownable_$26380_$",
                    "typeString": "type(contract Ownable)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2289:9:69"
              }
            ],
            "name": "",
            "parameters": {
              "id": 44677,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2286:2:69"
            },
            "returnParameters": {
              "id": 44680,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2299:0:69"
            },
            "scope": 45020,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 44748,
            "nodeType": "FunctionDefinition",
            "src": "2950:960:69",
            "body": {
              "id": 44747,
              "nodeType": "Block",
              "src": "3073:837:69",
              "statements": [
                {
                  "assignments": [
                    44693
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 44693,
                      "mutability": "mutable",
                      "name": "_replica",
                      "nodeType": "VariableDeclaration",
                      "scope": 44747,
                      "src": "3135:16:69",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 44692,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3135:7:69",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 44697,
                  "initialValue": {
                    "baseExpression": {
                      "id": 44694,
                      "name": "domainToReplica",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44647,
                      "src": "3154:15:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint32_$_t_address_$",
                        "typeString": "mapping(uint32 => address)"
                      }
                    },
                    "id": 44696,
                    "indexExpression": {
                      "id": 44695,
                      "name": "_domain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44685,
                      "src": "3170:7:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3154:24:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3135:43:69"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 44704,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 44699,
                          "name": "_replica",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44693,
                          "src": "3196:8:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 44702,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3216:1:69",
                              "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": 44701,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3208:7:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 44700,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3208:7:69",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 44703,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3208:10:69",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3196:22:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "217265706c69636120657869737473",
                        "id": 44705,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3220:17:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1cce8f4e8e4d2b5f114e9c69e4e2ce7c19bf5ee50744f3ffec65b93651aa2d68",
                          "typeString": "literal_string \"!replica exists\""
                        },
                        "value": "!replica exists"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1cce8f4e8e4d2b5f114e9c69e4e2ce7c19bf5ee50744f3ffec65b93651aa2d68",
                          "typeString": "literal_string \"!replica exists\""
                        }
                      ],
                      "id": 44698,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3188:7:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 44706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3188:50:69",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44707,
                  "nodeType": "ExpressionStatement",
                  "src": "3188:50:69"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 44718,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 44710,
                                  "name": "_replica",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 44693,
                                  "src": "3339:8:69",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 44709,
                                "name": "Replica",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 44615,
                                "src": "3331:7:69",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Replica_$44615_$",
                                  "typeString": "type(contract Replica)"
                                }
                              },
                              "id": 44711,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3331:17:69",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Replica_$44615",
                                "typeString": "contract Replica"
                              }
                            },
                            "id": 44712,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "updater",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 43849,
                            "src": "3331:25:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 44713,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3331:27:69",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 44716,
                              "name": "_updater",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44687,
                              "src": "3389:8:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 44714,
                              "name": "TypeCasts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 46345,
                              "src": "3362:9:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_TypeCasts_$46345_$",
                                "typeString": "type(library TypeCasts)"
                              }
                            },
                            "id": 44715,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "bytes32ToAddress",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 46344,
                            "src": "3362:26:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) pure returns (address)"
                            }
                          },
                          "id": 44717,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3362:36:69",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3331:67:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "2163757272656e742075706461746572",
                        "id": 44719,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3412:18:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2a6fb58e7588e05c178c596e25892db6b099bc79b87ee560344d57d54f192f03",
                          "typeString": "literal_string \"!current updater\""
                        },
                        "value": "!current updater"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2a6fb58e7588e05c178c596e25892db6b099bc79b87ee560344d57d54f192f03",
                          "typeString": "literal_string \"!current updater\""
                        }
                      ],
                      "id": 44708,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3310:7:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 44720,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3310:130:69",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44721,
                  "nodeType": "ExpressionStatement",
                  "src": "3310:130:69"
                },
                {
                  "assignments": [
                    44723
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 44723,
                      "mutability": "mutable",
                      "name": "_watcher",
                      "nodeType": "VariableDeclaration",
                      "scope": 44747,
                      "src": "3584:16:69",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 44722,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3584:7:69",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 44733,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 44725,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44685,
                        "src": "3639:7:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 44728,
                            "name": "_replica",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44693,
                            "src": "3687:8:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 44726,
                            "name": "TypeCasts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 46345,
                            "src": "3660:9:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_TypeCasts_$46345_$",
                              "typeString": "type(library TypeCasts)"
                            }
                          },
                          "id": 44727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "addressToBytes32",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46325,
                          "src": "3660:26:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                            "typeString": "function (address) pure returns (bytes32)"
                          }
                        },
                        "id": 44729,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3660:36:69",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 44730,
                        "name": "_updater",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44687,
                        "src": "3710:8:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 44731,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44689,
                        "src": "3732:10:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 44724,
                      "name": "_recoverWatcherFromSig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45011,
                      "src": "3603:22:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint32_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (uint32,bytes32,bytes32,bytes memory) view returns (address)"
                      }
                    },
                    "id": 44732,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3603:149:69",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3584:168:69"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 44735,
                            "name": "watcherPermissions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44653,
                            "src": "3770:18:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_bool_$_$",
                              "typeString": "mapping(address => mapping(uint32 => bool))"
                            }
                          },
                          "id": 44737,
                          "indexExpression": {
                            "id": 44736,
                            "name": "_watcher",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44723,
                            "src": "3789:8:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3770:28:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint32_$_t_bool_$",
                            "typeString": "mapping(uint32 => bool)"
                          }
                        },
                        "id": 44739,
                        "indexExpression": {
                          "id": 44738,
                          "name": "_domain",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44685,
                          "src": "3799:7:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3770:37:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "2176616c69642077617463686572",
                        "id": 44740,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3809:16:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f195e58cf6d3c35adc376adc2f2698efe3605d072d49b50d7723e39dd7232935",
                          "typeString": "literal_string \"!valid watcher\""
                        },
                        "value": "!valid watcher"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f195e58cf6d3c35adc376adc2f2698efe3605d072d49b50d7723e39dd7232935",
                          "typeString": "literal_string \"!valid watcher\""
                        }
                      ],
                      "id": 44734,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3762:7:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 44741,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3762:64:69",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44742,
                  "nodeType": "ExpressionStatement",
                  "src": "3762:64:69"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 44744,
                        "name": "_replica",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44693,
                        "src": "3894:8:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 44743,
                      "name": "_clearReplica",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44920,
                      "src": "3880:13:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 44745,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3880:23:69",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44746,
                  "nodeType": "ExpressionStatement",
                  "src": "3880:23:69"
                }
              ]
            },
            "documentation": {
              "id": 44683,
              "nodeType": "StructuredDocumentation",
              "src": "2360:585:69",
              "text": " @notice Un-Enroll a replica contract\n in the case that fraud was detected on the Home\n @dev in the future, if fraud occurs on the Home contract,\n the Watcher will submit their signature directly to the Home\n and it can be relayed to all remote chains to un-enroll the Replicas\n @param _domain the remote domain of the Home contract for the Replica\n @param _updater the address of the Updater for the Home contract (also stored on Replica)\n @param _signature signature of watcher on (domain, replica address, updater address)"
            },
            "functionSelector": "e0e7a913",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "unenrollReplica",
            "parameters": {
              "id": 44690,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44685,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 44748,
                  "src": "2984:14:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 44684,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2984:6:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44687,
                  "mutability": "mutable",
                  "name": "_updater",
                  "nodeType": "VariableDeclaration",
                  "scope": 44748,
                  "src": "3008:16:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 44686,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3008:7:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44689,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 44748,
                  "src": "3034:23:69",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 44688,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3034:5:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2974:89:69"
            },
            "returnParameters": {
              "id": 44691,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3073:0:69"
            },
            "scope": 45020,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 44763,
            "nodeType": "FunctionDefinition",
            "src": "4049:86:69",
            "body": {
              "id": 44762,
              "nodeType": "Block",
              "src": "4100:35:69",
              "statements": [
                {
                  "expression": {
                    "id": 44760,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 44756,
                      "name": "home",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44639,
                      "src": "4110:4:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Home_$43790",
                        "typeString": "contract Home"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 44758,
                          "name": "_home",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44751,
                          "src": "4122:5:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 44757,
                        "name": "Home",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43790,
                        "src": "4117:4:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Home_$43790_$",
                          "typeString": "type(contract Home)"
                        }
                      },
                      "id": 44759,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4117:11:69",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Home_$43790",
                        "typeString": "contract Home"
                      }
                    },
                    "src": "4110:18:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Home_$43790",
                      "typeString": "contract Home"
                    }
                  },
                  "id": 44761,
                  "nodeType": "ExpressionStatement",
                  "src": "4110:18:69"
                }
              ]
            },
            "documentation": {
              "id": 44749,
              "nodeType": "StructuredDocumentation",
              "src": "3916:128:69",
              "text": " @notice Set the address of the local Home contract\n @param _home the address of the local Home contract"
            },
            "functionSelector": "6ef0f37f",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 44754,
                "modifierName": {
                  "id": 44753,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 26329,
                  "src": "4090:9:69",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4090:9:69"
              }
            ],
            "name": "setHome",
            "parameters": {
              "id": 44752,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44751,
                  "mutability": "mutable",
                  "name": "_home",
                  "nodeType": "VariableDeclaration",
                  "scope": 44763,
                  "src": "4066:13:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 44750,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4066:7:69",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4065:15:69"
            },
            "returnParameters": {
              "id": 44755,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4100:0:69"
            },
            "scope": 45020,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 44799,
            "nodeType": "FunctionDefinition",
            "src": "4338:416:69",
            "body": {
              "id": 44798,
              "nodeType": "Block",
              "src": "4439:315:69",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 44774,
                        "name": "_replica",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44766,
                        "src": "4515:8:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 44773,
                      "name": "_clearReplica",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44920,
                      "src": "4501:13:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 44775,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4501:23:69",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44776,
                  "nodeType": "ExpressionStatement",
                  "src": "4501:23:69"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 44778,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44768,
                        "src": "4547:7:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 44777,
                      "name": "_clearDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44961,
                      "src": "4534:12:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$returns$__$",
                        "typeString": "function (uint32)"
                      }
                    },
                    "id": 44779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4534:21:69",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44780,
                  "nodeType": "ExpressionStatement",
                  "src": "4534:21:69"
                },
                {
                  "expression": {
                    "id": 44785,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 44781,
                        "name": "replicaToDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44643,
                        "src": "4618:15:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$",
                          "typeString": "mapping(address => uint32)"
                        }
                      },
                      "id": 44783,
                      "indexExpression": {
                        "id": 44782,
                        "name": "_replica",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44766,
                        "src": "4634:8:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4618:25:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 44784,
                      "name": "_domain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44768,
                      "src": "4646:7:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "4618:35:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 44786,
                  "nodeType": "ExpressionStatement",
                  "src": "4618:35:69"
                },
                {
                  "expression": {
                    "id": 44791,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 44787,
                        "name": "domainToReplica",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44647,
                        "src": "4663:15:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint32_$_t_address_$",
                          "typeString": "mapping(uint32 => address)"
                        }
                      },
                      "id": 44789,
                      "indexExpression": {
                        "id": 44788,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44768,
                        "src": "4679:7:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4663:24:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 44790,
                      "name": "_replica",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44766,
                      "src": "4690:8:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4663:35:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 44792,
                  "nodeType": "ExpressionStatement",
                  "src": "4663:35:69"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 44794,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44768,
                        "src": "4729:7:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 44795,
                        "name": "_replica",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44766,
                        "src": "4738:8:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 44793,
                      "name": "ReplicaEnrolled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44660,
                      "src": "4713:15:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_address_$returns$__$",
                        "typeString": "function (uint32,address)"
                      }
                    },
                    "id": 44796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4713:34:69",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44797,
                  "nodeType": "EmitStatement",
                  "src": "4708:39:69"
                }
              ]
            },
            "documentation": {
              "id": 44764,
              "nodeType": "StructuredDocumentation",
              "src": "4141:192:69",
              "text": " @notice Allow Owner to enroll Replica contract\n @param _replica the address of the Replica\n @param _domain the remote domain of the Home contract for the Replica"
            },
            "functionSelector": "f31faefb",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 44771,
                "modifierName": {
                  "id": 44770,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 26329,
                  "src": "4425:9:69",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4425:9:69"
              }
            ],
            "name": "ownerEnrollReplica",
            "parameters": {
              "id": 44769,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44766,
                  "mutability": "mutable",
                  "name": "_replica",
                  "nodeType": "VariableDeclaration",
                  "scope": 44799,
                  "src": "4366:16:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 44765,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4366:7:69",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44768,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 44799,
                  "src": "4384:14:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 44767,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4384:6:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4365:34:69"
            },
            "returnParameters": {
              "id": 44772,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4439:0:69"
            },
            "scope": 45020,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 44812,
            "nodeType": "FunctionDefinition",
            "src": "4883:107:69",
            "body": {
              "id": 44811,
              "nodeType": "Block",
              "src": "4950:40:69",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 44808,
                        "name": "_replica",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44802,
                        "src": "4974:8:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 44807,
                      "name": "_clearReplica",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44920,
                      "src": "4960:13:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 44809,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4960:23:69",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44810,
                  "nodeType": "ExpressionStatement",
                  "src": "4960:23:69"
                }
              ]
            },
            "documentation": {
              "id": 44800,
              "nodeType": "StructuredDocumentation",
              "src": "4760:118:69",
              "text": " @notice Allow Owner to un-enroll Replica contract\n @param _replica the address of the Replica"
            },
            "functionSelector": "8f5d90e0",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 44805,
                "modifierName": {
                  "id": 44804,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 26329,
                  "src": "4940:9:69",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4940:9:69"
              }
            ],
            "name": "ownerUnenrollReplica",
            "parameters": {
              "id": 44803,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44802,
                  "mutability": "mutable",
                  "name": "_replica",
                  "nodeType": "VariableDeclaration",
                  "scope": 44812,
                  "src": "4913:16:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 44801,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4913:7:69",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4912:18:69"
            },
            "returnParameters": {
              "id": 44806,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4950:0:69"
            },
            "scope": 45020,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 44839,
            "nodeType": "FunctionDefinition",
            "src": "5295:254:69",
            "body": {
              "id": 44838,
              "nodeType": "Block",
              "src": "5422:127:69",
              "statements": [
                {
                  "expression": {
                    "id": 44830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 44824,
                          "name": "watcherPermissions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44653,
                          "src": "5432:18:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_bool_$_$",
                            "typeString": "mapping(address => mapping(uint32 => bool))"
                          }
                        },
                        "id": 44827,
                        "indexExpression": {
                          "id": 44825,
                          "name": "_watcher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44815,
                          "src": "5451:8:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5432:28:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint32_$_t_bool_$",
                          "typeString": "mapping(uint32 => bool)"
                        }
                      },
                      "id": 44828,
                      "indexExpression": {
                        "id": 44826,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44817,
                        "src": "5461:7:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5432:37:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 44829,
                      "name": "_access",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44819,
                      "src": "5472:7:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5432:47:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 44831,
                  "nodeType": "ExpressionStatement",
                  "src": "5432:47:69"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 44833,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44817,
                        "src": "5515:7:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 44834,
                        "name": "_watcher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44815,
                        "src": "5524:8:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 44835,
                        "name": "_access",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44819,
                        "src": "5534:7:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 44832,
                      "name": "WatcherPermissionSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44676,
                      "src": "5494:20:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (uint32,address,bool)"
                      }
                    },
                    "id": 44836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5494:48:69",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44837,
                  "nodeType": "EmitStatement",
                  "src": "5489:53:69"
                }
              ]
            },
            "documentation": {
              "id": 44813,
              "nodeType": "StructuredDocumentation",
              "src": "4996:294:69",
              "text": " @notice Allow Owner to set Watcher permissions for a Replica\n @param _watcher the address of the Watcher\n @param _domain the remote domain of the Home contract for the Replica\n @param _access TRUE to give the Watcher permissions, FALSE to remove permissions"
            },
            "functionSelector": "916c3470",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 44822,
                "modifierName": {
                  "id": 44821,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 26329,
                  "src": "5412:9:69",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5412:9:69"
              }
            ],
            "name": "setWatcherPermission",
            "parameters": {
              "id": 44820,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44815,
                  "mutability": "mutable",
                  "name": "_watcher",
                  "nodeType": "VariableDeclaration",
                  "scope": 44839,
                  "src": "5334:16:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 44814,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5334:7:69",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44817,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 44839,
                  "src": "5360:14:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 44816,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5360:6:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44819,
                  "mutability": "mutable",
                  "name": "_access",
                  "nodeType": "VariableDeclaration",
                  "scope": 44839,
                  "src": "5384:12:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 44818,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5384:4:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5324:78:69"
            },
            "returnParameters": {
              "id": 44823,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5422:0:69"
            },
            "scope": 45020,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 44850,
            "nodeType": "FunctionDefinition",
            "src": "5643:96:69",
            "body": {
              "id": 44849,
              "nodeType": "Block",
              "src": "5697:42:69",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 44845,
                        "name": "home",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44639,
                        "src": "5714:4:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Home_$43790",
                          "typeString": "contract Home"
                        }
                      },
                      "id": 44846,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "localDomain",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 43847,
                      "src": "5714:16:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint32_$",
                        "typeString": "function () view external returns (uint32)"
                      }
                    },
                    "id": 44847,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5714:18:69",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "functionReturnParameters": 44844,
                  "id": 44848,
                  "nodeType": "Return",
                  "src": "5707:25:69"
                }
              ]
            },
            "documentation": {
              "id": 44840,
              "nodeType": "StructuredDocumentation",
              "src": "5555:83:69",
              "text": " @notice Query local domain from Home\n @return local domain"
            },
            "functionSelector": "8d3638f4",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "localDomain",
            "parameters": {
              "id": 44841,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5663:2:69"
            },
            "returnParameters": {
              "id": 44844,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44843,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 44850,
                  "src": "5689:6:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 44842,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5689:6:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5688:8:69"
            },
            "scope": 45020,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 44867,
            "nodeType": "FunctionDefinition",
            "src": "6026:179:69",
            "body": {
              "id": 44866,
              "nodeType": "Block",
              "src": "6144:61:69",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 44860,
                        "name": "watcherPermissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44653,
                        "src": "6161:18:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_bool_$_$",
                          "typeString": "mapping(address => mapping(uint32 => bool))"
                        }
                      },
                      "id": 44862,
                      "indexExpression": {
                        "id": 44861,
                        "name": "_watcher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44853,
                        "src": "6180:8:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6161:28:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint32_$_t_bool_$",
                        "typeString": "mapping(uint32 => bool)"
                      }
                    },
                    "id": 44864,
                    "indexExpression": {
                      "id": 44863,
                      "name": "_domain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44855,
                      "src": "6190:7:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6161:37:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 44859,
                  "id": 44865,
                  "nodeType": "Return",
                  "src": "6154:44:69"
                }
              ]
            },
            "documentation": {
              "id": 44851,
              "nodeType": "StructuredDocumentation",
              "src": "5745:276:69",
              "text": " @notice Get access permissions for the watcher on the domain\n @param _watcher the address of the watcher\n @param _domain the domain to check for watcher permissions\n @return TRUE iff _watcher has permission to un-enroll replicas on _domain"
            },
            "functionSelector": "427ebef5",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "watcherPermission",
            "parameters": {
              "id": 44856,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44853,
                  "mutability": "mutable",
                  "name": "_watcher",
                  "nodeType": "VariableDeclaration",
                  "scope": 44867,
                  "src": "6053:16:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 44852,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6053:7:69",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44855,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 44867,
                  "src": "6071:14:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 44854,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6071:6:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6052:34:69"
            },
            "returnParameters": {
              "id": 44859,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44858,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 44867,
                  "src": "6134:4:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 44857,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6134:4:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6133:6:69"
            },
            "scope": 45020,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 44882,
            "nodeType": "FunctionDefinition",
            "src": "6432:118:69",
            "body": {
              "id": 44881,
              "nodeType": "Block",
              "src": "6496:54:69",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 44879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "id": 44875,
                        "name": "replicaToDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44643,
                        "src": "6513:15:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$",
                          "typeString": "mapping(address => uint32)"
                        }
                      },
                      "id": 44877,
                      "indexExpression": {
                        "id": 44876,
                        "name": "_replica",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44870,
                        "src": "6529:8:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6513:25:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 44878,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6542:1:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6513:30:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 44874,
                  "id": 44880,
                  "nodeType": "Return",
                  "src": "6506:37:69"
                }
              ]
            },
            "documentation": {
              "id": 44868,
              "nodeType": "StructuredDocumentation",
              "src": "6262:165:69",
              "text": " @notice Check whether _replica is enrolled\n @param _replica the replica to check for enrollment\n @return TRUE iff _replica is enrolled"
            },
            "functionSelector": "5190bc53",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isReplica",
            "parameters": {
              "id": 44871,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44870,
                  "mutability": "mutable",
                  "name": "_replica",
                  "nodeType": "VariableDeclaration",
                  "scope": 44882,
                  "src": "6451:16:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 44869,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6451:7:69",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6450:18:69"
            },
            "returnParameters": {
              "id": 44874,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44873,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 44882,
                  "src": "6490:4:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 44872,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6490:4:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6489:6:69"
            },
            "scope": 45020,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 44920,
            "nodeType": "FunctionDefinition",
            "src": "6729:324:69",
            "body": {
              "id": 44919,
              "nodeType": "Block",
              "src": "6779:274:69",
              "statements": [
                {
                  "assignments": [
                    44889
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 44889,
                      "mutability": "mutable",
                      "name": "_currentDomain",
                      "nodeType": "VariableDeclaration",
                      "scope": 44919,
                      "src": "6789:21:69",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 44888,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "6789:6:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 44893,
                  "initialValue": {
                    "baseExpression": {
                      "id": 44890,
                      "name": "replicaToDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44643,
                      "src": "6813:15:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$",
                        "typeString": "mapping(address => uint32)"
                      }
                    },
                    "id": 44892,
                    "indexExpression": {
                      "id": 44891,
                      "name": "_replica",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44885,
                      "src": "6829:8:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6813:25:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6789:49:69"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 44896,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 44894,
                      "name": "_currentDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44889,
                      "src": "6852:14:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 44895,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6870:1:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6852:19:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 44918,
                  "nodeType": "IfStatement",
                  "src": "6848:199:69",
                  "trueBody": {
                    "id": 44917,
                    "nodeType": "Block",
                    "src": "6873:174:69",
                    "statements": [
                      {
                        "expression": {
                          "id": 44904,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 44897,
                              "name": "domainToReplica",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44647,
                              "src": "6887:15:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint32_$_t_address_$",
                                "typeString": "mapping(uint32 => address)"
                              }
                            },
                            "id": 44899,
                            "indexExpression": {
                              "id": 44898,
                              "name": "_currentDomain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44889,
                              "src": "6903:14:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6887:31:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 44902,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6929:1:69",
                                "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": 44901,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6921:7:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 44900,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "6921:7:69",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 44903,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6921:10:69",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "6887:44:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 44905,
                        "nodeType": "ExpressionStatement",
                        "src": "6887:44:69"
                      },
                      {
                        "expression": {
                          "id": 44910,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 44906,
                              "name": "replicaToDomain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44643,
                              "src": "6945:15:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$",
                                "typeString": "mapping(address => uint32)"
                              }
                            },
                            "id": 44908,
                            "indexExpression": {
                              "id": 44907,
                              "name": "_replica",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44885,
                              "src": "6961:8:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6945:25:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 44909,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6973:1:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6945:29:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 44911,
                        "nodeType": "ExpressionStatement",
                        "src": "6945:29:69"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 44913,
                              "name": "_currentDomain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44889,
                              "src": "7011:14:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "id": 44914,
                              "name": "_replica",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44885,
                              "src": "7027:8:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 44912,
                            "name": "ReplicaUnenrolled",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44667,
                            "src": "6993:17:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_address_$returns$__$",
                              "typeString": "function (uint32,address)"
                            }
                          },
                          "id": 44915,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6993:43:69",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 44916,
                        "nodeType": "EmitStatement",
                        "src": "6988:48:69"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 44883,
              "nodeType": "StructuredDocumentation",
              "src": "6609:115:69",
              "text": " @notice Remove the replica from the two-way mappings\n @param _replica replica to un-enroll"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_clearReplica",
            "parameters": {
              "id": 44886,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44885,
                  "mutability": "mutable",
                  "name": "_replica",
                  "nodeType": "VariableDeclaration",
                  "scope": 44920,
                  "src": "6752:16:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 44884,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6752:7:69",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6751:18:69"
            },
            "returnParameters": {
              "id": 44887,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6779:0:69"
            },
            "scope": 45020,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 44961,
            "nodeType": "FunctionDefinition",
            "src": "7175:332:69",
            "body": {
              "id": 44960,
              "nodeType": "Block",
              "src": "7222:285:69",
              "statements": [
                {
                  "assignments": [
                    44927
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 44927,
                      "mutability": "mutable",
                      "name": "_currentReplica",
                      "nodeType": "VariableDeclaration",
                      "scope": 44960,
                      "src": "7232:23:69",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 44926,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7232:7:69",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 44931,
                  "initialValue": {
                    "baseExpression": {
                      "id": 44928,
                      "name": "domainToReplica",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44647,
                      "src": "7258:15:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint32_$_t_address_$",
                        "typeString": "mapping(uint32 => address)"
                      }
                    },
                    "id": 44930,
                    "indexExpression": {
                      "id": 44929,
                      "name": "_domain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44923,
                      "src": "7274:7:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7258:24:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7232:50:69"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 44937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 44932,
                      "name": "_currentReplica",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44927,
                      "src": "7296:15:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 44935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7323:1:69",
                          "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": 44934,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7315:7:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 44933,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7315:7:69",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 44936,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7315:10:69",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "7296:29:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 44959,
                  "nodeType": "IfStatement",
                  "src": "7292:209:69",
                  "trueBody": {
                    "id": 44958,
                    "nodeType": "Block",
                    "src": "7327:174:69",
                    "statements": [
                      {
                        "expression": {
                          "id": 44945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 44938,
                              "name": "domainToReplica",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44647,
                              "src": "7341:15:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint32_$_t_address_$",
                                "typeString": "mapping(uint32 => address)"
                              }
                            },
                            "id": 44940,
                            "indexExpression": {
                              "id": 44939,
                              "name": "_domain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44923,
                              "src": "7357:7:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "7341:24:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 44943,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7376:1:69",
                                "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": 44942,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7368:7:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 44941,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "7368:7:69",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 44944,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7368:10:69",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "7341:37:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 44946,
                        "nodeType": "ExpressionStatement",
                        "src": "7341:37:69"
                      },
                      {
                        "expression": {
                          "id": 44951,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 44947,
                              "name": "replicaToDomain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44643,
                              "src": "7392:15:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$",
                                "typeString": "mapping(address => uint32)"
                              }
                            },
                            "id": 44949,
                            "indexExpression": {
                              "id": 44948,
                              "name": "_currentReplica",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44927,
                              "src": "7408:15:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "7392:32:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 44950,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7427:1:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "7392:36:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 44952,
                        "nodeType": "ExpressionStatement",
                        "src": "7392:36:69"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 44954,
                              "name": "_domain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44923,
                              "src": "7465:7:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "id": 44955,
                              "name": "_currentReplica",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44927,
                              "src": "7474:15:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 44953,
                            "name": "ReplicaUnenrolled",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44667,
                            "src": "7447:17:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_address_$returns$__$",
                              "typeString": "function (uint32,address)"
                            }
                          },
                          "id": 44956,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7447:43:69",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 44957,
                        "nodeType": "EmitStatement",
                        "src": "7442:48:69"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 44921,
              "nodeType": "StructuredDocumentation",
              "src": "7059:111:69",
              "text": " @notice remove the domain from the two-way mapping\n @param _domain domain to un-enroll"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_clearDomain",
            "parameters": {
              "id": 44924,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44923,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 44961,
                  "src": "7197:14:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 44922,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7197:6:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7196:16:69"
            },
            "returnParameters": {
              "id": 44925,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7222:0:69"
            },
            "scope": 45020,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 45011,
            "nodeType": "FunctionDefinition",
            "src": "7642:518:69",
            "body": {
              "id": 45010,
              "nodeType": "Block",
              "src": "7821:339:69",
              "statements": [
                {
                  "assignments": [
                    44976
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 44976,
                      "mutability": "mutable",
                      "name": "_homeDomainHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 45010,
                      "src": "7831:23:69",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 44975,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7831:7:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 44985,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 44980,
                                "name": "_replica",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 44966,
                                "src": "7892:8:69",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "id": 44978,
                                "name": "TypeCasts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 46345,
                                "src": "7865:9:69",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_TypeCasts_$46345_$",
                                  "typeString": "type(library TypeCasts)"
                                }
                              },
                              "id": 44979,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "bytes32ToAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 46344,
                              "src": "7865:26:69",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_address_$",
                                "typeString": "function (bytes32) pure returns (address)"
                              }
                            },
                            "id": 44981,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7865:36:69",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 44977,
                          "name": "Replica",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44615,
                          "src": "7857:7:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Replica_$44615_$",
                            "typeString": "type(contract Replica)"
                          }
                        },
                        "id": 44982,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7857:45:69",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Replica_$44615",
                          "typeString": "contract Replica"
                        }
                      },
                      "id": 44983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "homeDomainHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 44568,
                      "src": "7857:73:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                        "typeString": "function () view external returns (bytes32)"
                      }
                    },
                    "id": 44984,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7857:75:69",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7831:101:69"
                },
                {
                  "assignments": [
                    44987
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 44987,
                      "mutability": "mutable",
                      "name": "_digest",
                      "nodeType": "VariableDeclaration",
                      "scope": 45010,
                      "src": "7942:15:69",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 44986,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7942:7:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 44996,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 44991,
                            "name": "_homeDomainHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44976,
                            "src": "8000:15:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 44992,
                            "name": "_domain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44964,
                            "src": "8017:7:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "id": 44993,
                            "name": "_updater",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44968,
                            "src": "8026:8:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 44989,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "7983:3:69",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 44990,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "7983:16:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 44994,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7983:52:69",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 44988,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "7960:9:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 44995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7960:85:69",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7942:103:69"
                },
                {
                  "expression": {
                    "id": 45002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 44997,
                      "name": "_digest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44987,
                      "src": "8055:7:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 45000,
                          "name": "_digest",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44987,
                          "src": "8094:7:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 44998,
                          "name": "ECDSA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26496,
                          "src": "8065:5:69",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ECDSA_$26496_$",
                            "typeString": "type(library ECDSA)"
                          }
                        },
                        "id": 44999,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "toEthSignedMessageHash",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 26495,
                        "src": "8065:28:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$",
                          "typeString": "function (bytes32) pure returns (bytes32)"
                        }
                      },
                      "id": 45001,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8065:37:69",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "8055:47:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 45003,
                  "nodeType": "ExpressionStatement",
                  "src": "8055:47:69"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 45006,
                        "name": "_digest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44987,
                        "src": "8133:7:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 45007,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44970,
                        "src": "8142:10:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 45004,
                        "name": "ECDSA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26496,
                        "src": "8119:5:69",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ECDSA_$26496_$",
                          "typeString": "type(library ECDSA)"
                        }
                      },
                      "id": 45005,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "recover",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26421,
                      "src": "8119:13:69",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 45008,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8119:34:69",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 44974,
                  "id": 45009,
                  "nodeType": "Return",
                  "src": "8112:41:69"
                }
              ]
            },
            "documentation": {
              "id": 44962,
              "nodeType": "StructuredDocumentation",
              "src": "7513:124:69",
              "text": " @notice Get the Watcher address from the provided signature\n @return address of watcher that signed"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_recoverWatcherFromSig",
            "parameters": {
              "id": 44971,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44964,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 45011,
                  "src": "7683:14:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 44963,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7683:6:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44966,
                  "mutability": "mutable",
                  "name": "_replica",
                  "nodeType": "VariableDeclaration",
                  "scope": 45011,
                  "src": "7707:16:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 44965,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7707:7:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44968,
                  "mutability": "mutable",
                  "name": "_updater",
                  "nodeType": "VariableDeclaration",
                  "scope": 45011,
                  "src": "7733:16:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 44967,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7733:7:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44970,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 45011,
                  "src": "7759:23:69",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 44969,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7759:5:69",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7673:115:69"
            },
            "returnParameters": {
              "id": 44974,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44973,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 45011,
                  "src": "7812:7:69",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 44972,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7812:7:69",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7811:9:69"
            },
            "scope": 45020,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 45019,
            "nodeType": "FunctionDefinition",
            "src": "8340:84:69",
            "body": {
              "id": 45018,
              "nodeType": "Block",
              "src": "8395:29:69",
              "statements": []
            },
            "baseFunctions": [
              26351
            ],
            "documentation": {
              "id": 45012,
              "nodeType": "StructuredDocumentation",
              "src": "8166:169:69",
              "text": " @dev should be impossible to renounce ownership;\n we override OpenZeppelin Ownable implementation\n of renounceOwnership to make it a no-op"
            },
            "functionSelector": "715018a6",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 45016,
                "modifierName": {
                  "id": 45015,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 26329,
                  "src": "8385:9:69",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8385:9:69"
              }
            ],
            "name": "renounceOwnership",
            "overrides": {
              "id": 45014,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8376:8:69"
            },
            "parameters": {
              "id": 45013,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8366:2:69"
            },
            "returnParameters": {
              "id": 45017,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8395:0:69"
            },
            "scope": 45020,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 44636,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 26380,
              "src": "701:7:69",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$26380",
                "typeString": "contract Ownable"
              }
            },
            "id": 44637,
            "nodeType": "InheritanceSpecifier",
            "src": "701:7:69"
          }
        ],
        "contractDependencies": [
          26380,
          28049
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 44635,
          "nodeType": "StructuredDocumentation",
          "src": "421:245:69",
          "text": " @title XAppConnectionManager\n @author Illusory Systems Inc.\n @notice Manages a registry of local Replica contracts\n for remote Home domains. Accepts Watcher signatures\n to un-enroll Replicas attached to fraudulent remote Homes"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          45020,
          26380,
          28049
        ],
        "name": "XAppConnectionManager",
        "scope": 45021
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 69
}