{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_localDomain",
          "type": "uint32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldUpdater",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newUpdater",
          "type": "address"
        }
      ],
      "name": "NewUpdater",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "messageHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "indexed": true,
          "internalType": "bytes",
          "name": "returnData",
          "type": "bytes"
        }
      ],
      "name": "Process",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousConfirmAt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newConfirmAt",
          "type": "uint256"
        }
      ],
      "name": "SetConfirmation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timeout",
          "type": "uint256"
        }
      ],
      "name": "SetOptimisticTimeout",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "homeDomain",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "oldRoot",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "Update",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "LEGACY_STATUS_NONE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LEGACY_STATUS_PROCESSED",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LEGACY_STATUS_PROVEN",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_root",
          "type": "bytes32"
        }
      ],
      "name": "acceptableRoot",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "committedRoot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "confirmAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "homeDomainHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_remoteDomain",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "_updater",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_committedRoot",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_optimisticSeconds",
          "type": "uint256"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "localDomain",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "messages",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "optimisticSeconds",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        }
      ],
      "name": "process",
      "outputs": [
        {
          "internalType": "bool",
          "name": "_success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_leaf",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32[32]",
          "name": "_proof",
          "type": "bytes32[32]"
        },
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "prove",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "bytes32[32]",
          "name": "_proof",
          "type": "bytes32[32]"
        },
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "proveAndProcess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "remoteDomain",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_root",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_confirmAt",
          "type": "uint256"
        }
      ],
      "name": "setConfirmation",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_optimisticSeconds",
          "type": "uint256"
        }
      ],
      "name": "setOptimisticTimeout",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_updater",
          "type": "address"
        }
      ],
      "name": "setUpdater",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "state",
      "outputs": [
        {
          "internalType": "enum NomadBase.States",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_oldRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_newRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "update",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updater",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60a060405234801561001057600080fd5b50604051612f18380380612f188339818101604052602081101561003357600080fd5b505160e081901b6001600160e01b03191660805263ffffffff16612eaf61006960003980610aed5280610b415250612eaf6000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638d3638f4116100ee578063b1e3fb8c11610097578063df034cd011610071578063df034cd014610585578063e7e7a7b71461058d578063f2fde38b146105d8578063ffa1ad741461060b576101a3565b8063b1e3fb8c146104a2578063b31c01fb146104aa578063c19d93fb1461055c576101a3565b8063961681dc116100c8578063961681dc1461044a5780639d54f41914610452578063a3f81d6814610485576101a3565b80638d3638f4146103525780638da5cb5b14610373578063928bc4b2146103a4576101a3565b806345630b1a11610150578063715018a61161012a578063715018a61461031057806371bfb7b814610318578063885b5e2d14610335576101a3565b806345630b1a146102525780636188af0e1461025a57806367a6771d14610308576101a3565b80632e7bb32c116101815780632e7bb32c14610204578063371d30711461020c578063399926681461024a576101a3565b8063088b5ed3146101a857806318810b89146101cd5780632bbd59ca146101e7575b600080fd5b6101cb600480360360408110156101be57600080fd5b5080359060200135610629565b005b6101d56107a1565b60408051918252519081900360200190f35b6101d5600480360360208110156101fd57600080fd5b50356107a6565b6101d56107b8565b610236600480360361044081101561022357600080fd5b50803590602081019061042001356107bd565b604080519115158252519081900360200190f35b6101d56108a5565b6101d56108ab565b6101cb600480360361044081101561027157600080fd5b81019060208101813564010000000081111561028c57600080fd5b82018360208201111561029e57600080fd5b803590602001918460018302840111640100000000831117156102c057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550929350505061040082013590506108c5565b6101d5610975565b6101cb61097b565b6101d56004803603602081101561032e57600080fd5b5035610a25565b6101cb6004803603602081101561034b57600080fd5b5035610a37565b61035a610aeb565b6040805163ffffffff9092168252519081900360200190f35b61037b610b0f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610236600480360360208110156103ba57600080fd5b8101906020810181356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184600183028401116401000000008311171561040957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b2b945050505050565b61035a610fd4565b6101cb6004803603602081101561046857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610fe0565b6102366004803603602081101561049b57600080fd5b5035611091565b6101d56110e5565b6101cb600480360360608110156104c057600080fd5b8135916020810135918101906060810160408201356401000000008111156104e757600080fd5b8201836020820111156104f957600080fd5b8035906020019184600183028401116401000000008311171561051b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506110ea945050505050565b6105646112a0565b6040518082600281111561057457fe5b815260200191505060405180910390f35b61037b6112c1565b6101cb600480360360808110156105a357600080fd5b5063ffffffff8135169073ffffffffffffffffffffffffffffffffffffffff60208201351690604081013590606001356112dd565b6101cb600480360360208110156105ee57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611481565b6106136107a1565b6040805160ff9092168252519081900360200190f35b610631611623565b73ffffffffffffffffffffffffffffffffffffffff1661064f610b0f565b73ffffffffffffffffffffffffffffffffffffffff16146106d157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b811515806106dd575080155b61074857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f63616e277420736574207a65726f20726f6f7400000000000000000000000000604482015290519081900360640190fd5b60008281526099602090815260409182902080549084905582518181529182018490528251909285927fe906d465281862f8f37a1bdd7d810e50347f06b0b493701cca6ccb8e6a7b2694929081900390910190a2505050565b600081565b609a6020526000908152604090205481565b600181565b6000838152609a60205260408120546002141561083b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c72656164792070726f636573736564000000000000000000000000000000604482015290519081900360640190fd5b60006108718585602080602002604051908101604052809291908260208002808284376000920191909152508791506116279050565b905061087c81611091565b15610898576000858152609a602052604090205550600161089e565b60009150505b9392505050565b60975481565b6096546000906108c09063ffffffff166116d2565b905090565b82516020808501919091206000818152609a9092526040909120546108e990611091565b806108fa57506108fa8184846107bd565b61096557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2170726f76650000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61096e84610b2b565b5050505050565b60665481565b610983611623565b73ffffffffffffffffffffffffffffffffffffffff166109a1610b0f565b73ffffffffffffffffffffffffffffffffffffffff1614610a2357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60996020526000908152604090205481565b610a3f611623565b73ffffffffffffffffffffffffffffffffffffffff16610a5d610b0f565b73ffffffffffffffffffffffffffffffffffffffff1614610adf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ae881611747565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b600080610b38838261187e565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016610b8c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166118a4565b63ffffffff1614610bfe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f2164657374696e6174696f6e0000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610c2b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166118d5565b6000818152609a6020526040902054909150610c4690611091565b610cb157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2170726f76656e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60985460ff16600114610d2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f217265656e7472616e7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b609880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556000818152609a6020526040902060029055610d8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316611914565b73ffffffffffffffffffffffffffffffffffffffff1663ab2dc3f5610dd07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516611927565b610dfb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008616611957565b610e267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716611988565b610e7b610e547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000089166119b9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016611a2a565b6040518563ffffffff1660e01b8152600401808563ffffffff1681526020018463ffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610ee5578181015183820152602001610ecd565b50505050905090810190601f168015610f125780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610f3457600080fd5b505af1158015610f48573d6000803e3d6000fd5b50506040517fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47092506001915083907fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890600090a45050609880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915590505b919050565b60965463ffffffff1681565b610fe8611623565b73ffffffffffffffffffffffffffffffffffffffff16611006610b0f565b73ffffffffffffffffffffffffffffffffffffffff161461108857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ae881611a6e565b600060018214156110a457506001610fcf565b60028214806110b1575081155b156110be57506000610fcf565b600082815260996020526040902054806110dc576000915050610fcf565b42101592915050565b600281565b606654831461115a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f742063757272656e74207570646174650000000000000000000000000000604482015290519081900360640190fd5b611165838383611af6565b6111d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f2175706461746572207369670000000000000000000000000000000000000000604482015290519081900360640190fd5b6111d8610a23565b6097546000838152609960209081526040808320429094019093556066859055609654835182815285518184015285518795899563ffffffff909416947f608828ad904a0c9250c09004ba7226efb08f35a5c815bb3f76b5a8a271cd08b29489949384938401928601918190849084905b83811015611261578181015183820152602001611249565b50505050905090810190601f16801561128e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a4505050565b60655474010000000000000000000000000000000000000000900460ff1681565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b600054610100900460ff16806112f657506112f6611b88565b80611304575060005460ff16155b611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff161580156113bf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6113c884611b99565b609880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556096805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090911617905560668390558215611443576000838152609960205260409020600190555b61144c82611747565b801561096e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050505050565b611489611623565b73ffffffffffffffffffffffffffffffffffffffff166114a7610b0f565b73ffffffffffffffffffffffffffffffffffffffff161461152957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611595576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612d286026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3390565b8260005b60208110156116ca57600183821c16600085836020811061164857fe5b60200201519050816001141561168e57808460405160200180838152602001828152602001925050506040516020818303038152906040528051906020012093506116c0565b838160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012093505b505060010161162b565b509392505050565b6040805160e09290921b7fffffffff00000000000000000000000000000000000000000000000000000000166020808401919091527f4e4f4d41440000000000000000000000000000000000000000000000000000006024840152815180840360090181526029909301909152815191012090565b609754801580159061175a57506105dc81115b156117d0576105dc8210156117d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f7074696d69737469632074696d656f757420746f6f206c6f77000000000000604482015290519081900360640190fd5b6301e13380821061184257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6f7074696d69737469632074696d656f757420746f6f20686967680000000000604482015290519081900360640190fd5b60978290556040805183815290517fa8de34d9c26dbb20579bc8c8957813e3168af7c5092d7668390e34471dc4ffb49181900360200190a15050565b81516000906020840161189964ffffffffff85168284611cfe565b925050505b92915050565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660286004611d5d565b6000806118e183611d7e565b6bffffffffffffffffffffffff16905060006118fc84611d92565b6bffffffffffffffffffffffff169091209392505050565b600061189e61192283611da6565b611dd7565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826004611d5d565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660246004611d5d565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660046020611dda565b600061189e604c806119ec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008616611d92565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000861692916bffffffffffffffffffffffff91909116036000611f85565b6060600080611a3884611d92565b6bffffffffffffffffffffffff1690506040519150819250611a5d8483602001612017565b508181016020016040529052919050565b6065805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f0f20622a7af9e952a6fec654a196f29e04477b5d335772c26902bec35cc9f22a929181900390910190a15050565b600080611b016108ab565b8585604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050611b428161214d565b60655490915073ffffffffffffffffffffffffffffffffffffffff16611b68828561219e565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b6000611b933061222e565b15905090565b600054610100900460ff1680611bb25750611bb2611b88565b80611bc0575060005460ff16155b611c15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff16158015611c7b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611c83612234565b611c8c82611a6e565b606580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015611cfa57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b600080611d0b8484612357565b9050604051811115611d1b575060005b80611d49577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000091505061089e565b611d548585856123c9565b95945050505050565b60008160200360080260ff16611d74858585611dda565b901c949350505050565b60781c6bffffffffffffffffffffffff1690565b60181c6bffffffffffffffffffffffff1690565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316602c6020611dda565b90565b600060ff8216611dec5750600061089e565b611df584611d92565b6bffffffffffffffffffffffff16611e108460ff8516612357565b1115611eef57611e51611e2285611d7e565b6bffffffffffffffffffffffff16611e3986611d92565b6bffffffffffffffffffffffff16858560ff166123dc565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611eb4578181015183820152602001611e9c565b50505050905090810190601f168015611ee15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60208260ff161115611f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180612de1603a913960400191505060405180910390fd5b600882026000611f5b86611d7e565b6bffffffffffffffffffffffff1690506000611f7683612537565b91909501511695945050505050565b600080611f9186611d7e565b6bffffffffffffffffffffffff169050611faa86612580565b611fbe85611fb88489612357565b90612357565b1115611fed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000091505061200f565b611ff78186612357565b905061200b8364ffffffffff168286611cfe565b9150505b949350505050565b6000612022836125aa565b612077576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612e1b6028913960400191505060405180910390fd5b612080836125bc565b6120d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612e43602b913960400191505060405180910390fd5b60006120e084611d92565b6bffffffffffffffffffffffff16905060006120fb85611d7e565b6bffffffffffffffffffffffff16905060006040519050848111156121205760206060fd5b8285848460045afa50612143612135876125f9565b64ffffffffff1686856123c9565b9695505050505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461221057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a612143868285856125ff565b3b151590565b600054610100900460ff168061224d575061224d611b88565b8061225b575060005460ff16155b6122b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff1615801561231657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b61231e6127ed565b6123266128ff565b8015610ae857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b8181018281101561189e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b606060006123e986612a8f565b91505060006123f786612a8f565b915050600061240586612a8f565b915050600061241386612a8f565b915050838383836040516020018080612e6e603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a8201526050016021612d7082397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b600061258b82611d92565b61259483611d7e565b016bffffffffffffffffffffffff169050919050565b60006125b582612b63565b1592915050565b60006125c7826125f9565b64ffffffffff1664ffffffffff14156125e257506000610fcf565b60006125ed83612580565b60405110199392505050565b60d81c90565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561267a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612d4e6022913960400191505060405180910390fd5b8360ff16601b148061268f57508360ff16601c145b6126e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612dbf6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612740573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611d5457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b600054610100900460ff16806128065750612806611b88565b80612814575060005460ff16155b612869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff1615801561232657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015610ae857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff16806129185750612918611b88565b80612926575060005460ff16155b61297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff161580156129e157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b60006129eb611623565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ae857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600080601f5b600f8160ff161115612af75760ff600882021684901c612ab481612b8b565b61ffff16841793508160ff16601014612acf57601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612a95565b50600f5b60ff8160ff161015612b5d5760ff600882021684901c612b1a81612b8b565b61ffff16831792508160ff16600014612b3557601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612afb565b50915091565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009081161490565b6000612b9d60048360ff16901c612bbb565b60ff161760081b62ffff0016612bb282612bbb565b60ff1617919050565b600060f08083179060ff82161415612bd7576030915050610fcf565b8060ff1660f11415612bed576031915050610fcf565b8060ff1660f21415612c03576032915050610fcf565b8060ff1660f31415612c19576033915050610fcf565b8060ff1660f41415612c2f576034915050610fcf565b8060ff1660f51415612c45576035915050610fcf565b8060ff1660f61415612c5b576036915050610fcf565b8060ff1660f71415612c71576037915050610fcf565b8060ff1660f81415612c87576038915050610fcf565b8060ff1660f91415612c9d576039915050610fcf565b8060ff1660fa1415612cb3576061915050610fcf565b8060ff1660fb1415612cc9576062915050610fcf565b8060ff1660fc1415612cdf576063915050610fcf565b8060ff1660fd1415612cf5576064915050610fcf565b8060ff1660fe1415612d0b576065915050610fcf565b8060ff1660ff1415612d21576066915050610fcf565b5091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75652e20417474656d7074656420746f20696e646578206174206f6666736574203078496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756554797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e20333220627974657354797065644d656d566965772f636f7079546f202d204e756c6c20706f696e74657220646572656654797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e74657220646572656654797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a164736f6c6343000706000a",
    "sourceMap": "633:12105:67:-:0;;;2819:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2819:59:67;2520:26:65;;;;-1:-1:-1;;;;;;2520:26:65;;;633:12105:67;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106101a35760003560e01c80638d3638f4116100ee578063b1e3fb8c11610097578063df034cd011610071578063df034cd014610585578063e7e7a7b71461058d578063f2fde38b146105d8578063ffa1ad741461060b576101a3565b8063b1e3fb8c146104a2578063b31c01fb146104aa578063c19d93fb1461055c576101a3565b8063961681dc116100c8578063961681dc1461044a5780639d54f41914610452578063a3f81d6814610485576101a3565b80638d3638f4146103525780638da5cb5b14610373578063928bc4b2146103a4576101a3565b806345630b1a11610150578063715018a61161012a578063715018a61461031057806371bfb7b814610318578063885b5e2d14610335576101a3565b806345630b1a146102525780636188af0e1461025a57806367a6771d14610308576101a3565b80632e7bb32c116101815780632e7bb32c14610204578063371d30711461020c578063399926681461024a576101a3565b8063088b5ed3146101a857806318810b89146101cd5780632bbd59ca146101e7575b600080fd5b6101cb600480360360408110156101be57600080fd5b5080359060200135610629565b005b6101d56107a1565b60408051918252519081900360200190f35b6101d5600480360360208110156101fd57600080fd5b50356107a6565b6101d56107b8565b610236600480360361044081101561022357600080fd5b50803590602081019061042001356107bd565b604080519115158252519081900360200190f35b6101d56108a5565b6101d56108ab565b6101cb600480360361044081101561027157600080fd5b81019060208101813564010000000081111561028c57600080fd5b82018360208201111561029e57600080fd5b803590602001918460018302840111640100000000831117156102c057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550929350505061040082013590506108c5565b6101d5610975565b6101cb61097b565b6101d56004803603602081101561032e57600080fd5b5035610a25565b6101cb6004803603602081101561034b57600080fd5b5035610a37565b61035a610aeb565b6040805163ffffffff9092168252519081900360200190f35b61037b610b0f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610236600480360360208110156103ba57600080fd5b8101906020810181356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184600183028401116401000000008311171561040957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b2b945050505050565b61035a610fd4565b6101cb6004803603602081101561046857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610fe0565b6102366004803603602081101561049b57600080fd5b5035611091565b6101d56110e5565b6101cb600480360360608110156104c057600080fd5b8135916020810135918101906060810160408201356401000000008111156104e757600080fd5b8201836020820111156104f957600080fd5b8035906020019184600183028401116401000000008311171561051b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506110ea945050505050565b6105646112a0565b6040518082600281111561057457fe5b815260200191505060405180910390f35b61037b6112c1565b6101cb600480360360808110156105a357600080fd5b5063ffffffff8135169073ffffffffffffffffffffffffffffffffffffffff60208201351690604081013590606001356112dd565b6101cb600480360360208110156105ee57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611481565b6106136107a1565b6040805160ff9092168252519081900360200190f35b610631611623565b73ffffffffffffffffffffffffffffffffffffffff1661064f610b0f565b73ffffffffffffffffffffffffffffffffffffffff16146106d157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b811515806106dd575080155b61074857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f63616e277420736574207a65726f20726f6f7400000000000000000000000000604482015290519081900360640190fd5b60008281526099602090815260409182902080549084905582518181529182018490528251909285927fe906d465281862f8f37a1bdd7d810e50347f06b0b493701cca6ccb8e6a7b2694929081900390910190a2505050565b600081565b609a6020526000908152604090205481565b600181565b6000838152609a60205260408120546002141561083b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c72656164792070726f636573736564000000000000000000000000000000604482015290519081900360640190fd5b60006108718585602080602002604051908101604052809291908260208002808284376000920191909152508791506116279050565b905061087c81611091565b15610898576000858152609a602052604090205550600161089e565b60009150505b9392505050565b60975481565b6096546000906108c09063ffffffff166116d2565b905090565b82516020808501919091206000818152609a9092526040909120546108e990611091565b806108fa57506108fa8184846107bd565b61096557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2170726f76650000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61096e84610b2b565b5050505050565b60665481565b610983611623565b73ffffffffffffffffffffffffffffffffffffffff166109a1610b0f565b73ffffffffffffffffffffffffffffffffffffffff1614610a2357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60996020526000908152604090205481565b610a3f611623565b73ffffffffffffffffffffffffffffffffffffffff16610a5d610b0f565b73ffffffffffffffffffffffffffffffffffffffff1614610adf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ae881611747565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b600080610b38838261187e565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016610b8c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166118a4565b63ffffffff1614610bfe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f2164657374696e6174696f6e0000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610c2b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166118d5565b6000818152609a6020526040902054909150610c4690611091565b610cb157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2170726f76656e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60985460ff16600114610d2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f217265656e7472616e7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b609880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556000818152609a6020526040902060029055610d8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316611914565b73ffffffffffffffffffffffffffffffffffffffff1663ab2dc3f5610dd07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516611927565b610dfb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008616611957565b610e267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716611988565b610e7b610e547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000089166119b9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016611a2a565b6040518563ffffffff1660e01b8152600401808563ffffffff1681526020018463ffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610ee5578181015183820152602001610ecd565b50505050905090810190601f168015610f125780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610f3457600080fd5b505af1158015610f48573d6000803e3d6000fd5b50506040517fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47092506001915083907fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890600090a45050609880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915590505b919050565b60965463ffffffff1681565b610fe8611623565b73ffffffffffffffffffffffffffffffffffffffff16611006610b0f565b73ffffffffffffffffffffffffffffffffffffffff161461108857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ae881611a6e565b600060018214156110a457506001610fcf565b60028214806110b1575081155b156110be57506000610fcf565b600082815260996020526040902054806110dc576000915050610fcf565b42101592915050565b600281565b606654831461115a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f742063757272656e74207570646174650000000000000000000000000000604482015290519081900360640190fd5b611165838383611af6565b6111d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f2175706461746572207369670000000000000000000000000000000000000000604482015290519081900360640190fd5b6111d8610a23565b6097546000838152609960209081526040808320429094019093556066859055609654835182815285518184015285518795899563ffffffff909416947f608828ad904a0c9250c09004ba7226efb08f35a5c815bb3f76b5a8a271cd08b29489949384938401928601918190849084905b83811015611261578181015183820152602001611249565b50505050905090810190601f16801561128e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a4505050565b60655474010000000000000000000000000000000000000000900460ff1681565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b600054610100900460ff16806112f657506112f6611b88565b80611304575060005460ff16155b611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff161580156113bf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6113c884611b99565b609880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556096805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090911617905560668390558215611443576000838152609960205260409020600190555b61144c82611747565b801561096e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050505050565b611489611623565b73ffffffffffffffffffffffffffffffffffffffff166114a7610b0f565b73ffffffffffffffffffffffffffffffffffffffff161461152957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611595576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612d286026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3390565b8260005b60208110156116ca57600183821c16600085836020811061164857fe5b60200201519050816001141561168e57808460405160200180838152602001828152602001925050506040516020818303038152906040528051906020012093506116c0565b838160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012093505b505060010161162b565b509392505050565b6040805160e09290921b7fffffffff00000000000000000000000000000000000000000000000000000000166020808401919091527f4e4f4d41440000000000000000000000000000000000000000000000000000006024840152815180840360090181526029909301909152815191012090565b609754801580159061175a57506105dc81115b156117d0576105dc8210156117d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f7074696d69737469632074696d656f757420746f6f206c6f77000000000000604482015290519081900360640190fd5b6301e13380821061184257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6f7074696d69737469632074696d656f757420746f6f20686967680000000000604482015290519081900360640190fd5b60978290556040805183815290517fa8de34d9c26dbb20579bc8c8957813e3168af7c5092d7668390e34471dc4ffb49181900360200190a15050565b81516000906020840161189964ffffffffff85168284611cfe565b925050505b92915050565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660286004611d5d565b6000806118e183611d7e565b6bffffffffffffffffffffffff16905060006118fc84611d92565b6bffffffffffffffffffffffff169091209392505050565b600061189e61192283611da6565b611dd7565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826004611d5d565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660246004611d5d565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660046020611dda565b600061189e604c806119ec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008616611d92565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000861692916bffffffffffffffffffffffff91909116036000611f85565b6060600080611a3884611d92565b6bffffffffffffffffffffffff1690506040519150819250611a5d8483602001612017565b508181016020016040529052919050565b6065805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f0f20622a7af9e952a6fec654a196f29e04477b5d335772c26902bec35cc9f22a929181900390910190a15050565b600080611b016108ab565b8585604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050611b428161214d565b60655490915073ffffffffffffffffffffffffffffffffffffffff16611b68828561219e565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b6000611b933061222e565b15905090565b600054610100900460ff1680611bb25750611bb2611b88565b80611bc0575060005460ff16155b611c15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff16158015611c7b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611c83612234565b611c8c82611a6e565b606580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015611cfa57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b600080611d0b8484612357565b9050604051811115611d1b575060005b80611d49577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000091505061089e565b611d548585856123c9565b95945050505050565b60008160200360080260ff16611d74858585611dda565b901c949350505050565b60781c6bffffffffffffffffffffffff1690565b60181c6bffffffffffffffffffffffff1690565b600061189e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316602c6020611dda565b90565b600060ff8216611dec5750600061089e565b611df584611d92565b6bffffffffffffffffffffffff16611e108460ff8516612357565b1115611eef57611e51611e2285611d7e565b6bffffffffffffffffffffffff16611e3986611d92565b6bffffffffffffffffffffffff16858560ff166123dc565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611eb4578181015183820152602001611e9c565b50505050905090810190601f168015611ee15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60208260ff161115611f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180612de1603a913960400191505060405180910390fd5b600882026000611f5b86611d7e565b6bffffffffffffffffffffffff1690506000611f7683612537565b91909501511695945050505050565b600080611f9186611d7e565b6bffffffffffffffffffffffff169050611faa86612580565b611fbe85611fb88489612357565b90612357565b1115611fed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000091505061200f565b611ff78186612357565b905061200b8364ffffffffff168286611cfe565b9150505b949350505050565b6000612022836125aa565b612077576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612e1b6028913960400191505060405180910390fd5b612080836125bc565b6120d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612e43602b913960400191505060405180910390fd5b60006120e084611d92565b6bffffffffffffffffffffffff16905060006120fb85611d7e565b6bffffffffffffffffffffffff16905060006040519050848111156121205760206060fd5b8285848460045afa50612143612135876125f9565b64ffffffffff1686856123c9565b9695505050505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461221057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a612143868285856125ff565b3b151590565b600054610100900460ff168061224d575061224d611b88565b8061225b575060005460ff16155b6122b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff1615801561231657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b61231e6127ed565b6123266128ff565b8015610ae857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b8181018281101561189e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b606060006123e986612a8f565b91505060006123f786612a8f565b915050600061240586612a8f565b915050600061241386612a8f565b915050838383836040516020018080612e6e603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a8201526050016021612d7082397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b600061258b82611d92565b61259483611d7e565b016bffffffffffffffffffffffff169050919050565b60006125b582612b63565b1592915050565b60006125c7826125f9565b64ffffffffff1664ffffffffff14156125e257506000610fcf565b60006125ed83612580565b60405110199392505050565b60d81c90565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561267a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612d4e6022913960400191505060405180910390fd5b8360ff16601b148061268f57508360ff16601c145b6126e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612dbf6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612740573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611d5457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b600054610100900460ff16806128065750612806611b88565b80612814575060005460ff16155b612869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff1615801561232657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015610ae857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff16806129185750612918611b88565b80612926575060005460ff16155b61297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612d91602e913960400191505060405180910390fd5b600054610100900460ff161580156129e157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b60006129eb611623565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ae857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600080601f5b600f8160ff161115612af75760ff600882021684901c612ab481612b8b565b61ffff16841793508160ff16601014612acf57601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612a95565b50600f5b60ff8160ff161015612b5d5760ff600882021684901c612b1a81612b8b565b61ffff16831792508160ff16600014612b3557601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612afb565b50915091565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009081161490565b6000612b9d60048360ff16901c612bbb565b60ff161760081b62ffff0016612bb282612bbb565b60ff1617919050565b600060f08083179060ff82161415612bd7576030915050610fcf565b8060ff1660f11415612bed576031915050610fcf565b8060ff1660f21415612c03576032915050610fcf565b8060ff1660f31415612c19576033915050610fcf565b8060ff1660f41415612c2f576034915050610fcf565b8060ff1660f51415612c45576035915050610fcf565b8060ff1660f61415612c5b576036915050610fcf565b8060ff1660f71415612c71576037915050610fcf565b8060ff1660f81415612c87576038915050610fcf565b8060ff1660f91415612c9d576039915050610fcf565b8060ff1660fa1415612cb3576061915050610fcf565b8060ff1660fb1415612cc9576062915050610fcf565b8060ff1660fc1415612cdf576063915050610fcf565b8060ff1660fd1415612cf5576064915050610fcf565b8060ff1660fe1415612d0b576065915050610fcf565b8060ff1660ff1415612d21576066915050610fcf565b5091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75652e20417474656d7074656420746f20696e646578206174206f6666736574203078496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756554797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e20333220627974657354797065644d656d566965772f636f7079546f202d204e756c6c20706f696e74657220646572656654797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e74657220646572656654797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a164736f6c6343000706000a",
    "sourceMap": "633:12105:67:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8789:349;;;;;;;;;;;;;;;;-1:-1:-1;8789:349:67;;;;;;;:::i;:::-;;909:55;;;:::i;:::-;;;;;;;;;;;;;;;;1538:43;;;;;;;;;;;;;;;;-1:-1:-1;1538:43:67;;:::i;970:66::-;;;:::i;10657:711::-;;;;;;;;;;;;;;;;-1:-1:-1;10657:711:67;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1292:32;;;:::i;11451:118::-;;;:::i;5844:374::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5844:374:67;;-1:-1:-1;5844:374:67;;-1:-1:-1;;;5844:374:67;;;;;-1:-1:-1;5844:374:67;:::i;1537:28:65:-;;;:::i;4488:84::-;;;:::i;1438:44:67:-;;;;;;;;;;;;;;;;-1:-1:-1;1438:44:67;;:::i;7956:155::-;;;;;;;;;;;;;;;;-1:-1:-1;7956:155:67;;:::i;1266:35:65:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1335:85:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6730:975:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6730:975:67;;-1:-1:-1;6730:975:67;;-1:-1:-1;;;;;6730:975:67:i;1195:26::-;;;:::i;8343:95::-;;;;;;;;;;;;;;;;-1:-1:-1;8343:95:67;;;;:::i;9505:486::-;;;;;;;;;;;;;;;;-1:-1:-1;9505:486:67;;:::i;1042:69::-;;;:::i;4542:722::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4542:722:67;;-1:-1:-1;4542:722:67;;-1:-1:-1;;;;;4542:722:67:i;1453:19:65:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;1392:22;;;:::i;3537:517:67:-;;;;;;;;;;;;;;;;-1:-1:-1;3537:517:67;;;;;;;;;;;;;;;;;;;;;:::i;2261:240:7:-;;;;;;;;;;;;;;;;-1:-1:-1;2261:240:7;;;;:::i;171:33:68:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8789:349:67;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8906:19:67;;::::1;::::0;:38:::1;;-1:-1:-1::0;8929:15:67;;8906:38:::1;8898:70;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;8978:26;9007:16:::0;;;:9:::1;:16;::::0;;;;;;;;;;9033:29;;;;9077:54;;;;;;;::::1;::::0;;;;;9007:16;;9017:5;;9077:54:::1;::::0;;;;;;;;;::::1;1617:1:7;8789:349:67::0;;:::o;909:55::-;962:1;909:55;:::o;1538:43::-;;;;;;;;;;;;;:::o;970:66::-;1033:1;970:66;:::o;10657:711::-;10778:4;10931:15;;;:8;:15;;;;;;1108:1;10931:42;;10910:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11084:23;11110:43;11131:5;11138:6;11110:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11146:6:67;;-1:-1:-1;11110:20:67;;-1:-1:-1;11110:43:67:i;:::-;11084:69;;11224:31;11239:15;11224:14;:31::i;:::-;11220:120;;;11271:15;;;;:8;:15;;;;;:33;-1:-1:-1;11325:4:67;11318:11;;11220:120;11356:5;11349:12;;;10657:711;;;;;;:::o;1292:32::-;;;;:::o;11451:118::-;11549:12;;11507:7;;11533:29;;11549:12;;11533:15;:29::i;:::-;11526:36;;11451:118;:::o;5844:374::-;6009:19;;;;;;;;;;5986:20;6074:22;;;:8;:22;;;;;;;;6059:38;;:14;:38::i;:::-;:93;;;;6117:35;6123:12;6137:6;6145;6117:5;:35::i;:::-;6038:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6194:17;6202:8;6194:7;:17::i;:::-;;5844:374;;;;:::o;1537:28:65:-;;;;:::o;4488:84::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4488:84:65:o;1438:44:67:-;;;;;;;;;;;;;:::o;7956:155::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8063:41:67::1;8085:18;8063:21;:41::i;:::-;7956:155:::0;:::o;1266:35:65:-;;;:::o;1335:85:7:-;1407:6;;;;1335:85;:::o;6730:975:67:-;6786:13;;6876:15;:8;6786:13;6876:12;:15::i;:::-;6863:28;-1:-1:-1;6909:31:67;6929:11;6909:31;:16;:14;;;;:16::i;:::-;:31;;;6901:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7009:20;7032:11;:9;;;;:11::i;:::-;7076:22;;;;:8;:22;;;;;;7009:34;;-1:-1:-1;7061:38:67;;:14;:38::i;:::-;7053:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7164:7;;;;;:12;7156:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7201:7;:11;;;;;;7211:1;7268:22;;;:8;:22;;;;;1108:1;7268:48;;7376:21;:19;;;;:21::i;:::-;7358:47;;;7419:11;:9;;;;:11::i;:::-;7444:10;:8;;;;:10::i;:::-;7468:11;:9;;;;:11::i;:::-;7493:17;:9;:7;;;;:9::i;:::-;:15;;;:17::i;:::-;7358:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7567:31:67;;;;-1:-1:-1;7589:4:67;;-1:-1:-1;7575:12:67;;7567:31;;;;;-1:-1:-1;;7643:7:67;:11;;;;7653:1;7643:11;;;;;;7653:1;-1:-1:-1;6730:975:67;;;;:::o;1195:26::-;;;;;;:::o;8343:95::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8410:21:67::1;8422:8;8410:11;:21::i;9505:486::-:0;9565:4;1033:1;9693:29;;9689:46;;;-1:-1:-1;9731:4:67;9724:11;;9689:46;1108:1;9749:32;;;:63;;-1:-1:-1;9785:27:67;;9749:63;9745:93;;;-1:-1:-1;9833:5:67;9826:12;;9745:93;9849:13;9865:16;;;:9;:16;;;;;;9895:10;9891:53;;9928:5;9921:12;;;;;9891:53;9960:15;:24;;;9505:486;-1:-1:-1;;9505:486:67:o;1042:69::-;1108:1;1042:69;:::o;4542:722::-;4758:13;;4746:8;:25;4738:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4863:51;4883:8;4893;4903:10;4863:19;:51::i;:::-;4842:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4993:15;:13;:15::i;:::-;5107:17;;5067:19;;;;:9;:19;;;;;;;;5089:15;:35;;;5067:57;;;5166:13;:24;;;5212:12;;5205:52;;;;;;;;;;;;;5077:8;;5226;;5212:12;;;;;5205:52;;5246:10;;5205:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4542:722;;;:::o;1453:19:65:-;;;;;;;;;:::o;1392:22::-;;;;;;:::o;3537:517:67:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;3716:32:67::1;3739:8;3716:22;:32::i;:::-;3791:7;:11:::0;;;::::1;3801:1;3791:11;::::0;;3812:12:::1;:28:::0;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;3850:13:::1;:30:::0;;;3937:28;;3933:63:::1;;3967:25;::::0;;;:9:::1;:25;::::0;;;;3995:1:::1;3967:29:::0;;3933:63:::1;4006:41;4028:18;4006:21;:41::i;:::-;1794:14:11::0;1790:66;;;1840:5;1824:21;;;;;;3537:517:67;;;;;:::o;2261:240:7:-;1558:12;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:22:::1;::::0;::::1;2341:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2450:6;::::0;2429:38:::1;::::0;::::1;::::0;;::::1;::::0;2450:6:::1;::::0;2429:38:::1;::::0;2450:6:::1;::::0;2429:38:::1;2477:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2261:240::o;828:104:18:-;915:10;828:104;:::o;3852:558:72:-;4031:5;3992:16;4047:357;340:2;4067:1;:14;4047:357;;;4136:4;4121:11;;;4120:20;4102:15;4170:7;4131:1;4170:10;;;;;;;;;;;4154:26;;4198:7;4209:1;4198:12;4194:200;;;4268:5;4275:8;4251:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4241:44;;;;;;4230:55;;4194:200;;;4362:8;4372:5;4345:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4335:44;;;;;;4324:55;;4194:200;-1:-1:-1;;4083:3:72;;4047:357;;;;3852:558;;;;;:::o;3155:178:65:-;3287:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3277:49;;;;;;3155:178::o;11828:771:67:-;12110:17;;12141:13;;;;;:32;;;12169:4;12158:8;:15;12141:32;12137:115;;;12217:4;12195:18;:26;;12187:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12411:8;12390:18;:29;12382:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12499:17;:38;;;12552:40;;;;;;;;;;;;;;;;;11828:771;;:::o;13237:368:32:-;13341:10;;13307:7;;13496:4;13487:14;;13572:26;;;;13487:14;13341:10;13572:5;:26::i;:::-;13565:33;;;;13237:368;;;;;:::o;3003:127:73:-;3065:6;3097:25;:18;;;3116:2;3120:1;3097:18;:25::i;21799:298:32:-;21855:14;21881:12;21896;21900:7;21896:3;:12::i;:::-;21881:27;;;;21918:12;21933;21937:7;21933:3;:12::i;:::-;21918:27;;22060:21;;;;21964:127;-1:-1:-1;;;21964:127:32:o;3382:175:73:-;3473:7;3503:47;3530:19;3540:8;3530:9;:19::i;:::-;3503:26;:47::i;2487:121::-;2544:6;2576:24;:18;;;2544:6;2598:1;2576:18;:24::i;2824:121::-;2880:6;2912:25;:18;;;2931:2;2935:1;2912:18;:25::i;2661:111::-;2718:7;2744:21;:14;;;2759:1;2762:2;2744:14;:21::i;3679:152::-;3734:7;3760:64;509:2;;3790:14;:12;;;;:14::i;:::-;3760;;;;:64;3790:30;;;;;;3822:1;3760:14;:64::i;27680:614:32:-;27735:16;27763:11;27784:12;27799;27803:7;27799:3;:12::i;:::-;27784:27;;;;27929:4;27923:11;27916:18;;27984:3;27977:10;;28006:33;28019:7;28028:3;28034:4;28028:10;28006:12;:33::i;:::-;-1:-1:-1;28161:14:32;;;28177:4;28157:25;28151:4;28144:39;28224:17;;28058:230;;-1:-1:-1;28058:230:32:o;3439:179:65:-;3522:7;;;;3539:21;;;;;;;;;;;3575:36;;;3522:7;;;;3575:36;;;;;;;;;;;;;;;;;;;;;;;3439:179;;:::o;3903:392::-;4046:4;4062:15;4120:16;:14;:16::i;:::-;4138:8;4148;4103:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4080:87;;;;;;4062:105;;4187:37;4216:7;4187:28;:37::i;:::-;4280:7;;4177:47;;-1:-1:-1;4280:7:65;;4242:34;4177:47;4265:10;4242:13;:34::i;:::-;:45;;;;3903:392;-1:-1:-1;;;;;3903:392:65:o;1952:123:11:-;2000:4;2024:44;2062:4;2024:29;:44::i;:::-;2023:45;2016:52;;1952:123;:::o;2605:166:65:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;2686:16:65::1;:14;:16::i;:::-;2712:21;2724:8;2712:11;:21::i;:::-;2743:5;:21:::0;;;::::1;::::0;::::1;::::0;;1790:66:11;;;;1840:5;1824:21;;;;;;1790:66;2605:166:65;;:::o;12397:443:32:-;12478:15;;12520:14;:4;12529;12520:8;:14::i;:::-;12505:29;;12657:4;12651:11;12645:4;12642:21;12639:2;;;-1:-1:-1;12690:1:32;12639:2;12728:9;12724:51;;12760:4;12753:11;;;;;12724:51;12794:39;12815:5;12822:4;12828;12794:20;:39::i;:::-;12784:49;12397:443;-1:-1:-1;;;;;12397:443:32:o;20525:191::-;20614:14;20697:6;20692:2;:11;20707:1;20691:17;20647:62;;20655:30;20661:7;20670:6;20678;20655:5;:30::i;:::-;20647:62;;;20525:191;-1:-1:-1;;;;20525:191:32:o;14658:373::-;14994:3;14990:17;2800:26;14986:29;;14811:214::o;15855:291::-;16110:2;16106:16;2800:26;16102:28;;16008:132::o;3197:115:73:-;3257:7;3283:22;:14;;;3298:2;3302;3283:14;:22::i;1167:127:75:-;1280:4;1167:127::o;19502:677:32:-;19587:14;19617:11;;;19613:37;;-1:-1:-1;19646:1:32;19631:17;;19613:37;19684:12;19688:7;19684:3;:12::i;:::-;19663:33;;:18;:6;:18;;;:10;:18::i;:::-;:33;19659:140;;;19719:68;19735:12;19739:7;19735:3;:12::i;:::-;19719:68;;19749:12;19753:7;19749:3;:12::i;:::-;19719:68;;19763:6;19779;19771:15;;19719;:68::i;:::-;19712:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19659:140;19826:2;19816:6;:12;;;;19808:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19929:1;19920:10;;19902:15;19955:12;19959:7;19955:3;:12::i;:::-;19940:27;;;;19977:13;19993:19;20002:9;19993:8;:19::i;:::-;20137:17;;;;20131:24;20127:36;;;-1:-1:-1;;;;;20031:142:32:o;16713:370::-;16814:7;16833:12;16848;16852:7;16848:3;:12::i;:::-;16833:27;;;;16950:12;16954:7;16950:3;:12::i;:::-;16921:26;16942:4;16921:16;:4;16930:6;16921:8;:16::i;:::-;:20;;:26::i;:::-;:41;16917:83;;;16985:4;16978:11;;;;;16917:83;17017:16;:4;17026:6;17017:8;:16::i;:::-;17010:23;;17050:26;17056:7;17050:26;;17065:4;17071;17050:5;:26::i;:::-;17043:33;;;16713:370;;;;;;;:::o;26400:910::-;26478:15;26513:16;26521:7;26513;:16::i;:::-;26505:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26592:16;26600:7;26592;:16::i;:::-;26584:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26666:12;26681;26685:7;26681:3;:12::i;:::-;26666:27;;;;26703:15;26721:12;26725:7;26721:3;:12::i;:::-;26703:30;;;;26744:11;26873:4;26867:11;26860:18;;26960:7;26955:3;26952:16;26949:2;;;27000:4;26994;26987:18;26949:2;27215:4;27206:7;27200:4;27191:7;27188:1;27181:5;27170:50;27166:55;27251:52;27272:15;27279:7;27272:6;:15::i;:::-;27251:52;;27289:7;27298:4;27251:20;:52::i;:::-;27241:62;26400:910;-1:-1:-1;;;;;;26400:910:32: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;737:413:17:-;1097:20;1135:8;;;737:413::o;935:126:7:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;992:26:7::1;:24;:26::i;:::-;1028;:24;:26::i;:::-;1794:14:11::0;1790:66;;;1840:5;1824:21;;;;;;935:126:7;:::o;2553:172:31:-;2638:7;;;2663;;;;2655:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11432:426:32;11664:2;11660:27;;;11734:17;;;;11726:26;;;11799:17;11795:2;11791:26;;11563:289::o;18259:741::-;18405:17;18437:9;18450:15;18460:4;18450:9;:15::i;:::-;18434:31;;;18478:9;18491:15;18501:4;18491:9;:15::i;:::-;18475:31;;;18519:9;18532:17;18542:6;18532:9;:17::i;:::-;18516:33;;;18562:9;18575:17;18585:6;18575:9;:17::i;:::-;18559:33;;;18742:1;18804;18884;18946;18628:355;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18628:355:32;;;;;;;;;;;;;;;;;;;;;;18259:741;-1:-1:-1;;;;;;;;;;;18259:741:32:o;6845:366::-;7115:66;7085:12;;;;7064:131;;6970:235::o;16320:113::-;16373:7;16414:12;16418:7;16414:3;:12::i;:::-;16399;16403:7;16399:3;:12::i;:::-;:27;16392:34;;;;16320:113;;;:::o;7750:103::-;7807:4;7831:15;7838:7;7831:6;:15::i;:::-;7830:16;;7750:103;-1:-1:-1;;7750:103:32:o;8272:319::-;8329:8;8353:15;8360:7;8353:6;:15::i;:::-;:31;;8372:12;8353:31;8349:52;;;-1:-1:-1;8394:5:32;8387:12;;8349:52;8410:12;8425;8429:7;8425:3;:12::i;:::-;8568:4;8562:11;-1:-1:-1;8549:26:32;;8456:129;-1:-1:-1;;;8456:129:32:o;13797:276::-;14016:3;14012:17;;13886:181::o;1960:1414:23:-;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;759:64:18;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1794:14;1790:66;;;1840:5;1824:21;;;;;;759:64:18;:::o;1067:192:7:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;1134:17:7::1;1154:12;:10;:12::i;:::-;1176:6;:18:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;1209:43:::1;::::0;1176:18;;-1:-1:-1;1176:18:7;-1:-1:-1;;1209:43:7::1;::::0;-1:-1:-1;;1209:43:7::1;1778:1:11;1794:14:::0;1790:66;;;1840:5;1824:21;;;;;;1067:192:7;:::o;4809:556:32:-;4863:13;;4919:2;4904:202;4927:2;4923:1;:6;;;4904:202;;;4973:13;4984:1;4980:5;;4973:13;;;;5010:14;4973:13;5010:7;:14::i;:::-;5001:23;;;;;;5042:1;:7;;5047:2;5042:7;5038:58;;5079:2;5069:12;;;;;5038:58;-1:-1:-1;4931:6:32;;4904:202;;;-1:-1:-1;5169:2:32;5154:205;5177:3;5173:1;:7;;;5154:205;;;5225:13;5236:1;5232:5;;5225:13;;;;5263:14;5225:13;5263:7;:14::i;:::-;5253:24;;;;;;5295:1;:6;;5300:1;5295:6;5291:58;;5332:2;5321:13;;;;;5291:58;-1:-1:-1;5183:6:32;;5154:205;;;;4809:556;;;:::o;7520:101::-;7610:4;7599:15;;;;;7520:101::o;4286:199::-;4336:14;4373:18;4389:1;4383:2;:7;;;;4373:9;:18::i;:::-;4362:29;;;4427:1;4415:13;;;4449;4459:2;4449:9;:13::i;:::-;4438:24;;;;4286:199;-1:-1:-1;4286:199:32:o;3073:1041::-;3125:10;3291:4;3286:9;;;;3337:15;;;;3333:35;;;3362:4;3355:11;;;;;3333:35;3386:7;:15;;3397:4;3386:15;3382:35;;;3411:4;3404:11;;;;;3382:35;3435:7;:15;;3446:4;3435:15;3431:35;;;3460:4;3453:11;;;;;3431:35;3484:7;:15;;3495:4;3484:15;3480:35;;;3509:4;3502:11;;;;;3480:35;3533:7;:15;;3544:4;3533:15;3529:35;;;3558:4;3551:11;;;;;3529:35;3582:7;:15;;3593:4;3582:15;3578:35;;;3607:4;3600:11;;;;;3578:35;3631:7;:15;;3642:4;3631:15;3627:35;;;3656:4;3649:11;;;;;3627:35;3680:7;:15;;3691:4;3680:15;3676:35;;;3705:4;3698:11;;;;;3676:35;3729:7;:15;;3740:4;3729:15;3725:35;;;3754:4;3747:11;;;;;3725:35;3778:7;:15;;3789:4;3778:15;3774:35;;;3803:4;3796:11;;;;;3774:35;3827:7;:15;;3838:4;3827:15;3823:35;;;3852:4;3845:11;;;;;3823:35;3876:7;:15;;3887:4;3876:15;3872:35;;;3901:4;3894:11;;;;;3872:35;3925:7;:15;;3936:4;3925:15;3921:35;;;3950:4;3943:11;;;;;3921:35;3974:7;:15;;3985:4;3974:15;3970:35;;;3999:4;3992:11;;;;;3970:35;4023:7;:15;;4034:4;4023:15;4019:35;;;4048:4;4041:11;;;;;4019:35;4072:7;:15;;4083:4;4072:15;4068:35;;;4097:4;4090:11;;;;;4068:35;3073:1041;;;;:::o",
    "linkReferences": {},
    "immutableReferences": {
      "43847": [
        {
          "start": 2797,
          "length": 32
        },
        {
          "start": 2881,
          "length": 32
        }
      ]
    }
  },
  "methodIdentifiers": {
    "LEGACY_STATUS_NONE()": "18810b89",
    "LEGACY_STATUS_PROCESSED()": "b1e3fb8c",
    "LEGACY_STATUS_PROVEN()": "2e7bb32c",
    "VERSION()": "ffa1ad74",
    "acceptableRoot(bytes32)": "a3f81d68",
    "committedRoot()": "67a6771d",
    "confirmAt(bytes32)": "71bfb7b8",
    "homeDomainHash()": "45630b1a",
    "initialize(uint32,address,bytes32,uint256)": "e7e7a7b7",
    "localDomain()": "8d3638f4",
    "messages(bytes32)": "2bbd59ca",
    "optimisticSeconds()": "39992668",
    "owner()": "8da5cb5b",
    "process(bytes)": "928bc4b2",
    "prove(bytes32,bytes32[32],uint256)": "371d3071",
    "proveAndProcess(bytes,bytes32[32],uint256)": "6188af0e",
    "remoteDomain()": "961681dc",
    "renounceOwnership()": "715018a6",
    "setConfirmation(bytes32,uint256)": "088b5ed3",
    "setOptimisticTimeout(uint256)": "885b5e2d",
    "setUpdater(address)": "9d54f419",
    "state()": "c19d93fb",
    "transferOwnership(address)": "f2fde38b",
    "update(bytes32,bytes32,bytes)": "b31c01fb",
    "updater()": "df034cd0"
  },
  "ast": {
    "absolutePath": "packages/contracts-core/contracts/Replica.sol",
    "id": 44616,
    "exportedSymbols": {
      "IMessageRecipient": [
        45034
      ],
      "MerkleLib": [
        45604
      ],
      "Message": [
        45831
      ],
      "NomadBase": [
        43998
      ],
      "Replica": [
        44615
      ],
      "TypedMemView": [
        29602
      ],
      "Version0": [
        44622
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:12693:67",
    "nodes": [
      {
        "id": 44066,
        "nodeType": "PragmaDirective",
        "src": "46:22:67",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 44068,
        "nodeType": "ImportDirective",
        "src": "116:40:67",
        "absolutePath": "packages/contracts-core/contracts/Version0.sol",
        "file": "./Version0.sol",
        "scope": 44616,
        "sourceUnit": 44623,
        "symbolAliases": [
          {
            "foreign": {
              "id": 44067,
              "name": "Version0",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:8:67",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 44070,
        "nodeType": "ImportDirective",
        "src": "157:42:67",
        "absolutePath": "packages/contracts-core/contracts/NomadBase.sol",
        "file": "./NomadBase.sol",
        "scope": 44616,
        "sourceUnit": 43999,
        "symbolAliases": [
          {
            "foreign": {
              "id": 44069,
              "name": "NomadBase",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "165:9:67",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 44072,
        "nodeType": "ImportDirective",
        "src": "200:44:67",
        "absolutePath": "packages/contracts-core/contracts/libs/Merkle.sol",
        "file": "./libs/Merkle.sol",
        "scope": 44616,
        "sourceUnit": 45605,
        "symbolAliases": [
          {
            "foreign": {
              "id": 44071,
              "name": "MerkleLib",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "208:9:67",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 44074,
        "nodeType": "ImportDirective",
        "src": "245:43:67",
        "absolutePath": "packages/contracts-core/contracts/libs/Message.sol",
        "file": "./libs/Message.sol",
        "scope": 44616,
        "sourceUnit": 45832,
        "symbolAliases": [
          {
            "foreign": {
              "id": 44073,
              "name": "Message",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "253:7:67",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 44076,
        "nodeType": "ImportDirective",
        "src": "289:69:67",
        "absolutePath": "packages/contracts-core/contracts/interfaces/IMessageRecipient.sol",
        "file": "./interfaces/IMessageRecipient.sol",
        "scope": 44616,
        "sourceUnit": 45035,
        "symbolAliases": [
          {
            "foreign": {
              "id": 44075,
              "name": "IMessageRecipient",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "297:17:67",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 44078,
        "nodeType": "ImportDirective",
        "src": "405:78:67",
        "absolutePath": "node_modules/@summa-tx/memview-sol/contracts/TypedMemView.sol",
        "file": "@summa-tx/memview-sol/contracts/TypedMemView.sol",
        "scope": 44616,
        "sourceUnit": 29603,
        "symbolAliases": [
          {
            "foreign": {
              "id": 44077,
              "name": "TypedMemView",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "413:12:67",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 44615,
        "nodeType": "ContractDefinition",
        "src": "633:12105:67",
        "nodes": [
          {
            "id": 44086,
            "nodeType": "UsingForDirective",
            "src": "723:35:67",
            "libraryName": {
              "id": 44084,
              "name": "MerkleLib",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 45604,
              "src": "729:9:67",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MerkleLib_$45604",
                "typeString": "library MerkleLib"
              }
            },
            "typeName": {
              "id": 44085,
              "name": "MerkleLib.Tree",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 45067,
              "src": "743:14:67",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Tree_$45067_storage_ptr",
                "typeString": "struct MerkleLib.Tree"
              }
            }
          },
          {
            "id": 44089,
            "nodeType": "UsingForDirective",
            "src": "763:29:67",
            "libraryName": {
              "id": 44087,
              "name": "TypedMemView",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 29602,
              "src": "769:12:67",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TypedMemView_$29602",
                "typeString": "library TypedMemView"
              }
            },
            "typeName": {
              "id": 44088,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "786:5:67",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 44092,
            "nodeType": "UsingForDirective",
            "src": "797:31:67",
            "libraryName": {
              "id": 44090,
              "name": "TypedMemView",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 29602,
              "src": "803:12:67",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TypedMemView_$29602",
                "typeString": "library TypedMemView"
              }
            },
            "typeName": {
              "id": 44091,
              "name": "bytes29",
              "nodeType": "ElementaryTypeName",
              "src": "820:7:67",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes29",
                "typeString": "bytes29"
              }
            }
          },
          {
            "id": 44095,
            "nodeType": "UsingForDirective",
            "src": "833:26:67",
            "libraryName": {
              "id": 44093,
              "name": "Message",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 45831,
              "src": "839:7:67",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Message_$45831",
                "typeString": "library Message"
              }
            },
            "typeName": {
              "id": 44094,
              "name": "bytes29",
              "nodeType": "ElementaryTypeName",
              "src": "851:7:67",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes29",
                "typeString": "bytes29"
              }
            }
          },
          {
            "id": 44101,
            "nodeType": "VariableDeclaration",
            "src": "909:55:67",
            "constant": true,
            "functionSelector": "18810b89",
            "mutability": "constant",
            "name": "LEGACY_STATUS_NONE",
            "scope": 44615,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 44096,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "909:7:67",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "30",
                  "id": 44099,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "962:1:67",
                  "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": 44098,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "954:7:67",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes32_$",
                  "typeString": "type(bytes32)"
                },
                "typeName": {
                  "id": 44097,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "954:7:67",
                  "typeDescriptions": {}
                }
              },
              "id": 44100,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "954:10:67",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 44110,
            "nodeType": "VariableDeclaration",
            "src": "970:66:67",
            "constant": true,
            "functionSelector": "2e7bb32c",
            "mutability": "constant",
            "name": "LEGACY_STATUS_PROVEN",
            "scope": 44615,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 44102,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "970:7:67",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "arguments": [
                    {
                      "hexValue": "31",
                      "id": 44107,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1033:1:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      }
                    ],
                    "id": 44106,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "nodeType": "ElementaryTypeNameExpression",
                    "src": "1025:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_type$_t_uint256_$",
                      "typeString": "type(uint256)"
                    },
                    "typeName": {
                      "id": 44105,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1025:7:67",
                      "typeDescriptions": {}
                    }
                  },
                  "id": 44108,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "typeConversion",
                  "lValueRequested": false,
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "1025:10:67",
                  "tryCall": false,
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                ],
                "id": 44104,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1017:7:67",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes32_$",
                  "typeString": "type(bytes32)"
                },
                "typeName": {
                  "id": 44103,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1017:7:67",
                  "typeDescriptions": {}
                }
              },
              "id": 44109,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1017:19:67",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 44119,
            "nodeType": "VariableDeclaration",
            "src": "1042:69:67",
            "constant": true,
            "functionSelector": "b1e3fb8c",
            "mutability": "constant",
            "name": "LEGACY_STATUS_PROCESSED",
            "scope": 44615,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 44111,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1042:7:67",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "arguments": [
                    {
                      "hexValue": "32",
                      "id": 44116,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1108:1:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      }
                    ],
                    "id": 44115,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "nodeType": "ElementaryTypeNameExpression",
                    "src": "1100:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_type$_t_uint256_$",
                      "typeString": "type(uint256)"
                    },
                    "typeName": {
                      "id": 44114,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1100:7:67",
                      "typeDescriptions": {}
                    }
                  },
                  "id": 44117,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "typeConversion",
                  "lValueRequested": false,
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "1100:10:67",
                  "tryCall": false,
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                ],
                "id": 44113,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1092:7:67",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes32_$",
                  "typeString": "type(bytes32)"
                },
                "typeName": {
                  "id": 44112,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1092:7:67",
                  "typeDescriptions": {}
                }
              },
              "id": 44118,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1092:19:67",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 44121,
            "nodeType": "VariableDeclaration",
            "src": "1195:26:67",
            "constant": false,
            "functionSelector": "961681dc",
            "mutability": "mutable",
            "name": "remoteDomain",
            "scope": 44615,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 44120,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "1195:6:67",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 44123,
            "nodeType": "VariableDeclaration",
            "src": "1292:32:67",
            "constant": false,
            "functionSelector": "39992668",
            "mutability": "mutable",
            "name": "optimisticSeconds",
            "scope": 44615,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 44122,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1292:7:67",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "id": 44125,
            "nodeType": "VariableDeclaration",
            "src": "1355:21:67",
            "constant": false,
            "mutability": "mutable",
            "name": "entered",
            "scope": 44615,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 44124,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1355:5:67",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "visibility": "private"
          },
          {
            "id": 44129,
            "nodeType": "VariableDeclaration",
            "src": "1438:44:67",
            "constant": false,
            "functionSelector": "71bfb7b8",
            "mutability": "mutable",
            "name": "confirmAt",
            "scope": 44615,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
              "typeString": "mapping(bytes32 => uint256)"
            },
            "typeName": {
              "id": 44128,
              "keyType": {
                "id": 44126,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1446:7:67",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "1438:27:67",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                "typeString": "mapping(bytes32 => uint256)"
              },
              "valueType": {
                "id": 44127,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1457:7:67",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 44133,
            "nodeType": "VariableDeclaration",
            "src": "1538:43:67",
            "constant": false,
            "functionSelector": "2bbd59ca",
            "mutability": "mutable",
            "name": "messages",
            "scope": 44615,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
              "typeString": "mapping(bytes32 => bytes32)"
            },
            "typeName": {
              "id": 44132,
              "keyType": {
                "id": 44130,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1546:7:67",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "1538:27:67",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                "typeString": "mapping(bytes32 => bytes32)"
              },
              "valueType": {
                "id": 44131,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1557:7:67",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 44137,
            "nodeType": "VariableDeclaration",
            "src": "1664:25:67",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 44615,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$45_storage",
              "typeString": "uint256[45]"
            },
            "typeName": {
              "baseType": {
                "id": 44134,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1664:7:67",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 44136,
              "length": {
                "hexValue": "3435",
                "id": 44135,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1672:2:67",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_45_by_1",
                  "typeString": "int_const 45"
                },
                "value": "45"
              },
              "nodeType": "ArrayTypeName",
              "src": "1664:11:67",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$45_storage_ptr",
                "typeString": "uint256[45]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 44146,
            "nodeType": "EventDefinition",
            "src": "2054:121:67",
            "anonymous": false,
            "documentation": {
              "id": 44138,
              "nodeType": "StructuredDocumentation",
              "src": "1737:312:67",
              "text": " @notice Emitted when message is processed\n @param messageHash The keccak256 hash of the message that was processed\n @param success TRUE if the call was executed successfully,\n FALSE if the call reverted or threw\n @param returnData the return data from the external call"
            },
            "name": "Process",
            "parameters": {
              "id": 44145,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44140,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "messageHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 44146,
                  "src": "2077:27:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 44139,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2077:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44142,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 44146,
                  "src": "2114:20:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 44141,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2114:4:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44144,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "returnData",
                  "nodeType": "VariableDeclaration",
                  "scope": 44146,
                  "src": "2144:24:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 44143,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2144:5:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2067:107:67"
            }
          },
          {
            "id": 44151,
            "nodeType": "EventDefinition",
            "src": "2323:44:67",
            "anonymous": false,
            "documentation": {
              "id": 44147,
              "nodeType": "StructuredDocumentation",
              "src": "2181:137:67",
              "text": " @notice Emitted when the value for optimisticTimeout is set\n @param timeout The new value for optimistic timeout"
            },
            "name": "SetOptimisticTimeout",
            "parameters": {
              "id": 44150,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44149,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "timeout",
                  "nodeType": "VariableDeclaration",
                  "scope": 44151,
                  "src": "2350:15:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44148,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2350:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2349:17:67"
            }
          },
          {
            "id": 44160,
            "nodeType": "EventDefinition",
            "src": "2644:123:67",
            "anonymous": false,
            "documentation": {
              "id": 44152,
              "nodeType": "StructuredDocumentation",
              "src": "2373:266:67",
              "text": " @notice Emitted when a root's confirmation is modified by governance\n @param root The root for which confirmAt has been set\n @param previousConfirmAt The previous value of confirmAt\n @param newConfirmAt The new value of confirmAt"
            },
            "name": "SetConfirmation",
            "parameters": {
              "id": 44159,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44154,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "root",
                  "nodeType": "VariableDeclaration",
                  "scope": 44160,
                  "src": "2675:20:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 44153,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2675:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44156,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "previousConfirmAt",
                  "nodeType": "VariableDeclaration",
                  "scope": 44160,
                  "src": "2705:25:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44155,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2705:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44158,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newConfirmAt",
                  "nodeType": "VariableDeclaration",
                  "scope": 44160,
                  "src": "2740:20:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44157,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2740:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2665:101:67"
            }
          },
          {
            "id": 44169,
            "nodeType": "FunctionDefinition",
            "src": "2819:59:67",
            "body": {
              "id": 44168,
              "nodeType": "Block",
              "src": "2876:2:67",
              "statements": []
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 44165,
                    "name": "_localDomain",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 44162,
                    "src": "2862:12:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  }
                ],
                "id": 44166,
                "modifierName": {
                  "id": 44164,
                  "name": "NomadBase",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43998,
                  "src": "2852:9:67",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_NomadBase_$43998_$",
                    "typeString": "type(contract NomadBase)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2852:23:67"
              }
            ],
            "name": "",
            "parameters": {
              "id": 44163,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44162,
                  "mutability": "mutable",
                  "name": "_localDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 44169,
                  "src": "2831:19:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 44161,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2831:6:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2830:21:67"
            },
            "returnParameters": {
              "id": 44167,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2876:0:67"
            },
            "scope": 44615,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 44217,
            "nodeType": "FunctionDefinition",
            "src": "3537:517:67",
            "body": {
              "id": 44216,
              "nodeType": "Block",
              "src": "3706:348:67",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 44184,
                        "name": "_updater",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44174,
                        "src": "3739:8:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 44183,
                      "name": "__NomadBase_initialize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43905,
                      "src": "3716:22:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 44185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3716:32:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44186,
                  "nodeType": "ExpressionStatement",
                  "src": "3716:32:67"
                },
                {
                  "expression": {
                    "id": 44189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 44187,
                      "name": "entered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44125,
                      "src": "3791:7:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "31",
                      "id": 44188,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3801:1:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "3791:11:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 44190,
                  "nodeType": "ExpressionStatement",
                  "src": "3791:11:67"
                },
                {
                  "expression": {
                    "id": 44193,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 44191,
                      "name": "remoteDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44121,
                      "src": "3812:12:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 44192,
                      "name": "_remoteDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44172,
                      "src": "3827:13:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "3812:28:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 44194,
                  "nodeType": "ExpressionStatement",
                  "src": "3812:28:67"
                },
                {
                  "expression": {
                    "id": 44197,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 44195,
                      "name": "committedRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43853,
                      "src": "3850:13:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 44196,
                      "name": "_committedRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44176,
                      "src": "3866:14:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3850:30:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 44198,
                  "nodeType": "ExpressionStatement",
                  "src": "3850:30:67"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 44204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 44199,
                      "name": "_committedRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44176,
                      "src": "3937:14:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 44202,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3963:1:67",
                          "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": 44201,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3955:7:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": {
                          "id": 44200,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3955:7:67",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 44203,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3955:10:67",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3937:28:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 44211,
                  "nodeType": "IfStatement",
                  "src": "3933:63:67",
                  "trueBody": {
                    "expression": {
                      "id": 44209,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "baseExpression": {
                          "id": 44205,
                          "name": "confirmAt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44129,
                          "src": "3967:9:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                            "typeString": "mapping(bytes32 => uint256)"
                          }
                        },
                        "id": 44207,
                        "indexExpression": {
                          "id": 44206,
                          "name": "_committedRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44176,
                          "src": "3977:14:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "nodeType": "IndexAccess",
                        "src": "3967:25:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "hexValue": "31",
                        "id": 44208,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3995:1:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "3967:29:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 44210,
                    "nodeType": "ExpressionStatement",
                    "src": "3967:29:67"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 44213,
                        "name": "_optimisticSeconds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44178,
                        "src": "4028:18:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 44212,
                      "name": "_setOptimisticTimeout",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44609,
                      "src": "4006:21:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 44214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4006:41:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44215,
                  "nodeType": "ExpressionStatement",
                  "src": "4006:41:67"
                }
              ]
            },
            "documentation": {
              "id": 44170,
              "nodeType": "StructuredDocumentation",
              "src": "2930:602:67",
              "text": " @notice Initialize the replica\n @dev Performs the following action:\n      - initializes inherited contracts\n      - initializes re-entrancy guard\n      - sets remote domain\n      - sets a trusted root, and pre-approves messages under it\n      - sets the optimistic timer\n @param _remoteDomain The domain of the Home contract this follows\n @param _updater The EVM id of the updater\n @param _committedRoot A trusted root from which to start the Replica\n @param _optimisticSeconds The time a new root must wait to be confirmed"
            },
            "functionSelector": "e7e7a7b7",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 44181,
                "modifierName": {
                  "id": 44180,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23659,
                  "src": "3694:11:67",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3694:11:67"
              }
            ],
            "name": "initialize",
            "parameters": {
              "id": 44179,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44172,
                  "mutability": "mutable",
                  "name": "_remoteDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 44217,
                  "src": "3566:20:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 44171,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3566:6:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44174,
                  "mutability": "mutable",
                  "name": "_updater",
                  "nodeType": "VariableDeclaration",
                  "scope": 44217,
                  "src": "3596:16:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 44173,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3596:7:67",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44176,
                  "mutability": "mutable",
                  "name": "_committedRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 44217,
                  "src": "3622:22:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 44175,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3622:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44178,
                  "mutability": "mutable",
                  "name": "_optimisticSeconds",
                  "nodeType": "VariableDeclaration",
                  "scope": 44217,
                  "src": "3654:26:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44177,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3654:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3556:130:67"
            },
            "returnParameters": {
              "id": 44182,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3706:0:67"
            },
            "scope": 44615,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 44267,
            "nodeType": "FunctionDefinition",
            "src": "4542:722:67",
            "body": {
              "id": 44266,
              "nodeType": "Block",
              "src": "4658:606:67",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 44230,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 44228,
                          "name": "_oldRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44220,
                          "src": "4746:8:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 44229,
                          "name": "committedRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 43853,
                          "src": "4758:13:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "4746:25:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6e6f742063757272656e7420757064617465",
                        "id": 44231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4773:20:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_235ba1ee88c5f04f9c7219acae6b13ccc0885220e588a812ad0686cc8fa100e9",
                          "typeString": "literal_string \"not current update\""
                        },
                        "value": "not current update"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_235ba1ee88c5f04f9c7219acae6b13ccc0885220e588a812ad0686cc8fa100e9",
                          "typeString": "literal_string \"not current update\""
                        }
                      ],
                      "id": 44227,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4738:7:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 44232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4738:56:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44233,
                  "nodeType": "ExpressionStatement",
                  "src": "4738:56:67"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 44236,
                            "name": "_oldRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44220,
                            "src": "4883:8:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 44237,
                            "name": "_newRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44222,
                            "src": "4893:8:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 44238,
                            "name": "_signature",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44224,
                            "src": "4903:10:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 44235,
                          "name": "_isUpdaterSignature",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 43989,
                          "src": "4863:19:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,bytes32,bytes memory) view returns (bool)"
                          }
                        },
                        "id": 44239,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4863:51:67",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "217570646174657220736967",
                        "id": 44240,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4928:14:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4e7e168bab312464134fb925b8ced66606c725ce7a1f4fc8bf3ba8ee2869cb5a",
                          "typeString": "literal_string \"!updater sig\""
                        },
                        "value": "!updater sig"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4e7e168bab312464134fb925b8ced66606c725ce7a1f4fc8bf3ba8ee2869cb5a",
                          "typeString": "literal_string \"!updater sig\""
                        }
                      ],
                      "id": 44234,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4842:7:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 44241,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4842:110:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44242,
                  "nodeType": "ExpressionStatement",
                  "src": "4842:110:67"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 44243,
                      "name": "_beforeUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44614,
                      "src": "4993:13:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 44244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4993:15:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44245,
                  "nodeType": "ExpressionStatement",
                  "src": "4993:15:67"
                },
                {
                  "expression": {
                    "id": 44253,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 44246,
                        "name": "confirmAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44129,
                        "src": "5067:9:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                          "typeString": "mapping(bytes32 => uint256)"
                        }
                      },
                      "id": 44248,
                      "indexExpression": {
                        "id": 44247,
                        "name": "_newRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44222,
                        "src": "5077:8:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5067:19:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 44252,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 44249,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "5089:5:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 44250,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "5089:15:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "id": 44251,
                        "name": "optimisticSeconds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44123,
                        "src": "5107:17:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5089:35:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5067:57:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 44254,
                  "nodeType": "ExpressionStatement",
                  "src": "5067:57:67"
                },
                {
                  "expression": {
                    "id": 44257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 44255,
                      "name": "committedRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43853,
                      "src": "5166:13:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 44256,
                      "name": "_newRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44222,
                      "src": "5182:8:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "5166:24:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 44258,
                  "nodeType": "ExpressionStatement",
                  "src": "5166:24:67"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 44260,
                        "name": "remoteDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44121,
                        "src": "5212:12:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 44261,
                        "name": "_oldRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44220,
                        "src": "5226:8:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 44262,
                        "name": "_newRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44222,
                        "src": "5236:8:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 44263,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44224,
                        "src": "5246:10:67",
                        "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": 44259,
                      "name": "Update",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43868,
                      "src": "5205:6:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint32,bytes32,bytes32,bytes memory)"
                      }
                    },
                    "id": 44264,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5205:52:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44265,
                  "nodeType": "EmitStatement",
                  "src": "5200:57:67"
                }
              ]
            },
            "documentation": {
              "id": 44218,
              "nodeType": "StructuredDocumentation",
              "src": "4113:424:67",
              "text": " @notice Called by external agent. Submits the signed update's new root,\n marks root's allowable confirmation time, and emits an `Update` event.\n @dev Reverts if update doesn't build off latest committedRoot\n or if signature is invalid.\n @param _oldRoot Old merkle root\n @param _newRoot New merkle root\n @param _signature Updater's signature on `_oldRoot` and `_newRoot`"
            },
            "functionSelector": "b31c01fb",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "update",
            "parameters": {
              "id": 44225,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44220,
                  "mutability": "mutable",
                  "name": "_oldRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 44267,
                  "src": "4567:16:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 44219,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4567:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44222,
                  "mutability": "mutable",
                  "name": "_newRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 44267,
                  "src": "4593:16:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 44221,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4593:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44224,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 44267,
                  "src": "4619:23:67",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 44223,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4619:5:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4557:91:67"
            },
            "returnParameters": {
              "id": 44226,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4658:0:67"
            },
            "scope": 44615,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 44305,
            "nodeType": "FunctionDefinition",
            "src": "5844:374:67",
            "body": {
              "id": 44304,
              "nodeType": "Block",
              "src": "5976:242:67",
              "statements": [
                {
                  "assignments": [
                    44280
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 44280,
                      "mutability": "mutable",
                      "name": "_messageHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 44304,
                      "src": "5986:20:67",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 44279,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "5986:7:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 44284,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 44282,
                        "name": "_message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44270,
                        "src": "6019:8:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 44281,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "6009:9:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 44283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6009:19:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5986:42:67"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 44296,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 44287,
                                "name": "messages",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 44133,
                                "src": "6074:8:67",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                                  "typeString": "mapping(bytes32 => bytes32)"
                                }
                              },
                              "id": 44289,
                              "indexExpression": {
                                "id": 44288,
                                "name": "_messageHash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 44280,
                                "src": "6083:12:67",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6074:22:67",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 44286,
                            "name": "acceptableRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44508,
                            "src": "6059:14:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (bytes32) view returns (bool)"
                            }
                          },
                          "id": 44290,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6059:38:67",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 44292,
                              "name": "_messageHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44280,
                              "src": "6123:12:67",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 44293,
                              "name": "_proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44274,
                              "src": "6137:6:67",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$32_calldata_ptr",
                                "typeString": "bytes32[32] calldata"
                              }
                            },
                            {
                              "id": 44294,
                              "name": "_index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44276,
                              "src": "6145:6:67",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$32_calldata_ptr",
                                "typeString": "bytes32[32] calldata"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 44291,
                            "name": "prove",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44556,
                            "src": "6117:5:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_array$_t_bytes32_$32_calldata_ptr_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes32,bytes32[32] calldata,uint256) returns (bool)"
                            }
                          },
                          "id": 44295,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6117:35:67",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "6059:93:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "2170726f7665",
                        "id": 44297,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6166:8:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_756bd5c549d133a643e5d24c9b1373431d553508e5dcef74e87a0342cc836818",
                          "typeString": "literal_string \"!prove\""
                        },
                        "value": "!prove"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_756bd5c549d133a643e5d24c9b1373431d553508e5dcef74e87a0342cc836818",
                          "typeString": "literal_string \"!prove\""
                        }
                      ],
                      "id": 44285,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6038:7:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 44298,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6038:146:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44299,
                  "nodeType": "ExpressionStatement",
                  "src": "6038:146:67"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 44301,
                        "name": "_message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44270,
                        "src": "6202:8:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 44300,
                      "name": "process",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44396,
                      "src": "6194:7:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes memory) returns (bool)"
                      }
                    },
                    "id": 44302,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6194:17:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 44303,
                  "nodeType": "ExpressionStatement",
                  "src": "6194:17:67"
                }
              ]
            },
            "documentation": {
              "id": 44268,
              "nodeType": "StructuredDocumentation",
              "src": "5270:569:67",
              "text": " @notice If necessary, attempts to prove the validity of provided\n         `_message`. If the message is successfully proven, then tries to\n         process the message\n @dev Reverts if `prove` call returns false\n @param _message A Nomad message coming from another chain :)\n @param _proof Merkle proof of inclusion for message's leaf (optional if\n        the message has already been proven).\n @param _index Index of leaf in home's merkle tree (optional if the\n        message has already been proven)."
            },
            "functionSelector": "6188af0e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "proveAndProcess",
            "parameters": {
              "id": 44277,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44270,
                  "mutability": "mutable",
                  "name": "_message",
                  "nodeType": "VariableDeclaration",
                  "scope": 44305,
                  "src": "5878:21:67",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 44269,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5878:5:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44274,
                  "mutability": "mutable",
                  "name": "_proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 44305,
                  "src": "5909:27:67",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$32_calldata_ptr",
                    "typeString": "bytes32[32]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 44271,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "5909:7:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 44273,
                    "length": {
                      "hexValue": "3332",
                      "id": 44272,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5917:2:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5909:11:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$32_storage_ptr",
                      "typeString": "bytes32[32]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44276,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 44305,
                  "src": "5946:14:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44275,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5946:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5868:98:67"
            },
            "returnParameters": {
              "id": 44278,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5976:0:67"
            },
            "scope": 44615,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 44396,
            "nodeType": "FunctionDefinition",
            "src": "6730:975:67",
            "body": {
              "id": 44395,
              "nodeType": "Block",
              "src": "6801:904:67",
              "statements": [
                {
                  "assignments": [
                    44314
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 44314,
                      "mutability": "mutable",
                      "name": "_m",
                      "nodeType": "VariableDeclaration",
                      "scope": 44395,
                      "src": "6863:10:67",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "typeName": {
                        "id": 44313,
                        "name": "bytes29",
                        "nodeType": "ElementaryTypeName",
                        "src": "6863:7:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 44319,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "30",
                        "id": 44317,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6889:1:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "expression": {
                        "id": 44315,
                        "name": "_message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44308,
                        "src": "6876:8:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 44316,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "ref",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28766,
                      "src": "6876:12:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint40) pure returns (bytes29)"
                      }
                    },
                    "id": 44318,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6876:15:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6863:28:67"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 44325,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 44321,
                              "name": "_m",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44314,
                              "src": "6909:2:67",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            "id": 44322,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "destination",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 45747,
                            "src": "6909:14:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$",
                              "typeString": "function (bytes29) pure returns (uint32)"
                            }
                          },
                          "id": 44323,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6909:16:67",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 44324,
                          "name": "localDomain",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 43847,
                          "src": "6929:11:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "src": "6909:31:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "2164657374696e6174696f6e",
                        "id": 44326,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6942:14:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77",
                          "typeString": "literal_string \"!destination\""
                        },
                        "value": "!destination"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77",
                          "typeString": "literal_string \"!destination\""
                        }
                      ],
                      "id": 44320,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6901:7:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 44327,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6901:56:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44328,
                  "nodeType": "ExpressionStatement",
                  "src": "6901:56:67"
                },
                {
                  "assignments": [
                    44330
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 44330,
                      "mutability": "mutable",
                      "name": "_messageHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 44395,
                      "src": "7009:20:67",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 44329,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7009:7:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 44334,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 44331,
                        "name": "_m",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44314,
                        "src": "7032:2:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 44332,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "keccak",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29220,
                      "src": "7032:9:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29) pure returns (bytes32)"
                      }
                    },
                    "id": 44333,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7032:11:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7009:34:67"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "baseExpression": {
                              "id": 44337,
                              "name": "messages",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44133,
                              "src": "7076:8:67",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                                "typeString": "mapping(bytes32 => bytes32)"
                              }
                            },
                            "id": 44339,
                            "indexExpression": {
                              "id": 44338,
                              "name": "_messageHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44330,
                              "src": "7085:12:67",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7076:22:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 44336,
                          "name": "acceptableRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44508,
                          "src": "7061:14:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (bytes32) view returns (bool)"
                          }
                        },
                        "id": 44340,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7061:38:67",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "2170726f76656e",
                        "id": 44341,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7101:9:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab",
                          "typeString": "literal_string \"!proven\""
                        },
                        "value": "!proven"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab",
                          "typeString": "literal_string \"!proven\""
                        }
                      ],
                      "id": 44335,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7053:7:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 44342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7053:58:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44343,
                  "nodeType": "ExpressionStatement",
                  "src": "7053:58:67"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 44347,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 44345,
                          "name": "entered",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44125,
                          "src": "7164:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 44346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7175:1:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "7164:12:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "217265656e7472616e74",
                        "id": 44348,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7178:12:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9e958fe74d893e1217e2d07629ceead87e80598864f275cf1f944c1637267f25",
                          "typeString": "literal_string \"!reentrant\""
                        },
                        "value": "!reentrant"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9e958fe74d893e1217e2d07629ceead87e80598864f275cf1f944c1637267f25",
                          "typeString": "literal_string \"!reentrant\""
                        }
                      ],
                      "id": 44344,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7156:7:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 44349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7156:35:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44350,
                  "nodeType": "ExpressionStatement",
                  "src": "7156:35:67"
                },
                {
                  "expression": {
                    "id": 44353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 44351,
                      "name": "entered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44125,
                      "src": "7201:7:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 44352,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7211:1:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7201:11:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 44354,
                  "nodeType": "ExpressionStatement",
                  "src": "7201:11:67"
                },
                {
                  "expression": {
                    "id": 44359,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 44355,
                        "name": "messages",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44133,
                        "src": "7268:8:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                          "typeString": "mapping(bytes32 => bytes32)"
                        }
                      },
                      "id": 44357,
                      "indexExpression": {
                        "id": 44356,
                        "name": "_messageHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44330,
                        "src": "7277:12:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7268:22:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 44358,
                      "name": "LEGACY_STATUS_PROCESSED",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44119,
                      "src": "7293:23:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "7268:48:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 44360,
                  "nodeType": "ExpressionStatement",
                  "src": "7268:48:67"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 44367,
                            "name": "_m",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44314,
                            "src": "7419:2:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          },
                          "id": 44368,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "origin",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 45696,
                          "src": "7419:9:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$",
                            "typeString": "function (bytes29) pure returns (uint32)"
                          }
                        },
                        "id": 44369,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7419:11:67",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 44370,
                            "name": "_m",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44314,
                            "src": "7444:2:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          },
                          "id": 44371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "nonce",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 45729,
                          "src": "7444:8:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$",
                            "typeString": "function (bytes29) pure returns (uint32)"
                          }
                        },
                        "id": 44372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7444:10:67",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 44373,
                            "name": "_m",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44314,
                            "src": "7468:2:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          },
                          "id": 44374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 45711,
                          "src": "7468:9:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$",
                            "typeString": "function (bytes29) pure returns (bytes32)"
                          }
                        },
                        "id": 44375,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7468:11:67",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 44376,
                                "name": "_m",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 44314,
                                "src": "7493:2:67",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                }
                              },
                              "id": 44377,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "body",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 45798,
                              "src": "7493:7:67",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes29_$bound_to$_t_bytes29_$",
                                "typeString": "function (bytes29) pure returns (bytes29)"
                              }
                            },
                            "id": 44378,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7493:9:67",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          },
                          "id": 44379,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "clone",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 29466,
                          "src": "7493:15:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes29_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes29_$",
                            "typeString": "function (bytes29) view returns (bytes memory)"
                          }
                        },
                        "id": 44380,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7493:17:67",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 44362,
                                "name": "_m",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 44314,
                                "src": "7376:2:67",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                }
                              },
                              "id": 44363,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "recipientAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 45778,
                              "src": "7376:19:67",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_address_$bound_to$_t_bytes29_$",
                                "typeString": "function (bytes29) pure returns (address)"
                              }
                            },
                            "id": 44364,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7376:21:67",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 44361,
                          "name": "IMessageRecipient",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45034,
                          "src": "7358:17:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IMessageRecipient_$45034_$",
                            "typeString": "type(contract IMessageRecipient)"
                          }
                        },
                        "id": 44365,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7358:40:67",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMessageRecipient_$45034",
                          "typeString": "contract IMessageRecipient"
                        }
                      },
                      "id": 44366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "handle",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 45033,
                      "src": "7358:47:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_uint32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint32,uint32,bytes32,bytes memory) external"
                      }
                    },
                    "id": 44381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7358:162:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44382,
                  "nodeType": "ExpressionStatement",
                  "src": "7358:162:67"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 44384,
                        "name": "_messageHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44330,
                        "src": "7575:12:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "hexValue": "74727565",
                        "id": 44385,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7589:4:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "",
                        "id": 44386,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7595:2:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "id": 44383,
                      "name": "Process",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44146,
                      "src": "7567:7:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bool_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,bool,bytes memory)"
                      }
                    },
                    "id": 44387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7567:31:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44388,
                  "nodeType": "EmitStatement",
                  "src": "7562:36:67"
                },
                {
                  "expression": {
                    "id": 44391,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 44389,
                      "name": "entered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44125,
                      "src": "7643:7:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "31",
                      "id": 44390,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7653:1:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "7643:11:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 44392,
                  "nodeType": "ExpressionStatement",
                  "src": "7643:11:67"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 44393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7694:4:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 44312,
                  "id": 44394,
                  "nodeType": "Return",
                  "src": "7687:11:67"
                }
              ]
            },
            "documentation": {
              "id": 44306,
              "nodeType": "StructuredDocumentation",
              "src": "6224:501:67",
              "text": " @notice Given formatted message, attempts to dispatch\n message payload to end recipient.\n @dev Recipient must implement a `handle` method (refer to IMessageRecipient.sol)\n Reverts if formatted message's destination domain is not the Replica's domain,\n if message has not been proven,\n or if not enough gas is provided for the dispatch transaction.\n @param _message Formatted message\n @return _success TRUE iff dispatch transaction succeeded"
            },
            "functionSelector": "928bc4b2",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "process",
            "parameters": {
              "id": 44309,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44308,
                  "mutability": "mutable",
                  "name": "_message",
                  "nodeType": "VariableDeclaration",
                  "scope": 44396,
                  "src": "6747:21:67",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 44307,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6747:5:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6746:23:67"
            },
            "returnParameters": {
              "id": 44312,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44311,
                  "mutability": "mutable",
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 44396,
                  "src": "6786:13:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 44310,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6786:4:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6785:15:67"
            },
            "scope": 44615,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 44409,
            "nodeType": "FunctionDefinition",
            "src": "7956:155:67",
            "body": {
              "id": 44408,
              "nodeType": "Block",
              "src": "8053:58:67",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 44405,
                        "name": "_optimisticSeconds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44399,
                        "src": "8085:18:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 44404,
                      "name": "_setOptimisticTimeout",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44609,
                      "src": "8063:21:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 44406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8063:41:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44407,
                  "nodeType": "ExpressionStatement",
                  "src": "8063:41:67"
                }
              ]
            },
            "documentation": {
              "id": 44397,
              "nodeType": "StructuredDocumentation",
              "src": "7770:181:67",
              "text": " @notice Set optimistic timeout period for new roots\n @dev Only callable by owner (Governance)\n @param _optimisticSeconds New optimistic timeout period"
            },
            "functionSelector": "885b5e2d",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 44402,
                "modifierName": {
                  "id": 44401,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "8039:9:67",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8039:9:67"
              }
            ],
            "name": "setOptimisticTimeout",
            "parameters": {
              "id": 44400,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44399,
                  "mutability": "mutable",
                  "name": "_optimisticSeconds",
                  "nodeType": "VariableDeclaration",
                  "scope": 44409,
                  "src": "7986:26:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44398,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7986:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7985:28:67"
            },
            "returnParameters": {
              "id": 44403,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8053:0:67"
            },
            "scope": 44615,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 44422,
            "nodeType": "FunctionDefinition",
            "src": "8343:95:67",
            "body": {
              "id": 44421,
              "nodeType": "Block",
              "src": "8400:38:67",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 44418,
                        "name": "_updater",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44412,
                        "src": "8422:8:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 44417,
                      "name": "_setUpdater",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43948,
                      "src": "8410:11:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 44419,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8410:21:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44420,
                  "nodeType": "ExpressionStatement",
                  "src": "8410:21:67"
                }
              ]
            },
            "documentation": {
              "id": 44410,
              "nodeType": "StructuredDocumentation",
              "src": "8117:221:67",
              "text": " @notice Set Updater role\n @dev MUST ensure that all roots signed by previous Updater have\n been relayed before calling. Only callable by owner (Governance)\n @param _updater New Updater"
            },
            "functionSelector": "9d54f419",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 44415,
                "modifierName": {
                  "id": 44414,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "8390:9:67",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8390:9:67"
              }
            ],
            "name": "setUpdater",
            "parameters": {
              "id": 44413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44412,
                  "mutability": "mutable",
                  "name": "_updater",
                  "nodeType": "VariableDeclaration",
                  "scope": 44422,
                  "src": "8363:16:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 44411,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8363:7:67",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8362:18:67"
            },
            "returnParameters": {
              "id": 44416,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8400:0:67"
            },
            "scope": 44615,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 44465,
            "nodeType": "FunctionDefinition",
            "src": "8789:349:67",
            "body": {
              "id": 44464,
              "nodeType": "Block",
              "src": "8888:250:67",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 44442,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 44438,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 44433,
                            "name": "_root",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44425,
                            "src": "8906:5:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 44436,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8923:1:67",
                                "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": 44435,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8915:7:67",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 44434,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "8915:7:67",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 44437,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8915:10:67",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "8906:19:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 44441,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 44439,
                            "name": "_confirmAt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44427,
                            "src": "8929:10:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 44440,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8943:1:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8929:15:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "8906:38:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "63616e277420736574207a65726f20726f6f74",
                        "id": 44443,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8946:21:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_59925984e9af0eda6915756e46f93548db8a4d846b3dfaa1ff2f97982e66d273",
                          "typeString": "literal_string \"can't set zero root\""
                        },
                        "value": "can't set zero root"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_59925984e9af0eda6915756e46f93548db8a4d846b3dfaa1ff2f97982e66d273",
                          "typeString": "literal_string \"can't set zero root\""
                        }
                      ],
                      "id": 44432,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8898:7:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 44444,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8898:70:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44445,
                  "nodeType": "ExpressionStatement",
                  "src": "8898:70:67"
                },
                {
                  "assignments": [
                    44447
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 44447,
                      "mutability": "mutable",
                      "name": "_previousConfirmAt",
                      "nodeType": "VariableDeclaration",
                      "scope": 44464,
                      "src": "8978:26:67",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 44446,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8978:7:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 44451,
                  "initialValue": {
                    "baseExpression": {
                      "id": 44448,
                      "name": "confirmAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44129,
                      "src": "9007:9:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                        "typeString": "mapping(bytes32 => uint256)"
                      }
                    },
                    "id": 44450,
                    "indexExpression": {
                      "id": 44449,
                      "name": "_root",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44425,
                      "src": "9017:5:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9007:16:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8978:45:67"
                },
                {
                  "expression": {
                    "id": 44456,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 44452,
                        "name": "confirmAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44129,
                        "src": "9033:9:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                          "typeString": "mapping(bytes32 => uint256)"
                        }
                      },
                      "id": 44454,
                      "indexExpression": {
                        "id": 44453,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44425,
                        "src": "9043:5:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9033:16:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 44455,
                      "name": "_confirmAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44427,
                      "src": "9052:10:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9033:29:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 44457,
                  "nodeType": "ExpressionStatement",
                  "src": "9033:29:67"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 44459,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44425,
                        "src": "9093:5:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 44460,
                        "name": "_previousConfirmAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44447,
                        "src": "9100:18:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 44461,
                        "name": "_confirmAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44427,
                        "src": "9120:10:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 44458,
                      "name": "SetConfirmation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44160,
                      "src": "9077:15:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,uint256,uint256)"
                      }
                    },
                    "id": 44462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9077:54:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44463,
                  "nodeType": "EmitStatement",
                  "src": "9072:59:67"
                }
              ]
            },
            "documentation": {
              "id": 44423,
              "nodeType": "StructuredDocumentation",
              "src": "8444:340:67",
              "text": " @notice Set confirmAt for a given root\n @dev To be used if in the case that fraud is proven\n and roots need to be deleted / added. Only callable by owner (Governance)\n @param _root The root for which to modify confirm time\n @param _confirmAt The new confirmation time. Set to 0 to \"delete\" a root."
            },
            "functionSelector": "088b5ed3",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 44430,
                "modifierName": {
                  "id": 44429,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "8874:9:67",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8874:9:67"
              }
            ],
            "name": "setConfirmation",
            "parameters": {
              "id": 44428,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44425,
                  "mutability": "mutable",
                  "name": "_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 44465,
                  "src": "8814:13:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 44424,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8814:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44427,
                  "mutability": "mutable",
                  "name": "_confirmAt",
                  "nodeType": "VariableDeclaration",
                  "scope": 44465,
                  "src": "8829:18:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44426,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8829:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8813:35:67"
            },
            "returnParameters": {
              "id": 44431,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8888:0:67"
            },
            "scope": 44615,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 44508,
            "nodeType": "FunctionDefinition",
            "src": "9505:486:67",
            "body": {
              "id": 44507,
              "nodeType": "Block",
              "src": "9571:420:67",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 44475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 44473,
                      "name": "_root",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44468,
                      "src": "9693:5:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 44474,
                      "name": "LEGACY_STATUS_PROVEN",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44110,
                      "src": "9702:20:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "9693:29:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 44478,
                  "nodeType": "IfStatement",
                  "src": "9689:46:67",
                  "trueBody": {
                    "expression": {
                      "hexValue": "74727565",
                      "id": 44476,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9731:4:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "functionReturnParameters": 44472,
                    "id": 44477,
                    "nodeType": "Return",
                    "src": "9724:11:67"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 44485,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 44481,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 44479,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44468,
                        "src": "9749:5:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 44480,
                        "name": "LEGACY_STATUS_PROCESSED",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44119,
                        "src": "9758:23:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "9749:32:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 44484,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 44482,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44468,
                        "src": "9785:5:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 44483,
                        "name": "LEGACY_STATUS_NONE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44101,
                        "src": "9794:18:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "9785:27:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "9749:63:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 44488,
                  "nodeType": "IfStatement",
                  "src": "9745:93:67",
                  "trueBody": {
                    "expression": {
                      "hexValue": "66616c7365",
                      "id": 44486,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9833:5:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "functionReturnParameters": 44472,
                    "id": 44487,
                    "nodeType": "Return",
                    "src": "9826:12:67"
                  }
                },
                {
                  "assignments": [
                    44490
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 44490,
                      "mutability": "mutable",
                      "name": "_time",
                      "nodeType": "VariableDeclaration",
                      "scope": 44507,
                      "src": "9849:13:67",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 44489,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9849:7:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 44494,
                  "initialValue": {
                    "baseExpression": {
                      "id": 44491,
                      "name": "confirmAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44129,
                      "src": "9865:9:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                        "typeString": "mapping(bytes32 => uint256)"
                      }
                    },
                    "id": 44493,
                    "indexExpression": {
                      "id": 44492,
                      "name": "_root",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44468,
                      "src": "9875:5:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9865:16:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9849:32:67"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 44497,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 44495,
                      "name": "_time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44490,
                      "src": "9895:5:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 44496,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9904:1:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9895:10:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 44501,
                  "nodeType": "IfStatement",
                  "src": "9891:53:67",
                  "trueBody": {
                    "id": 44500,
                    "nodeType": "Block",
                    "src": "9907:37:67",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 44498,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9928:5:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 44472,
                        "id": 44499,
                        "nodeType": "Return",
                        "src": "9921:12:67"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 44505,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 44502,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "9960:5:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 44503,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "9960:15:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "id": 44504,
                      "name": "_time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44490,
                      "src": "9979:5:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9960:24:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 44472,
                  "id": 44506,
                  "nodeType": "Return",
                  "src": "9953:31:67"
                }
              ]
            },
            "documentation": {
              "id": 44466,
              "nodeType": "StructuredDocumentation",
              "src": "9195:305:67",
              "text": " @notice Check that the root has been submitted\n and that the optimistic timeout period has expired,\n meaning the root can be processed\n @param _root the Merkle root, submitted in an update, to check\n @return TRUE iff root has been submitted & timeout has expired"
            },
            "functionSelector": "a3f81d68",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "acceptableRoot",
            "parameters": {
              "id": 44469,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44468,
                  "mutability": "mutable",
                  "name": "_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 44508,
                  "src": "9529:13:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 44467,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9529:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9528:15:67"
            },
            "returnParameters": {
              "id": 44472,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44471,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 44508,
                  "src": "9565:4:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 44470,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9565:4:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9564:6:67"
            },
            "scope": 44615,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 44556,
            "nodeType": "FunctionDefinition",
            "src": "10657:711:67",
            "body": {
              "id": 44555,
              "nodeType": "Block",
              "src": "10784:584:67",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 44527,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 44523,
                            "name": "messages",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44133,
                            "src": "10931:8:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                              "typeString": "mapping(bytes32 => bytes32)"
                            }
                          },
                          "id": 44525,
                          "indexExpression": {
                            "id": 44524,
                            "name": "_leaf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44511,
                            "src": "10940:5:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "10931:15:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 44526,
                          "name": "LEGACY_STATUS_PROCESSED",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44119,
                          "src": "10950:23:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "10931:42:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "616c72656164792070726f636573736564",
                        "id": 44528,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10987:19:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9f000d2f369c0e67e913dccd6e6f22a8fe8dea3256294790b47bccd3c69f20bf",
                          "typeString": "literal_string \"already processed\""
                        },
                        "value": "already processed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9f000d2f369c0e67e913dccd6e6f22a8fe8dea3256294790b47bccd3c69f20bf",
                          "typeString": "literal_string \"already processed\""
                        }
                      ],
                      "id": 44522,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10910:7:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 44529,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10910:106:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44530,
                  "nodeType": "ExpressionStatement",
                  "src": "10910:106:67"
                },
                {
                  "assignments": [
                    44532
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 44532,
                      "mutability": "mutable",
                      "name": "_calculatedRoot",
                      "nodeType": "VariableDeclaration",
                      "scope": 44555,
                      "src": "11084:23:67",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 44531,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11084:7:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 44539,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 44535,
                        "name": "_leaf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44511,
                        "src": "11131:5:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 44536,
                        "name": "_proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44515,
                        "src": "11138:6:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$32_calldata_ptr",
                          "typeString": "bytes32[32] calldata"
                        }
                      },
                      {
                        "id": 44537,
                        "name": "_index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44517,
                        "src": "11146:6:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$32_calldata_ptr",
                          "typeString": "bytes32[32] calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 44533,
                        "name": "MerkleLib",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45604,
                        "src": "11110:9:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MerkleLib_$45604_$",
                          "typeString": "type(library MerkleLib)"
                        }
                      },
                      "id": 44534,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "branchRoot",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 45507,
                      "src": "11110:20:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_array$_t_bytes32_$32_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                        "typeString": "function (bytes32,bytes32[32] memory,uint256) pure returns (bytes32)"
                      }
                    },
                    "id": 44538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11110:43:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11084:69:67"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 44541,
                        "name": "_calculatedRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44532,
                        "src": "11239:15:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 44540,
                      "name": "acceptableRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44508,
                      "src": "11224:14:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                        "typeString": "function (bytes32) view returns (bool)"
                      }
                    },
                    "id": 44542,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11224:31:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 44552,
                  "nodeType": "IfStatement",
                  "src": "11220:120:67",
                  "trueBody": {
                    "id": 44551,
                    "nodeType": "Block",
                    "src": "11257:83:67",
                    "statements": [
                      {
                        "expression": {
                          "id": 44547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 44543,
                              "name": "messages",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44133,
                              "src": "11271:8:67",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                                "typeString": "mapping(bytes32 => bytes32)"
                              }
                            },
                            "id": 44545,
                            "indexExpression": {
                              "id": 44544,
                              "name": "_leaf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44511,
                              "src": "11280:5:67",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "11271:15:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 44546,
                            "name": "_calculatedRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44532,
                            "src": "11289:15:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "11271:33:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 44548,
                        "nodeType": "ExpressionStatement",
                        "src": "11271:33:67"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 44549,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11325:4:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 44521,
                        "id": 44550,
                        "nodeType": "Return",
                        "src": "11318:11:67"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 44553,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11356:5:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 44521,
                  "id": 44554,
                  "nodeType": "Return",
                  "src": "11349:12:67"
                }
              ]
            },
            "documentation": {
              "id": 44509,
              "nodeType": "StructuredDocumentation",
              "src": "9997:655:67",
              "text": " @notice Attempts to prove the validity of message given its leaf, the\n merkle proof of inclusion for the leaf, and the index of the leaf.\n @dev Reverts if message's MessageStatus != None (i.e. if message was\n already proven or processed)\n @dev For convenience, we allow proving against any previous root.\n This means that witnesses never need to be updated for the new root\n @param _leaf Leaf of message to prove\n @param _proof Merkle proof of inclusion for leaf\n @param _index Index of leaf in home's merkle tree\n @return Returns true if proof was valid and `prove` call succeeded*"
            },
            "functionSelector": "371d3071",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "prove",
            "parameters": {
              "id": 44518,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44511,
                  "mutability": "mutable",
                  "name": "_leaf",
                  "nodeType": "VariableDeclaration",
                  "scope": 44556,
                  "src": "10681:13:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 44510,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10681:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44515,
                  "mutability": "mutable",
                  "name": "_proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 44556,
                  "src": "10704:27:67",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$32_calldata_ptr",
                    "typeString": "bytes32[32]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 44512,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "10704:7:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 44514,
                    "length": {
                      "hexValue": "3332",
                      "id": 44513,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10712:2:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "10704:11:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$32_storage_ptr",
                      "typeString": "bytes32[32]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44517,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 44556,
                  "src": "10741:14:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44516,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10741:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10671:90:67"
            },
            "returnParameters": {
              "id": 44521,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44520,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 44556,
                  "src": "10778:4:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 44519,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10778:4:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10777:6:67"
            },
            "scope": 44615,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 44568,
            "nodeType": "FunctionDefinition",
            "src": "11451:118:67",
            "body": {
              "id": 44567,
              "nodeType": "Block",
              "src": "11516:53:67",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 44564,
                        "name": "remoteDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44121,
                        "src": "11549:12:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 44563,
                      "name": "_homeDomainHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43928,
                      "src": "11533:15:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint32_$returns$_t_bytes32_$",
                        "typeString": "function (uint32) pure returns (bytes32)"
                      }
                    },
                    "id": 44565,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11533:29:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 44562,
                  "id": 44566,
                  "nodeType": "Return",
                  "src": "11526:36:67"
                }
              ]
            },
            "baseFunctions": [
              43911
            ],
            "documentation": {
              "id": 44557,
              "nodeType": "StructuredDocumentation",
              "src": "11374:72:67",
              "text": " @notice Hash of Home domain concatenated with \"NOMAD\""
            },
            "functionSelector": "45630b1a",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "homeDomainHash",
            "overrides": {
              "id": 44559,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11489:8:67"
            },
            "parameters": {
              "id": 44558,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11474:2:67"
            },
            "returnParameters": {
              "id": 44562,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44561,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 44568,
                  "src": "11507:7:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 44560,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11507:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11506:9:67"
            },
            "scope": 44615,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 44609,
            "nodeType": "FunctionDefinition",
            "src": "11828:771:67",
            "body": {
              "id": 44608,
              "nodeType": "Block",
              "src": "11896:703:67",
              "statements": [
                {
                  "assignments": [
                    44575
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 44575,
                      "mutability": "mutable",
                      "name": "_current",
                      "nodeType": "VariableDeclaration",
                      "scope": 44608,
                      "src": "12091:16:67",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 44574,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12091:7:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 44577,
                  "initialValue": {
                    "id": 44576,
                    "name": "optimisticSeconds",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 44123,
                    "src": "12110:17:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12091:36:67"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 44584,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 44580,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 44578,
                        "name": "_current",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44575,
                        "src": "12141:8:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 44579,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12153:1:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "12141:13:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 44583,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 44581,
                        "name": "_current",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44575,
                        "src": "12158:8:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "31353030",
                        "id": 44582,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12169:4:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1500_by_1",
                          "typeString": "int_const 1500"
                        },
                        "value": "1500"
                      },
                      "src": "12158:15:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "12141:32:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 44592,
                  "nodeType": "IfStatement",
                  "src": "12137:115:67",
                  "trueBody": {
                    "expression": {
                      "arguments": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 44588,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 44586,
                            "name": "_optimisticSeconds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44571,
                            "src": "12195:18:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "hexValue": "31353030",
                            "id": 44587,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12217:4:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1500_by_1",
                              "typeString": "int_const 1500"
                            },
                            "value": "1500"
                          },
                          "src": "12195:26:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "hexValue": "6f7074696d69737469632074696d656f757420746f6f206c6f77",
                          "id": 44589,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12223:28:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_0ab7e10957b2606c21968c7f9b4f39787866a57640ddd7d320367ddfc69bfe05",
                            "typeString": "literal_string \"optimistic timeout too low\""
                          },
                          "value": "optimistic timeout too low"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_0ab7e10957b2606c21968c7f9b4f39787866a57640ddd7d320367ddfc69bfe05",
                            "typeString": "literal_string \"optimistic timeout too low\""
                          }
                        ],
                        "id": 44585,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          -18,
                          -18
                        ],
                        "referencedDeclaration": -18,
                        "src": "12187:7:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 44590,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12187:65:67",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 44591,
                    "nodeType": "ExpressionStatement",
                    "src": "12187:65:67"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 44596,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 44594,
                          "name": "_optimisticSeconds",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44571,
                          "src": "12390:18:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "hexValue": "3331353336303030",
                          "id": 44595,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12411:8:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_31536000_by_1",
                            "typeString": "int_const 31536000"
                          },
                          "value": "31536000"
                        },
                        "src": "12390:29:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6f7074696d69737469632074696d656f757420746f6f2068696768",
                        "id": 44597,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12421:29:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_404aafceebe73dacc8d2ece5ef0ef111bc195814eeeea087fdff2afda15ae4bd",
                          "typeString": "literal_string \"optimistic timeout too high\""
                        },
                        "value": "optimistic timeout too high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_404aafceebe73dacc8d2ece5ef0ef111bc195814eeeea087fdff2afda15ae4bd",
                          "typeString": "literal_string \"optimistic timeout too high\""
                        }
                      ],
                      "id": 44593,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12382:7:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 44598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12382:69:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44599,
                  "nodeType": "ExpressionStatement",
                  "src": "12382:69:67"
                },
                {
                  "expression": {
                    "id": 44602,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 44600,
                      "name": "optimisticSeconds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44123,
                      "src": "12499:17:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 44601,
                      "name": "_optimisticSeconds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44571,
                      "src": "12519:18:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12499:38:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 44603,
                  "nodeType": "ExpressionStatement",
                  "src": "12499:38:67"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 44605,
                        "name": "_optimisticSeconds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44571,
                        "src": "12573:18:67",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 44604,
                      "name": "SetOptimisticTimeout",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44151,
                      "src": "12552:20:67",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 44606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12552:40:67",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 44607,
                  "nodeType": "EmitStatement",
                  "src": "12547:45:67"
                }
              ]
            },
            "documentation": {
              "id": 44569,
              "nodeType": "StructuredDocumentation",
              "src": "11628:195:67",
              "text": " @notice Set optimistic timeout period for new roots\n @dev Called by owner (Governance) or at initialization\n @param _optimisticSeconds New optimistic timeout period"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setOptimisticTimeout",
            "parameters": {
              "id": 44572,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44571,
                  "mutability": "mutable",
                  "name": "_optimisticSeconds",
                  "nodeType": "VariableDeclaration",
                  "scope": 44609,
                  "src": "11859:26:67",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44570,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11859:7:67",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11858:28:67"
            },
            "returnParameters": {
              "id": 44573,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11896:0:67"
            },
            "scope": 44615,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 44614,
            "nodeType": "FunctionDefinition",
            "src": "12700:36:67",
            "body": {
              "id": 44613,
              "nodeType": "Block",
              "src": "12734:2:67",
              "statements": []
            },
            "documentation": {
              "id": 44610,
              "nodeType": "StructuredDocumentation",
              "src": "12605:41:67",
              "text": "@notice Hook for potential future use"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_beforeUpdate",
            "parameters": {
              "id": 44611,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12722:2:67"
            },
            "returnParameters": {
              "id": 44612,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12734:0:67"
            },
            "scope": 44615,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 44080,
              "name": "Version0",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 44622,
              "src": "653:8:67",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Version0_$44622",
                "typeString": "contract Version0"
              }
            },
            "id": 44081,
            "nodeType": "InheritanceSpecifier",
            "src": "653:8:67"
          },
          {
            "baseName": {
              "id": 44082,
              "name": "NomadBase",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 43998,
              "src": "663:9:67",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NomadBase_$43998",
                "typeString": "contract NomadBase"
              }
            },
            "id": 44083,
            "nodeType": "InheritanceSpecifier",
            "src": "663:9:67"
          }
        ],
        "contractDependencies": [
          23168,
          23676,
          25131,
          43998,
          44622
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 44079,
          "nodeType": "StructuredDocumentation",
          "src": "485:147:67",
          "text": " @title Replica\n @author Illusory Systems Inc.\n @notice Track root updates on Home,\n prove and dispatch messages to end recipients."
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          44615,
          43998,
          23168,
          25131,
          23676,
          44622
        ],
        "name": "Replica",
        "scope": 44616
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 67
}