UNPKG

@etherspot/contracts

Version:

Etherspot Solidity contracts

618 lines 51.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Replica__factory = void 0; const ethers_1 = require("ethers"); const _abi = [ { inputs: [ { internalType: "uint32", name: "_localDomain", type: "uint32", }, { internalType: "uint256", name: "_processGas", type: "uint256", }, { internalType: "uint256", name: "_reserveGas", type: "uint256", }, ], stateMutability: "nonpayable", type: "constructor", }, { anonymous: false, inputs: [ { indexed: false, internalType: "bytes32", name: "oldRoot", type: "bytes32", }, { indexed: false, internalType: "bytes32[2]", name: "newRoot", type: "bytes32[2]", }, { indexed: false, internalType: "bytes", name: "signature", type: "bytes", }, { indexed: false, internalType: "bytes", name: "signature2", type: "bytes", }, ], name: "DoubleUpdate", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint8", name: "version", type: "uint8", }, ], name: "Initialized", type: "event", }, { 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: "PROCESS_GAS", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "RESERVE_GAS", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], 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: [ { internalType: "bytes32", name: "_oldRoot", type: "bytes32", }, { internalType: "bytes32[2]", name: "_newRoot", type: "bytes32[2]", }, { internalType: "bytes", name: "_signature", type: "bytes", }, { internalType: "bytes", name: "_signature2", type: "bytes", }, ], name: "doubleUpdate", outputs: [], stateMutability: "nonpayable", 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: "enum Replica.MessageStatus", name: "", type: "uint8", }, ], 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", }, ]; const _bytecode = "0x60e06040523480156200001157600080fd5b50604051620045dd380380620045dd833981810160405281019062000037919062000178565b828063ffffffff1660808163ffffffff168152505050620cf85082101562000096576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200008d9062000235565b60405180910390fd5b613a98811015620000de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000d590620002a7565b60405180910390fd5b8160a081815250508060c08181525050505050620002c9565b600080fd5b600063ffffffff82169050919050565b6200011781620000fc565b81146200012357600080fd5b50565b60008151905062000137816200010c565b92915050565b6000819050919050565b62000152816200013d565b81146200015e57600080fd5b50565b600081519050620001728162000147565b92915050565b600080600060608486031215620001945762000193620000f7565b5b6000620001a48682870162000126565b9350506020620001b78682870162000161565b9250506040620001ca8682870162000161565b9150509250925092565b600082825260208201905092915050565b7f2170726f63657373206761730000000000000000000000000000000000000000600082015250565b60006200021d600c83620001d4565b91506200022a82620001e5565b602082019050919050565b6000602082019050818103600083015262000250816200020e565b9050919050565b7f2172657365727665206761730000000000000000000000000000000000000000600082015250565b60006200028f600c83620001d4565b91506200029c8262000257565b602082019050919050565b60006020820190508181036000830152620002c28162000280565b9050919050565b60805160a05160c0516142c862000315600039600081816107670152610cee015260008181610d0f01528181610d9901526111fb015260008181610ac40152610b2b01526142c86000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80638d3638f4116100de578063b31c01fb11610097578063df034cd011610071578063df034cd014610428578063e7e7a7b714610446578063f2fde38b14610462578063ffa1ad741461047e57610173565b8063b31c01fb146103d0578063c19d93fb146103ec578063d88beda21461040a57610173565b80638d3638f4146102fa5780638da5cb5b14610318578063928bc4b214610336578063961681dc146103665780639d54f41914610384578063a3f81d68146103a057610173565b806345630b1a1161013057806345630b1a1461024c5780636188af0e1461026a57806367a6771d14610286578063715018a6146102a457806371bfb7b8146102ae578063885b5e2d146102de57610173565b8063088b5ed31461017857806319d9d21a1461019457806325e3beda146101b05780632bbd59ca146101ce578063371d3071146101fe578063399926681461022e575b600080fd5b610192600480360381019061018d9190612859565b61049c565b005b6101ae60048036038101906101a99190612920565b610587565b005b6101b8610765565b6040516101c591906129d6565b60405180910390f35b6101e860048036038101906101e391906129f1565b610789565b6040516101f59190612a95565b60405180910390f35b61021860048036038101906102139190612ad1565b6107a9565b6040516102259190612b41565b60405180910390f35b6102366108d7565b60405161024391906129d6565b60405180910390f35b6102546108dd565b6040516102619190612b6b565b60405180910390f35b610284600480360381019061027f9190612cc7565b6108ff565b005b61028e61095f565b60405161029b9190612b6b565b60405180910390f35b6102ac610965565b005b6102c860048036038101906102c391906129f1565b6109ed565b6040516102d591906129d6565b60405180910390f35b6102f860048036038101906102f39190612d38565b610a05565b005b610302610ac2565b60405161030f9190612d84565b60405180910390f35b610320610ae6565b60405161032d9190612de0565b60405180910390f35b610350600480360381019061034b9190612dfb565b610b10565b60405161035d9190612b41565b60405180910390f35b61036e610f82565b60405161037b9190612d84565b60405180910390f35b61039e60048036038101906103999190612e70565b610f98565b005b6103ba60048036038101906103b591906129f1565b611020565b6040516103c79190612b41565b60405180910390f35b6103ea60048036038101906103e59190612e9d565b611058565b005b6103f46111e6565b6040516104019190612f54565b60405180910390f35b6104126111f9565b60405161041f91906129d6565b60405180910390f35b61043061121d565b60405161043d9190612de0565b60405180910390f35b610460600480360381019061045b9190612f9b565b611243565b005b61047c60048036038101906104779190612e70565b611377565b005b61048661146e565b604051610493919061301e565b60405180910390f35b6104a4611473565b73ffffffffffffffffffffffffffffffffffffffff166104c2610ae6565b73ffffffffffffffffffffffffffffffffffffffff1614610518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050f90613096565b60405180910390fd5b600060996000848152602001908152602001600020549050816099600085815260200190815260200160002081905550827fe906d465281862f8f37a1bdd7d810e50347f06b0b493701cca6ccb8e6a7b2694828460405161057a9291906130b6565b60405180910390a2505050565b60028081111561059a57610599612a1e565b5b606560149054906101000a900460ff1660028111156105bc576105bb612a1e565b5b036105fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f39061312b565b60405180910390fd5b61066386866000600281106106145761061361314b565b5b602002013586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061147b565b80156106d257506106d186866001600281106106825761068161314b565b5b602002013584848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061147b565b5b801561070e5750846001600281106106ed576106ec61314b565b5b6020020135856000600281106107065761070561314b565b5b602002013514155b1561075d5761071b611521565b7f2c3f60bab4170347826231b75a920b5053941ddebc6eed6fd2c25721648b186f868686868686604051610754969594939291906131c8565b60405180910390a15b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b609a6020528060005260406000206000915054906101000a900460ff1681565b60008060028111156107be576107bd612a1e565b5b609a600086815260200190815260200160002060009054906101000a900460ff1660028111156107f1576107f0612a1e565b5b14610831576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108289061326b565b60405180910390fd5b6000610874858560208060200260405190810160405280929190826020800280828437600081840152601f19601f8201169050808301925050505050508561152b565b905061087f81611020565b156108ca576001609a600087815260200190815260200160002060006101000a81548160ff021916908360028111156108bb576108ba612a1e565b5b021790555060019150506108d0565b60009150505b9392505050565b60975481565b60006108fa609660009054906101000a900463ffffffff166115e4565b905090565b610911838051906020012083836107a9565b610950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610947906132d7565b60405180910390fd5b61095983610b10565b50505050565b60665481565b61096d611473565b73ffffffffffffffffffffffffffffffffffffffff1661098b610ae6565b73ffffffffffffffffffffffffffffffffffffffff16146109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d890613096565b60405180910390fd5b6109eb6000611614565b565b60996020528060005260406000206000915090505481565b610a0d611473565b73ffffffffffffffffffffffffffffffffffffffff16610a2b610ae6565b73ffffffffffffffffffffffffffffffffffffffff1614610a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7890613096565b60405180910390fd5b806097819055507fa8de34d9c26dbb20579bc8c8957813e3168af7c5092d7668390e34471dc4ffb481604051610ab791906129d6565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080610b276000846116da90919063ffffffff16565b90507f000000000000000000000000000000000000000000000000000000000000000063ffffffff16610b5f8262ffffff1916611705565b63ffffffff1614610ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9c90613343565b60405180910390fd5b6000610bb68262ffffff191661172b565b905060016002811115610bcc57610bcb612a1e565b5b609a600083815260200190815260200160002060009054906101000a900460ff166002811115610bff57610bfe612a1e565b5b14610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c36906133af565b60405180910390fd5b6001609860009054906101000a900460ff1660ff1614610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b9061341b565b60405180910390fd5b6000609860006101000a81548160ff021916908360ff1602179055506002609a600083815260200190815260200160002060006101000a81548160ff02191690836002811115610ce757610ce6612a1e565b5b02179055507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610d38919061346a565b5a1015610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d719061350c565b60405180910390fd5b6000610d8b8362ffffff191661176e565b9050600080610100905060007f0000000000000000000000000000000000000000000000000000000000000000905060008267ffffffffffffffff811115610dd657610dd5612b9c565b5b6040519080825280601f01601f191660200182016040528015610e085781602001600182028036833780820191505090505b5090506000610e1c8862ffffff1916611788565b610e2b8962ffffff19166117ae565b610e3a8a62ffffff19166117d4565b610e57610e4c8c62ffffff19166117fa565b62ffffff1916611849565b604051602401610e6a94939291906135a3565b6040516020818303038152906040527fab2dc3f5000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008082516020840160008a88f198503d945083851115610f08578394505b848252846000602084013e81604051610f21919061362b565b6040518091039020891515887fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4860405160405180910390a46001609860006101000a81548160ff021916908360ff1602179055505050505050505050919050565b609660009054906101000a900463ffffffff1681565b610fa0611473565b73ffffffffffffffffffffffffffffffffffffffff16610fbe610ae6565b73ffffffffffffffffffffffffffffffffffffffff1614611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90613096565b60405180910390fd5b61101d81611890565b50565b600080609960008481526020019081526020016000205490506000810361104b576000915050611053565b804210159150505b919050565b60028081111561106b5761106a612a1e565b5b606560149054906101000a900460ff16600281111561108d5761108c612a1e565b5b036110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c49061312b565b60405180910390fd5b6066548314611111576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111089061368e565b60405180910390fd5b61111c83838361147b565b61115b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611152906136fa565b60405180910390fd5b611163611935565b60975442611171919061346a565b6099600084815260200190815260200160002081905550816066819055508183609660009054906101000a900463ffffffff1663ffffffff167f608828ad904a0c9250c09004ba7226efb08f35a5c815bb3f76b5a8a271cd08b2846040516111d9919061371a565b60405180910390a4505050565b606560149054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061124f6001611937565b90508015611273576001600060016101000a81548160ff0219169083151502179055505b61127c84611a27565b6001609860006101000a81548160ff021916908360ff16021790555084609660006101000a81548163ffffffff021916908363ffffffff1602179055508260668190555060016099600085815260200190815260200160002081905550816097819055507fa8de34d9c26dbb20579bc8c8957813e3168af7c5092d7668390e34471dc4ffb48260405161130f91906129d6565b60405180910390a180156113705760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516113679190613781565b60405180910390a15b5050505050565b61137f611473565b73ffffffffffffffffffffffffffffffffffffffff1661139d610ae6565b73ffffffffffffffffffffffffffffffffffffffff16146113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea90613096565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611462576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114599061380e565b60405180910390fd5b61146b81611614565b50565b600081565b600033905090565b6000806114866108dd565b858560405160200161149a9392919061384f565b6040516020818303038152906040528051906020012090506114bb81611af0565b9050606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115008285611b20565b73ffffffffffffffffffffffffffffffffffffffff16149150509392505050565b611529611b47565b565b600083905060005b60208110156115dc57600060018285901c169050600085836020811061155c5761155b61314b565b5b602002015190506001820361159b57808460405160200161157e92919061388c565b6040516020818303038152906040528051906020012093506115c7565b83816040516020016115ae92919061388c565b6040516020818303038152906040528051906020012093505b505080806115d4906138b8565b915050611533565b509392505050565b6000816040516020016115f7919061398d565b604051602081830303815290604052805190602001209050919050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808351905060006020850190506116fb8464ffffffffff168284611b74565b9250505092915050565b6000611724602860048462ffffff1916611bdb9092919063ffffffff16565b9050919050565b60008061173783611c12565b6bffffffffffffffffffffffff169050600061175284611c32565b6bffffffffffffffffffffffff16905080822092505050919050565b600061178161177c83611c52565b611c78565b9050919050565b60006117a7600060048462ffffff1916611bdb9092919063ffffffff16565b9050919050565b60006117cd602460048462ffffff1916611bdb9092919063ffffffff16565b9050919050565b60006117f3600460208462ffffff1916611c859092919063ffffffff16565b9050919050565b6000611842604c806118118562ffffff1916611c32565b6bffffffffffffffffffffffff1661182991906139b3565b60008562ffffff1916611dc9909392919063ffffffff16565b9050919050565b606060008061185784611c32565b6bffffffffffffffffffffffff169050604051915081925061187c8460208401611e60565b506020818301016040528082525050919050565b6000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0f20622a7af9e952a6fec654a196f29e04477b5d335772c26902bec35cc9f22a81836040516119299291906139e7565b60405180910390a15050565b565b60008060019054906101000a900460ff16156119ae5760018260ff16148015611966575061196430611f6b565b155b6119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c90613a82565b60405180910390fd5b60009050611a22565b8160ff1660008054906101000a900460ff1660ff1610611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90613a82565b60405180910390fd5b816000806101000a81548160ff021916908360ff160217905550600190505b919050565b6000611a336001611937565b90508015611a57576001600060016101000a81548160ff0219169083151502179055505b611a5f611f8e565b611a6882611890565b6001606560146101000a81548160ff02191690836002811115611a8e57611a8d612a1e565b5b02179055508015611aec5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611ae39190613781565b60405180910390a15b5050565b600081604051602001611b039190613aee565b604051602081830303815290604052805190602001209050919050565b6000806000611b2f8585611fe7565b91509150611b3c81612068565b819250505092915050565b6002606560146101000a81548160ff02191690836002811115611b6d57611b6c612a1e565b5b0217905550565b6000808284611b83919061346a565b9050604051811115611b9457600090505b60008103611bc5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050611bd4565b611bd0858585612234565b9150505b9392505050565b60006008826020611bec9190613b14565b611bf69190613b48565b60ff16611c04858585611c85565b60001c901c90509392505050565b6000806bffffffffffffffffffffffff9050808360781c16915050919050565b6000806bffffffffffffffffffffffff9050808360181c16915050919050565b6000611c71602c60208462ffffff1916611c859092919063ffffffff16565b9050919050565b60008160001c9050919050565b6000808260ff1603611c9c576000801b9050611dc2565b611ca584611c32565b6bffffffffffffffffffffffff168260ff1684611cc2919061346a565b1115611d3f57611d03611cd485611c12565b6bffffffffffffffffffffffff16611ceb86611c32565b6bffffffffffffffffffffffff16858560ff16612255565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d369190613bc7565b60405180910390fd5b60208260ff161115611d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7d90613c5b565b60405180910390fd5b60006008830290506000611d9986611c12565b6bffffffffffffffffffffffff1690506000611db4836122c3565b905080868301511693505050505b9392505050565b600080611dd586611c12565b6bffffffffffffffffffffffff169050611dee866122f2565b848683611dfb919061346a565b611e05919061346a565b1115611e34577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050611e58565b8481611e40919061346a565b9050611e548364ffffffffff168286611b74565b9150505b949350505050565b6000611e6b8361231c565b611eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea190613ced565b60405180910390fd5b611eb38361232f565b611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee990613d7f565b60405180910390fd5b6000611efd84611c32565b6bffffffffffffffffffffffff1690506000611f1885611c12565b6bffffffffffffffffffffffff1690506000604051905084811115611f3d5760206060fd5b8285848460045afa50611f60611f5287612371565b64ffffffffff168685612234565b935050505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490613e11565b60405180910390fd5b611fe561237e565b565b60008060418351036120285760008060006020860151925060408601519150606086015160001a905061201c878285856123df565b94509450505050612061565b604083510361205857600080602085015191506040850151905061204d8683836124eb565b935093505050612061565b60006002915091505b9250929050565b6000600481111561207c5761207b612a1e565b5b81600481111561208f5761208e612a1e565b5b031561223157600160048111156120a9576120a8612a1e565b5b8160048111156120bc576120bb612a1e565b5b036120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f390613e7d565b60405180910390fd5b600260048111156121105761210f612a1e565b5b81600481111561212357612122612a1e565b5b03612163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215a90613ee9565b60405180910390fd5b6003600481111561217757612176612a1e565b5b81600481111561218a57612189612a1e565b5b036121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c190613f7b565b60405180910390fd5b6004808111156121dd576121dc612a1e565b5b8160048111156121f0576121ef612a1e565b5b03612230576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122279061400d565b60405180910390fd5b5b50565b600083811760601b905082811760601b905081811760181b90509392505050565b606060006122628661254a565b91505060006122708661254a565b915050600061227e8661254a565b915050600061228c8661254a565b915050838383836040516020016122a694939291906141f1565b604051602081830303815290604052945050505050949350505050565b60007f8000000000000000000000000000000000000000000000000000000000000000600183031d9050919050565b60006122fd82611c32565b61230683611c12565b016bffffffffffffffffffffffff169050919050565b600061232782612608565b159050919050565b600064ffffffffff61234083612371565b64ffffffffff1603612355576000905061236c565b6000612360836122f2565b90506040518111199150505b919050565b60008160d81c9050919050565b600060019054906101000a900460ff166123cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c490613e11565b60405180910390fd5b6123dd6123d8611473565b611614565b565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561241a5760006003915091506124e2565b601b8560ff16141580156124325750601c8560ff1614155b156124445760006004915091506124e2565b6000600187878787604051600081526020016040526040516124699493929190614276565b6020604051602081039080840390855afa15801561248b573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124d9576000600192509250506124e2565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c61252e919061346a565b905061253c878288856123df565b935093505050935093915050565b6000806000601f90505b600f8160ff1611156125a757600060088261256f9190613b48565b60ff1685901c905061258081612640565b61ffff168417935060108260ff161461259b57601084901b93505b60018203915050612554565b506000600f90505b60ff8160ff1610156126025760006008826125ca9190613b48565b60ff1685901c90506125db81612640565b61ffff168317925060008260ff16146125f657601083901b92505b600182039150506125af565b50915091565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000062ffffff19168262ffffff1916149050919050565b600061265260048360ff16901c612679565b60ff168117905060088161ffff16901b905061266d82612679565b60ff1681179050919050565b60008060f08317905060f08160ff16036126975760309150506127d4565b60f18160ff16036126ac5760319150506127d4565b60f28160ff16036126c15760329150506127d4565b60f38160ff16036126d65760339150506127d4565b60f48160ff16036126eb5760349150506127d4565b60f58160ff16036127005760359150506127d4565b60f68160ff16036127155760369150506127d4565b60f78160ff160361272a5760379150506127d4565b60f88160ff160361273f5760389150506127d4565b60f98160ff16036127545760399150506127d4565b60fa8160ff16036127695760619150506127d4565b60fb8160ff160361277e5760629150506127d4565b60fc8160ff16036127935760639150506127d4565b60fd8160ff16036127a85760649150506127d4565b60fe8160ff16036127bd5760659150506127d4565b60ff8160ff16036127d25760669150506127d4565b505b919050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612800816127ed565b811461280b57600080fd5b50565b60008135905061281d816127f7565b92915050565b6000819050919050565b61283681612823565b811461284157600080fd5b50565b6000813590506128538161282d565b92915050565b600080604083850312156128705761286f6127e3565b5b600061287e8582860161280e565b925050602061288f85828601612844565b9150509250929050565b600080fd5b6000819050826020600202820111156128ba576128b9612899565b5b92915050565b600080fd5b600080fd5b60008083601f8401126128e0576128df6128c0565b5b8235905067ffffffffffffffff8111156128fd576128fc6128c5565b5b60208301915083600182028301111561291957612918612899565b5b9250929050565b60008060008060008060a0878903121561293d5761293c6127e3565b5b600061294b89828a0161280e565b965050602061295c89828a0161289e565b955050606087013567ffffffffffffffff81111561297d5761297c6127e8565b5b61298989828a016128ca565b9450945050608087013567ffffffffffffffff8111156129ac576129ab6127e8565b5b6129b889828a016128ca565b92509250509295509295509295565b6129d081612823565b82525050565b60006020820190506129eb60008301846129c7565b92915050565b600060208284031215612a0757612a066127e3565b5b6000612a158482850161280e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110612a5e57612a5d612a1e565b5b50565b6000819050612a6f82612a4d565b919050565b6000612a7f82612a61565b9050919050565b612a8f81612a74565b82525050565b6000602082019050612aaa6000830184612a86565b92915050565b6000819050826020800282011115612acb57612aca612899565b5b92915050565b60008060006104408486031215612aeb57612aea6127e3565b5b6000612af98682870161280e565b9350506020612b0a86828701612ab0565b925050610420612b1c86828701612844565b9150509250925092565b60008115159050919050565b612b3b81612b26565b82525050565b6000602082019050612b566000830184612b32565b92915050565b612b65816127ed565b82525050565b6000602082019050612b806000830184612b5c565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612bd482612b8b565b810181811067ffffffffffffffff82111715612bf357612bf2612b9c565b5b80604052505050565b6000612c066127d9565b9050612c128282612bcb565b919050565b600067ffffffffffffffff821115612c3257612c31612b9c565b5b612c3b82612b8b565b9050602081019050919050565b82818337600083830152505050565b6000612c6a612c6584612c17565b612bfc565b905082815260208101848484011115612c8657612c85612b86565b5b612c91848285612c48565b509392505050565b600082601f830112612cae57612cad6128c0565b5b8135612cbe848260208601612c57565b91505092915050565b60008060006104408486031215612ce157612ce06127e3565b5b600084013567ffffffffffffffff811115612cff57612cfe6127e8565b5b612d0b86828701612c99565b9350506020612d1c86828701612ab0565b925050610420612d2e86828701612844565b9150509250925092565b600060208284031215612d4e57612d4d6127e3565b5b6000612d5c84828501612844565b91505092915050565b600063ffffffff82169050919050565b612d7e81612d65565b82525050565b6000602082019050612d996000830184612d75565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612dca82612d9f565b9050919050565b612dda81612dbf565b82525050565b6000602082019050612df56000830184612dd1565b92915050565b600060208284031215612e1157612e106127e3565b5b600082013567ffffffffffffffff811115612e2f57612e2e6127e8565b5b612e3b84828501612c99565b91505092915050565b612e4d81612dbf565b8114612e5857600080fd5b50565b600081359050612e6a81612e44565b92915050565b600060208284031215612e8657612e856127e3565b5b6000612e9484828501612e5b565b91505092915050565b600080600060608486031215612eb657612eb56127e3565b5b6000612ec48682870161280e565b9350506020612ed58682870161280e565b925050604084013567ffffffffffffffff811115612ef657612ef56127e8565b5b612f0286828701612c99565b9150509250925092565b60038110612f1d57612f1c612a1e565b5b50565b6000819050612f2e82612f0c565b919050565b6000612f3e82612f20565b9050919050565b612f4e81612f33565b82525050565b6000602082019050612f696000830184612f45565b92915050565b612f7881612d65565b8114612f8357600080fd5b50565b600081359050612f9581612f6f565b92915050565b60008060008060808587031215612fb557612fb46127e3565b5b6000612fc387828801612f86565b9450506020612fd487828801612e5b565b9350506040612fe58782880161280e565b9250506060612ff687828801612844565b91505092959194509250565b600060ff82169050919050565b61301881613002565b82525050565b6000602082019050613033600083018461300f565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613080602083613039565b915061308b8261304a565b602082019050919050565b600060208201905081810360008301526130af81613073565b9050919050565b60006040820190506130cb60008301856129c7565b6130d860208301846129c7565b9392505050565b7f6661696c65642073746174650000000000000000000000000000000000000000600082015250565b6000613115600c83613039565b9150613120826130df565b602082019050919050565b6000602082019050818103600083015261314481613108565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61318660408383612c48565b5050565b600082825260208201905092915050565b60006131a7838561318a565b93506131b4838584612c48565b6131bd83612b8b565b840190509392505050565b600060a0820190506131dd6000830189612b5c565b6131ea602083018861317a565b81810360608301526131fd81868861319b565b9050818103608083015261321281848661319b565b9050979650505050505050565b7f214d6573736167655374617475732e4e6f6e6500000000000000000000000000600082015250565b6000613255601383613039565b91506132608261321f565b602082019050919050565b6000602082019050818103600083015261328481613248565b9050919050565b7f2170726f76650000000000000000000000000000000000000000000000000000600082015250565b60006132c1600683613039565b91506132cc8261328b565b602082019050919050565b600060208201905081810360008301526132f0816132b4565b9050919050565b7f2164657374696e6174696f6e0000000000000000000000000000000000000000600082015250565b600061332d600c83613039565b9150613338826132f7565b602082019050919050565b6000602082019050818103600083015261335c81613320565b9050919050565b7f2170726f76656e00000000000000000000000000000000000000000000000000600082015250565b6000613399600783613039565b91506133a482613363565b602082019050919050565b600060208201905081810360008301526133c88161338c565b9050919050565b7f217265656e7472616e7400000000000000000000000000000000000000000000600082015250565b6000613405600a83613039565b9150613410826133cf565b602082019050919050565b60006020820190508181036000830152613434816133f8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061347582612823565b915061348083612823565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134b5576134b461343b565b5b828201905092915050565b7f2167617300000000000000000000000000000000000000000000000000000000600082015250565b60006134f6600483613039565b9150613501826134c0565b602082019050919050565b60006020820190508181036000830152613525816134e9565b9050919050565b600081519050919050565b60005b8381101561355557808201518184015260208101905061353a565b83811115613564576000848401525b50505050565b60006135758261352c565b61357f818561318a565b935061358f818560208601613537565b61359881612b8b565b840191505092915050565b60006080820190506135b86000830187612d75565b6135c56020830186612d75565b6135d26040830185612b5c565b81810360608301526135e4818461356a565b905095945050505050565b600081905092915050565b60006136058261352c565b61360f81856135ef565b935061361f818560208601613537565b80840191505092915050565b600061363782846135fa565b915081905092915050565b7f6e6f742063757272656e74207570646174650000000000000000000000000000600082015250565b6000613678601283613039565b915061368382613642565b602082019050919050565b600060208201905081810360008301526136a78161366b565b9050919050565b7f2175706461746572207369670000000000000000000000000000000000000000600082015250565b60006136e4600c83613039565b91506136ef826136ae565b602082019050919050565b60006020820190508181036000830152613713816136d7565b9050919050565b60006020820190508181036000830152613734818461356a565b905092915050565b6000819050919050565b6000819050919050565b600061376b6137666137618461373c565b613746565b613002565b9050919050565b61377b81613750565b82525050565b60006020820190506137966000830184613772565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006137f8602683613039565b91506138038261379c565b604082019050919050565b60006020820190508181036000830152613827816137eb565b9050919050565b6000819050919050565b613849613844826127ed565b61382e565b82525050565b600061385b8286613838565b60208201915061386b8285613838565b60208201915061387b8284613838565b602082019150819050949350505050565b60006138988285613838565b6020820191506138a88284613838565b6020820191508190509392505050565b60006138c382612823565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138f5576138f461343b565b5b600182019050919050565b60008160e01b9050919050565b600061391882613900565b9050919050565b61393061392b82612d65565b61390d565b82525050565b600081905092915050565b7f4e4f4d4144000000000000000000000000000000000000000000000000000000600082015250565b6000613977600583613936565b915061398282613941565b600582019050919050565b6000613999828461391f565b6004820191506139a88261396a565b915081905092915050565b60006139be82612823565b91506139c983612823565b9250828210156139dc576139db61343b565b5b828203905092915050565b60006040820190506139fc6000830185612dd1565b613a096020830184612dd1565b9392505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000613a6c602e83613039565b9150613a7782613a10565b604082019050919050565b60006020820190508181036000830152613a9b81613a5f565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000613ad8601c83613936565b9150613ae382613aa2565b601c82019050919050565b6000613af982613acb565b9150613b058284613838565b60208201915081905092915050565b6000613b1f82613002565b9150613b2a83613002565b925082821015613b3d57613b3c61343b565b5b828203905092915050565b6000613b5382613002565b9150613b5e83613002565b92508160ff0483118215151615613b7857613b7761343b565b5b828202905092915050565b600081519050919050565b6000613b9982613b83565b613ba38185613039565b9350613bb3818560208601613537565b613bbc81612b8b565b840191505092915050565b60006020820190508181036000830152613be18184613b8e565b905092915050565b7f54797065644d656d566965772f696e646578202d20417474656d70746564207460008201527f6f20696e646578206d6f7265207468616e203332206279746573000000000000602082015250565b6000613c45603a83613039565b9150613c5082613be9565b604082019050919050565b60006020820190508181036000830152613c7481613c38565b9050919050565b7f54797065644d656d566965772f636f7079546f202d204e756c6c20706f696e7460008201527f6572206465726566000000000000000000000000000000000000000000000000602082015250565b6000613cd7602883613039565b9150613ce282613c7b565b604082019050919050565b60006020820190508181036000830152613d0681613cca565b9050919050565b7f54797065644d656d566965772f636f7079546f202d20496e76616c696420706f60008201527f696e746572206465726566000000000000000000000000000000000000000000602082015250565b6000613d69602b83613039565b9150613d7482613d0d565b604082019050919050565b60006020820190508181036000830152613d9881613d5c565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000613dfb602b83613039565b9150613e0682613d9f565b604082019050919050565b60006020820190508181036000830152613e2a81613dee565b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000613e67601883613039565b9150613e7282613e31565b602082019050919050565b60006020820190508181036000830152613e9681613e5a565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613ed3601f83613039565b9150613ede82613e9d565b602082019050919050565b60006020820190508181036000830152613f0281613ec6565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f65602283613039565b9150613f7082613f09565b604082019050919050565b60006020820190508181036000830152613f9481613f58565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ff7602283613039565b915061400282613f9b565b604082019050919050565b6000602082019050818103600083015261402681613fea565b9050919050565b7f54797065644d656d566965772f696e646578202d204f76657272616e2074686560008201527f20766965772e20536c6963652069732061742030780000000000000000000000602082015250565b6000614089603583613936565b91506140948261402d565b603582019050919050565b600065ffffffffffff82169050919050565b60008160d01b9050919050565b60006140c9826140b1565b9050919050565b6140e16140dc8261409f565b6140be565b82525050565b7f2077697468206c656e6774682030780000000000000000000000000000000000600082015250565b600061411d600f83613936565b9150614128826140e7565b600f82019050919050565b7f2e20417474656d7074656420746f20696e646578206174206f6666736574203060008201527f7800000000000000000000000000000000000000000000000000000000000000602082015250565b600061418f602183613936565b915061419a82614133565b602182019050919050565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b60006141db600183613936565b91506141e6826141a5565b600182019050919050565b60006141fc8261407c565b915061420882876140d0565b6006820191506142178261411056