{
  "_format": "hh-sol-artifact-1",
  "contractName": "Home",
  "sourceName": "@connext/nxtp-contracts/contracts/nomad-core/contracts/Home.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_localDomain",
          "type": "uint32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "messageHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "leafIndex",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "destinationAndNonce",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "committedRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        }
      ],
      "name": "Dispatch",
      "type": "event"
    },
    {
      "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": "bytes32",
          "name": "oldRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "newRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "ImproperUpdate",
      "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": false,
          "internalType": "address",
          "name": "updaterManager",
          "type": "address"
        }
      ],
      "name": "NewUpdaterManager",
      "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": "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "updater",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "reporter",
          "type": "address"
        }
      ],
      "name": "UpdaterSlashed",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MAX_MESSAGE_BODY_BYTES",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "committedRoot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "count",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_destinationDomain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_recipientAddress",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_messageBody",
          "type": "bytes"
        }
      ],
      "name": "dispatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "bytes32",
          "name": "_oldRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_newRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "improperUpdate",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IUpdaterManager",
          "name": "_updaterManager",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "localDomain",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_item",
          "type": "bytes32"
        }
      ],
      "name": "queueContains",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "queueEnd",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "queueLength",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "root",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_updater",
          "type": "address"
        }
      ],
      "name": "setUpdater",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_updaterManager",
          "type": "address"
        }
      ],
      "name": "setUpdaterManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "state",
      "outputs": [
        {
          "internalType": "enum NomadBase.States",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "suggestUpdate",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "_committedRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_new",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tree",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "count",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_committedRoot",
          "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"
    },
    {
      "inputs": [],
      "name": "updaterManager",
      "outputs": [
        {
          "internalType": "contract IUpdaterManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523480156200001157600080fd5b50604051620044533803806200445383398181016040528101906200003791906200009a565b808063ffffffff1660808163ffffffff16815250505050620000cc565b600080fd5b600063ffffffff82169050919050565b620000748162000059565b81146200008057600080fd5b50565b600081519050620000948162000069565b92915050565b600060208284031215620000b357620000b262000054565b5b6000620000c38482850162000083565b91505092915050565b608051614356620000fd600039600081816106ee015281816107ad01528181610b8c0152610fe001526143566000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80639df6c8e1116100de578063df034cd011610097578063f6d1610211610071578063f6d161021461043e578063fa31de011461045c578063fd54b22814610478578063ffa1ad74146104965761018e565b8063df034cd0146103e6578063ebf0c71714610404578063f2fde38b146104225761018e565b80639df6c8e114610324578063ab91c7b014610342578063b31c01fb14610360578063b95a20011461037c578063c19d93fb146103ac578063c4d66de8146103ca5761018e565b806367a6771d1161014b5780638da5cb5b116101255780638da5cb5b1461029e5780638e4e30e0146102bc5780639776120e146102ec5780639d54f419146103085761018e565b806367a6771d14610258578063715018a6146102765780638d3638f4146102805761018e565b806306661abd1461019357806319d9d21a146101b15780632bef2892146101cd57806336e104de146101fd57806345630b1a1461021c578063522ae0021461023a575b600080fd5b61019b6104b4565b6040516101a89190612b09565b60405180910390f35b6101cb60048036038101906101c69190612bf5565b6104c1565b005b6101e760048036038101906101e29190612c9c565b6106a0565b6040516101f49190612ce4565b60405180910390f35b6102056106bd565b604051610213929190612d0e565b60405180910390f35b6102246106e7565b6040516102319190612d37565b60405180910390f35b610242610717565b60405161024f9190612b09565b60405180910390f35b61026061071d565b60405161026d9190612d37565b60405180910390f35b61027e610723565b005b6102886107ab565b6040516102959190612d71565b60405180910390f35b6102a66107cf565b6040516102b39190612dcd565b60405180910390f35b6102d660048036038101906102d19190612f29565b6107f9565b6040516102e39190612ce4565b60405180910390f35b61030660048036038101906103019190612fc4565b61096f565b005b610322600480360381019061031d9190612fc4565b6109f7565b005b61032c610a94565b6040516103399190613050565b60405180910390f35b61034a610abb565b6040516103579190612b09565b60405180910390f35b61037a60048036038101906103759190612f29565b610acc565b005b61039660048036038101906103919190613097565b610bee565b6040516103a39190612d71565b60405180910390f35b6103b4610c12565b6040516103c1919061313b565b60405180910390f35b6103e460048036038101906103df9190613194565b610c25565b005b6103ee610d5d565b6040516103fb9190612dcd565b60405180910390f35b61040c610d83565b6040516104199190612d37565b60405180910390f35b61043c60048036038101906104379190612fc4565b610d94565b005b610446610e8c565b6040516104539190612d37565b60405180910390f35b610476600480360381019061047191906131c1565b610e9d565b005b6104806110cc565b60405161048d9190612b09565b60405180910390f35b61049e6110d8565b6040516104ab919061324c565b60405180910390f35b6000603460200154905090565b6002808111156104d4576104d36130c4565b5b60ea60149054906101000a900460ff1660028111156104f6576104f56130c4565b5b1415610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e906132c4565b60405180910390fd5b61059e868660006002811061054f5761054e6132e4565b5b602002013586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506110dd565b801561060d575061060c86866001600281106105bd576105bc6132e4565b5b602002013584848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506110dd565b5b8015610649575084600160028110610628576106276132e4565b5b602002013585600060028110610641576106406132e4565b5b602002013514155b1561069857610656611183565b7f2c3f60bab4170347826231b75a920b5053941ddebc6eed6fd2c25721648b186f86868686868660405161068f96959493929190613361565b60405180910390a15b505050505050565b60006106b682600161129790919063ffffffff16565b9050919050565b60008060006106cc600161134f565b146106e35760eb5491506106e060016113ad565b90505b9091565b60006107127f00000000000000000000000000000000000000000000000000000000000000006113fe565b905090565b61080081565b60eb5481565b61072b61142e565b73ffffffffffffffffffffffffffffffffffffffff166107496107cf565b73ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079690613404565b60405180910390fd5b6107a96000611436565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b600060b860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600060028081111561080e5761080d6130c4565b5b60ea60149054906101000a900460ff1660028111156108305761082f6130c4565b5b1415610871576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610868906132c4565b60405180910390fd5b61087c8484846110dd565b6108bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b290613470565b60405180910390fd5b60eb5484146108ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f6906134dc565b60405180910390fd5b61091383600161129790919063ffffffff16565b6109635761091f611183565b7f6844fd5e21c932b5197b78ac11bf96e2eaa4e882dd0c88087060cf2065c04ab284848460405161095293929190613573565b60405180910390a160019050610968565b600090505b9392505050565b61097761142e565b73ffffffffffffffffffffffffffffffffffffffff166109956107cf565b73ffffffffffffffffffffffffffffffffffffffff16146109eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e290613404565b60405180910390fd5b6109f4816114fc565b50565b61011c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f906135fd565b60405180910390fd5b610a91816115c0565b50565b61011c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ac7600161134f565b905090565b600280811115610adf57610ade6130c4565b5b60ea60149054906101000a900460ff166002811115610b0157610b006130c4565b5b1415610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b39906132c4565b60405180910390fd5b610b4d8383836107f9565b15610b5757610be9565b5b600115610b81576000610b6b6001611665565b905082811415610b7b5750610b81565b50610b58565b8160eb8190555081837f000000000000000000000000000000000000000000000000000000000000000063ffffffff167f608828ad904a0c9250c09004ba7226efb08f35a5c815bb3f76b5a8a271cd08b284604051610be0919061361d565b60405180910390a45b505050565b61011b6020528060005260406000206000915054906101000a900463ffffffff1681565b60ea60149054906101000a900460ff1681565b6000610c3160016117ab565b90508015610c55576001600060016101000a81548160ff0219169083151502179055505b610c5d61189b565b610c66826114fc565b610d0061011c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663df034cd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfb9190613654565b611931565b8015610d595760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d5091906136bc565b60405180910390a15b5050565b60ea60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610d8f60346119fa565b905090565b610d9c61142e565b73ffffffffffffffffffffffffffffffffffffffff16610dba6107cf565b73ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0790613404565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7790613749565b60405180910390fd5b610e8981611436565b50565b6000610e9860016113ad565b905090565b600280811115610eb057610eaf6130c4565b5b60ea60149054906101000a900460ff166002811115610ed257610ed16130c4565b5b1415610f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0a906132c4565b60405180910390fd5b61080081511115610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f50906137b5565b60405180910390fd5b600061011b60008563ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900463ffffffff169050600181610f9b9190613804565b61011b60008663ffffffff1663ffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff16021790555060006110227f00000000000000000000000000000000000000000000000000000000000000003373ffffffffffffffffffffffffffffffffffffffff1660001b84888888611a14565b9050600081805190602001209050611044816034611a4c90919063ffffffff16565b61105f61104f610d83565b6001611b8490919063ffffffff16565b5061106a8684611c2d565b67ffffffffffffffff16600161107e6104b4565b611088919061383e565b827f9d4c83d2e57d7d381feb264b44a5015e7f9ef26340f4fc46b558a6dc16dd811a60eb54866040516110bc929190613872565b60405180910390a4505050505050565b60348060200154905081565b600081565b6000806110e86106e7565b85856040516020016110fc939291906138c3565b60405160208183030381529060405280519060200120905061111d81611c54565b905060ea60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166111628285611c84565b73ffffffffffffffffffffffffffffffffffffffff16149150509392505050565b61118b611cab565b61011c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635b3c2cbf336040518263ffffffff1660e01b81526004016111e79190613921565b600060405180830381600087803b15801561120157600080fd5b505af1158015611215573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff1660ea60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f98064af315f26d7333ba107ba43a128ec74345f4d4e6f2549840fe092a1c8bce60405160405180910390a3565b6000808360000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1690505b8360000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681116113435782846001016000838152602001908152602001600020541415611330576001915050611349565b808061133b9061393c565b9150506112d0565b50600090505b92915050565b6000808260000160109054906101000a90046fffffffffffffffffffffffffffffffff16905060008360000160009054906101000a90046fffffffffffffffffffffffffffffffff1690506113a48282611cd8565b92505050919050565b60008160010160008360000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000816040516020016114119190613a12565b604051602081830303815290604052805190602001209050919050565b600033905090565b600060b860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160b860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61150581611d0c565b611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153b90613a84565b60405180910390fd5b8061011c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f958d788fb4c373604cd4c73aa8c592de127d0819b49bb4dc02c8ecd666e965bf816040516115b59190612dcd565b60405180910390a150565b600060ea60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160ea60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0f20622a7af9e952a6fec654a196f29e04477b5d335772c26902bec35cc9f22a8183604051611659929190613aa4565b60405180910390a15050565b6000808260000160109054906101000a90046fffffffffffffffffffffffffffffffff16905060008360000160009054906101000a90046fffffffffffffffffffffffffffffffff16905060006116bc8383611cd8565b14156116fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f490613b19565b60405180910390fd5b836001016000826fffffffffffffffffffffffffffffffff1681526020019081526020016000205492506000801b831461175d57836001016000826fffffffffffffffffffffffffffffffff168152602001908152602001600020600090555b60018161176a9190613b55565b8460000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050919050565b60008060019054906101000a900460ff16156118225760018260ff161480156117da57506117d830611d2f565b155b611819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181090613c0d565b60405180910390fd5b60009050611896565b8160ff1660008054906101000a900460ff1660ff1610611877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186e90613c0d565b60405180910390fd5b816000806101000a81548160ff021916908360ff160217905550600190505b919050565b60006118a760016117ab565b905080156118cb576001600060016101000a81548160ff0219169083151502179055505b6118d56001611d52565b801561192e5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161192591906136bc565b60405180910390a15b50565b600061193d60016117ab565b90508015611961576001600060016101000a81548160ff0219169083151502179055505b611969611dcd565b611972826115c0565b600160ea60146101000a81548160ff02191690836002811115611998576119976130c4565b5b021790555080156119f65760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516119ed91906136bc565b60405180910390a15b5050565b6000611a0d82611a08611e26565b6125d2565b9050919050565b6060868686868686604051602001611a3196959493929190613c69565b60405160208183030381529060405290509695505050505050565b600160206002611a5c9190613e08565b611a66919061383e565b826020015410611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290613e9f565b60405180910390fd5b6001826020016000828254611ac09190613ebf565b9250508190555060008260200154905060005b6020811015611b6e5760018083161415611b0a5782846000018260208110611afe57611afd6132e4565b5b01819055505050611b80565b836000018160208110611b2057611b1f6132e4565b5b015483604051602001611b34929190613f15565b604051602081830303815290604052805190602001209250600282611b599190613f70565b91508080611b669061393c565b915050611ad3565b506000611b7e57611b7d613fa1565b5b505b5050565b600060018360000160109054906101000a90046fffffffffffffffffffffffffffffffff16611bb39190613b55565b9050808360000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506000801b8214611c275781836001016000836fffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b92915050565b60008163ffffffff1660208463ffffffff1667ffffffffffffffff16901b17905092915050565b600081604051602001611c67919061401c565b604051602081830303815290604052805190602001209050919050565b6000806000611c9385856126a8565b91509150611ca08161272b565b819250505092915050565b600260ea60146101000a81548160ff02191690836002811115611cd157611cd06130c4565b5b0217905550565b600081600184611ce89190613b55565b611cf29190614042565b6fffffffffffffffffffffffffffffffff16905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff161415611dca5760018160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b50565b600060019054906101000a900460ff16611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e13906140e8565b60405180910390fd5b611e24612900565b565b611e2e612acd565b600081600060208110611e4457611e436132e4565b5b6020020181815250507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb581600160208110611e8257611e816132e4565b5b6020020181815250507fb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3081600260208110611ec057611ebf6132e4565b5b6020020181815250507f21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba8581600360208110611efe57611efd6132e4565b5b6020020181815250507fe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a1934481600460208110611f3c57611f3b6132e4565b5b6020020181815250507f0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d81600560208110611f7a57611f796132e4565b5b6020020181815250507f887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a196881600660208110611fb857611fb76132e4565b5b6020020181815250507fffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f8381600760208110611ff657611ff56132e4565b5b6020020181815250507f9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af81600860208110612034576120336132e4565b5b6020020181815250507fcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e081600960208110612072576120716132e4565b5b6020020181815250507ff9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a581600a602081106120b0576120af6132e4565b5b6020020181815250507ff8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf89281600b602081106120ee576120ed6132e4565b5b6020020181815250507f3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c81600c6020811061212c5761212b6132e4565b5b6020020181815250507fc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb81600d6020811061216a576121696132e4565b5b6020020181815250507f5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc81600e602081106121a8576121a76132e4565b5b6020020181815250507fda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d281600f602081106121e6576121e56132e4565b5b6020020181815250507f2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f81601060208110612224576122236132e4565b5b6020020181815250507fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a81601160208110612262576122616132e4565b5b6020020181815250507f5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0816012602081106122a05761229f6132e4565b5b6020020181815250507fb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0816013602081106122de576122dd6132e4565b5b6020020181815250507fc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e28160146020811061231c5761231b6132e4565b5b6020020181815250507ff4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd98160156020811061235a576123596132e4565b5b6020020181815250507f5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e37781601660208110612398576123976132e4565b5b6020020181815250507f4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652816017602081106123d6576123d56132e4565b5b6020020181815250507fcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef81601860208110612414576124136132e4565b5b6020020181815250507f0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d81601960208110612452576124516132e4565b5b6020020181815250507fb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d081601a602081106124905761248f6132e4565b5b6020020181815250507f838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e81601b602081106124ce576124cd6132e4565b5b6020020181815250507f662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e81601c6020811061250c5761250b6132e4565b5b6020020181815250507f388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea32281601d6020811061254a576125496132e4565b5b6020020181815250507f93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d73581601e60208110612588576125876132e4565b5b6020020181815250507f8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a981601f602081106125c6576125c56132e4565b5b60200201818152505090565b6000808360200154905060005b60208110156126a057600060018284901c169050600086600001836020811061260b5761260a6132e4565b5b01549050600182141561264857808560405160200161262b929190613f15565b60405160208183030381529060405280519060200120945061268b565b8486846020811061265c5761265b6132e4565b5b6020020151604051602001612672929190613f15565b6040516020818303038152906040528051906020012094505b505080806126989061393c565b9150506125df565b505092915050565b6000806041835114156126ea5760008060006020860151925060408601519150606086015160001a90506126de87828585612961565b94509450505050612724565b60408351141561271b576000806020850151915060408501519050612710868383612a6e565b935093505050612724565b60006002915091505b9250929050565b6000600481111561273f5761273e6130c4565b5b816004811115612752576127516130c4565b5b141561275d576128fd565b60016004811115612771576127706130c4565b5b816004811115612784576127836130c4565b5b14156127c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bc90614154565b60405180910390fd5b600260048111156127d9576127d86130c4565b5b8160048111156127ec576127eb6130c4565b5b141561282d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612824906141c0565b60405180910390fd5b60036004811115612841576128406130c4565b5b816004811115612854576128536130c4565b5b1415612895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288c90614252565b60405180910390fd5b6004808111156128a8576128a76130c4565b5b8160048111156128bb576128ba6130c4565b5b14156128fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f3906142e4565b60405180910390fd5b5b50565b600060019054906101000a900460ff1661294f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612946906140e8565b60405180910390fd5b61295f61295a61142e565b611436565b565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561299c576000600391509150612a65565b601b8560ff16141580156129b45750601c8560ff1614155b156129c6576000600491509150612a65565b6000600187878787604051600081526020016040526040516129eb9493929190614304565b6020604051602081039080840390855afa158015612a0d573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a5c57600060019250925050612a65565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c612ab19190613ebf565b9050612abf87828885612961565b935093505050935093915050565b604051806104000160405280602090602082028036833780820191505090505090565b6000819050919050565b612b0381612af0565b82525050565b6000602082019050612b1e6000830184612afa565b92915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612b4b81612b38565b8114612b5657600080fd5b50565b600081359050612b6881612b42565b92915050565b600080fd5b600081905082602060020282011115612b8f57612b8e612b6e565b5b92915050565b600080fd5b600080fd5b60008083601f840112612bb557612bb4612b95565b5b8235905067ffffffffffffffff811115612bd257612bd1612b9a565b5b602083019150836001820283011115612bee57612bed612b6e565b5b9250929050565b60008060008060008060a08789031215612c1257612c11612b2e565b5b6000612c2089828a01612b59565b9650506020612c3189828a01612b73565b955050606087013567ffffffffffffffff811115612c5257612c51612b33565b5b612c5e89828a01612b9f565b9450945050608087013567ffffffffffffffff811115612c8157612c80612b33565b5b612c8d89828a01612b9f565b92509250509295509295509295565b600060208284031215612cb257612cb1612b2e565b5b6000612cc084828501612b59565b91505092915050565b60008115159050919050565b612cde81612cc9565b82525050565b6000602082019050612cf96000830184612cd5565b92915050565b612d0881612b38565b82525050565b6000604082019050612d236000830185612cff565b612d306020830184612cff565b9392505050565b6000602082019050612d4c6000830184612cff565b92915050565b600063ffffffff82169050919050565b612d6b81612d52565b82525050565b6000602082019050612d866000830184612d62565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612db782612d8c565b9050919050565b612dc781612dac565b82525050565b6000602082019050612de26000830184612dbe565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e3682612ded565b810181811067ffffffffffffffff82111715612e5557612e54612dfe565b5b80604052505050565b6000612e68612b24565b9050612e748282612e2d565b919050565b600067ffffffffffffffff821115612e9457612e93612dfe565b5b612e9d82612ded565b9050602081019050919050565b82818337600083830152505050565b6000612ecc612ec784612e79565b612e5e565b905082815260208101848484011115612ee857612ee7612de8565b5b612ef3848285612eaa565b509392505050565b600082601f830112612f1057612f0f612b95565b5b8135612f20848260208601612eb9565b91505092915050565b600080600060608486031215612f4257612f41612b2e565b5b6000612f5086828701612b59565b9350506020612f6186828701612b59565b925050604084013567ffffffffffffffff811115612f8257612f81612b33565b5b612f8e86828701612efb565b9150509250925092565b612fa181612dac565b8114612fac57600080fd5b50565b600081359050612fbe81612f98565b92915050565b600060208284031215612fda57612fd9612b2e565b5b6000612fe884828501612faf565b91505092915050565b6000819050919050565b600061301661301161300c84612d8c565b612ff1565b612d8c565b9050919050565b600061302882612ffb565b9050919050565b600061303a8261301d565b9050919050565b61304a8161302f565b82525050565b60006020820190506130656000830184613041565b92915050565b61307481612d52565b811461307f57600080fd5b50565b6000813590506130918161306b565b92915050565b6000602082840312156130ad576130ac612b2e565b5b60006130bb84828501613082565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110613104576131036130c4565b5b50565b6000819050613115826130f3565b919050565b600061312582613107565b9050919050565b6131358161311a565b82525050565b6000602082019050613150600083018461312c565b92915050565b600061316182612dac565b9050919050565b61317181613156565b811461317c57600080fd5b50565b60008135905061318e81613168565b92915050565b6000602082840312156131aa576131a9612b2e565b5b60006131b88482850161317f565b91505092915050565b6000806000606084860312156131da576131d9612b2e565b5b60006131e886828701613082565b93505060206131f986828701612b59565b925050604084013567ffffffffffffffff81111561321a57613219612b33565b5b61322686828701612efb565b9150509250925092565b600060ff82169050919050565b61324681613230565b82525050565b6000602082019050613261600083018461323d565b92915050565b600082825260208201905092915050565b7f6661696c65642073746174650000000000000000000000000000000000000000600082015250565b60006132ae600c83613267565b91506132b982613278565b602082019050919050565b600060208201905081810360008301526132dd816132a1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61331f60408383612eaa565b5050565b600082825260208201905092915050565b60006133408385613323565b935061334d838584612eaa565b61335683612ded565b840190509392505050565b600060a0820190506133766000830189612cff565b6133836020830188613313565b8181036060830152613396818688613334565b905081810360808301526133ab818486613334565b9050979650505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006133ee602083613267565b91506133f9826133b8565b602082019050919050565b6000602082019050818103600083015261341d816133e1565b9050919050565b7f2175706461746572207369670000000000000000000000000000000000000000600082015250565b600061345a600c83613267565b915061346582613424565b602082019050919050565b600060208201905081810360008301526134898161344d565b9050919050565b7f6e6f7420612063757272656e7420757064617465000000000000000000000000600082015250565b60006134c6601483613267565b91506134d182613490565b602082019050919050565b600060208201905081810360008301526134f5816134b9565b9050919050565b600081519050919050565b60005b8381101561352557808201518184015260208101905061350a565b83811115613534576000848401525b50505050565b6000613545826134fc565b61354f8185613323565b935061355f818560208601613507565b61356881612ded565b840191505092915050565b60006060820190506135886000830186612cff565b6135956020830185612cff565b81810360408301526135a7818461353a565b9050949350505050565b7f21757064617465724d616e616765720000000000000000000000000000000000600082015250565b60006135e7600f83613267565b91506135f2826135b1565b602082019050919050565b60006020820190508181036000830152613616816135da565b9050919050565b60006020820190508181036000830152613637818461353a565b905092915050565b60008151905061364e81612f98565b92915050565b60006020828403121561366a57613669612b2e565b5b60006136788482850161363f565b91505092915050565b6000819050919050565b60006136a66136a161369c84613681565b612ff1565b613230565b9050919050565b6136b68161368b565b82525050565b60006020820190506136d160008301846136ad565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613733602683613267565b915061373e826136d7565b604082019050919050565b6000602082019050818103600083015261376281613726565b9050919050565b7f6d736720746f6f206c6f6e670000000000000000000000000000000000000000600082015250565b600061379f600c83613267565b91506137aa82613769565b602082019050919050565b600060208201905081810360008301526137ce81613792565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061380f82612d52565b915061381a83612d52565b92508263ffffffff03821115613833576138326137d5565b5b828201905092915050565b600061384982612af0565b915061385483612af0565b925082821015613867576138666137d5565b5b828203905092915050565b60006040820190506138876000830185612cff565b8181036020830152613899818461353a565b90509392505050565b6000819050919050565b6138bd6138b882612b38565b6138a2565b82525050565b60006138cf82866138ac565b6020820191506138df82856138ac565b6020820191506138ef82846138ac565b602082019150819050949350505050565b600061390b82612d8c565b9050919050565b61391b81613900565b82525050565b60006020820190506139366000830184613912565b92915050565b600061394782612af0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561397a576139796137d5565b5b600182019050919050565b60008160e01b9050919050565b600061399d82613985565b9050919050565b6139b56139b082612d52565b613992565b82525050565b600081905092915050565b7f4e4f4d4144000000000000000000000000000000000000000000000000000000600082015250565b60006139fc6005836139bb565b9150613a07826139c6565b600582019050919050565b6000613a1e82846139a4565b600482019150613a2d826139ef565b915081905092915050565b7f21636f6e747261637420757064617465724d616e616765720000000000000000600082015250565b6000613a6e601883613267565b9150613a7982613a38565b602082019050919050565b60006020820190508181036000830152613a9d81613a61565b9050919050565b6000604082019050613ab96000830185612dbe565b613ac66020830184612dbe565b9392505050565b7f456d707479000000000000000000000000000000000000000000000000000000600082015250565b6000613b03600583613267565b9150613b0e82613acd565b602082019050919050565b60006020820190508181036000830152613b3281613af6565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6000613b6082613b39565b9150613b6b83613b39565b9250826fffffffffffffffffffffffffffffffff03821115613b9057613b8f6137d5565b5b828201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000613bf7602e83613267565b9150613c0282613b9b565b604082019050919050565b60006020820190508181036000830152613c2681613bea565b9050919050565b600081905092915050565b6000613c43826134fc565b613c4d8185613c2d565b9350613c5d818560208601613507565b80840191505092915050565b6000613c7582896139a4565b600482019150613c8582886138ac565b602082019150613c9582876139a4565b600482019150613ca582866139a4565b600482019150613cb582856138ac565b602082019150613cc58284613c38565b9150819050979650505050505050565b60008160011c9050919050565b6000808291508390505b6001851115613d2c57808604811115613d0857613d076137d5565b5b6001851615613d175780820291505b8081029050613d2585613cd5565b9450613cec565b94509492505050565b600082613d455760019050613e01565b81613d535760009050613e01565b8160018114613d695760028114613d7357613da2565b6001915050613e01565b60ff841115613d8557613d846137d5565b5b8360020a915084821115613d9c57613d9b6137d5565b5b50613e01565b5060208310610133831016604e8410600b8410161715613dd75782820a905083811115613dd257613dd16137d5565b5b613e01565b613de48484846001613ce2565b92509050818404811115613dfb57613dfa6137d5565b5b81810290505b9392505050565b6000613e1382612af0565b9150613e1e83612af0565b9250613e4b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613d35565b905092915050565b7f6d65726b6c6520747265652066756c6c00000000000000000000000000000000600082015250565b6000613e89601083613267565b9150613e9482613e53565b602082019050919050565b60006020820190508181036000830152613eb881613e7c565b9050919050565b6000613eca82612af0565b9150613ed583612af0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f0a57613f096137d5565b5b828201905092915050565b6000613f2182856138ac565b602082019150613f3182846138ac565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f7b82612af0565b9150613f8683612af0565b925082613f9657613f95613f41565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000614006601c836139bb565b915061401182613fd0565b601c82019050919050565b600061402782613ff9565b915061403382846138ac565b60208201915081905092915050565b600061404d82613b39565b915061405883613b39565b92508282101561406b5761406a6137d5565b5b828203905092915050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006140d2602b83613267565b91506140dd82614076565b604082019050919050565b60006020820190508181036000830152614101816140c5565b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b600061413e601883613267565b915061414982614108565b602082019050919050565b6000602082019050818103600083015261416d81614131565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b60006141aa601f83613267565b91506141b582614174565b602082019050919050565b600060208201905081810360008301526141d98161419d565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b600061423c602283613267565b9150614247826141e0565b604082019050919050565b6000602082019050818103600083015261426b8161422f565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006142ce602283613267565b91506142d982614272565b604082019050919050565b600060208201905081810360008301526142fd816142c1565b9050919050565b60006080820190506143196000830187612cff565b614326602083018661323d565b6143336040830185612cff565b6143406060830184612cff565b9594505050505056fea164736f6c634300080b000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80639df6c8e1116100de578063df034cd011610097578063f6d1610211610071578063f6d161021461043e578063fa31de011461045c578063fd54b22814610478578063ffa1ad74146104965761018e565b8063df034cd0146103e6578063ebf0c71714610404578063f2fde38b146104225761018e565b80639df6c8e114610324578063ab91c7b014610342578063b31c01fb14610360578063b95a20011461037c578063c19d93fb146103ac578063c4d66de8146103ca5761018e565b806367a6771d1161014b5780638da5cb5b116101255780638da5cb5b1461029e5780638e4e30e0146102bc5780639776120e146102ec5780639d54f419146103085761018e565b806367a6771d14610258578063715018a6146102765780638d3638f4146102805761018e565b806306661abd1461019357806319d9d21a146101b15780632bef2892146101cd57806336e104de146101fd57806345630b1a1461021c578063522ae0021461023a575b600080fd5b61019b6104b4565b6040516101a89190612b09565b60405180910390f35b6101cb60048036038101906101c69190612bf5565b6104c1565b005b6101e760048036038101906101e29190612c9c565b6106a0565b6040516101f49190612ce4565b60405180910390f35b6102056106bd565b604051610213929190612d0e565b60405180910390f35b6102246106e7565b6040516102319190612d37565b60405180910390f35b610242610717565b60405161024f9190612b09565b60405180910390f35b61026061071d565b60405161026d9190612d37565b60405180910390f35b61027e610723565b005b6102886107ab565b6040516102959190612d71565b60405180910390f35b6102a66107cf565b6040516102b39190612dcd565b60405180910390f35b6102d660048036038101906102d19190612f29565b6107f9565b6040516102e39190612ce4565b60405180910390f35b61030660048036038101906103019190612fc4565b61096f565b005b610322600480360381019061031d9190612fc4565b6109f7565b005b61032c610a94565b6040516103399190613050565b60405180910390f35b61034a610abb565b6040516103579190612b09565b60405180910390f35b61037a60048036038101906103759190612f29565b610acc565b005b61039660048036038101906103919190613097565b610bee565b6040516103a39190612d71565b60405180910390f35b6103b4610c12565b6040516103c1919061313b565b60405180910390f35b6103e460048036038101906103df9190613194565b610c25565b005b6103ee610d5d565b6040516103fb9190612dcd565b60405180910390f35b61040c610d83565b6040516104199190612d37565b60405180910390f35b61043c60048036038101906104379190612fc4565b610d94565b005b610446610e8c565b6040516104539190612d37565b60405180910390f35b610476600480360381019061047191906131c1565b610e9d565b005b6104806110cc565b60405161048d9190612b09565b60405180910390f35b61049e6110d8565b6040516104ab919061324c565b60405180910390f35b6000603460200154905090565b6002808111156104d4576104d36130c4565b5b60ea60149054906101000a900460ff1660028111156104f6576104f56130c4565b5b1415610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e906132c4565b60405180910390fd5b61059e868660006002811061054f5761054e6132e4565b5b602002013586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506110dd565b801561060d575061060c86866001600281106105bd576105bc6132e4565b5b602002013584848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506110dd565b5b8015610649575084600160028110610628576106276132e4565b5b602002013585600060028110610641576106406132e4565b5b602002013514155b1561069857610656611183565b7f2c3f60bab4170347826231b75a920b5053941ddebc6eed6fd2c25721648b186f86868686868660405161068f96959493929190613361565b60405180910390a15b505050505050565b60006106b682600161129790919063ffffffff16565b9050919050565b60008060006106cc600161134f565b146106e35760eb5491506106e060016113ad565b90505b9091565b60006107127f00000000000000000000000000000000000000000000000000000000000000006113fe565b905090565b61080081565b60eb5481565b61072b61142e565b73ffffffffffffffffffffffffffffffffffffffff166107496107cf565b73ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079690613404565b60405180910390fd5b6107a96000611436565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b600060b860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600060028081111561080e5761080d6130c4565b5b60ea60149054906101000a900460ff1660028111156108305761082f6130c4565b5b1415610871576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610868906132c4565b60405180910390fd5b61087c8484846110dd565b6108bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b290613470565b60405180910390fd5b60eb5484146108ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f6906134dc565b60405180910390fd5b61091383600161129790919063ffffffff16565b6109635761091f611183565b7f6844fd5e21c932b5197b78ac11bf96e2eaa4e882dd0c88087060cf2065c04ab284848460405161095293929190613573565b60405180910390a160019050610968565b600090505b9392505050565b61097761142e565b73ffffffffffffffffffffffffffffffffffffffff166109956107cf565b73ffffffffffffffffffffffffffffffffffffffff16146109eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e290613404565b60405180910390fd5b6109f4816114fc565b50565b61011c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f906135fd565b60405180910390fd5b610a91816115c0565b50565b61011c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ac7600161134f565b905090565b600280811115610adf57610ade6130c4565b5b60ea60149054906101000a900460ff166002811115610b0157610b006130c4565b5b1415610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b39906132c4565b60405180910390fd5b610b4d8383836107f9565b15610b5757610be9565b5b600115610b81576000610b6b6001611665565b905082811415610b7b5750610b81565b50610b58565b8160eb8190555081837f000000000000000000000000000000000000000000000000000000000000000063ffffffff167f608828ad904a0c9250c09004ba7226efb08f35a5c815bb3f76b5a8a271cd08b284604051610be0919061361d565b60405180910390a45b505050565b61011b6020528060005260406000206000915054906101000a900463ffffffff1681565b60ea60149054906101000a900460ff1681565b6000610c3160016117ab565b90508015610c55576001600060016101000a81548160ff0219169083151502179055505b610c5d61189b565b610c66826114fc565b610d0061011c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663df034cd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfb9190613654565b611931565b8015610d595760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d5091906136bc565b60405180910390a15b5050565b60ea60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610d8f60346119fa565b905090565b610d9c61142e565b73ffffffffffffffffffffffffffffffffffffffff16610dba6107cf565b73ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0790613404565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7790613749565b60405180910390fd5b610e8981611436565b50565b6000610e9860016113ad565b905090565b600280811115610eb057610eaf6130c4565b5b60ea60149054906101000a900460ff166002811115610ed257610ed16130c4565b5b1415610f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0a906132c4565b60405180910390fd5b61080081511115610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f50906137b5565b60405180910390fd5b600061011b60008563ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900463ffffffff169050600181610f9b9190613804565b61011b60008663ffffffff1663ffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff16021790555060006110227f00000000000000000000000000000000000000000000000000000000000000003373ffffffffffffffffffffffffffffffffffffffff1660001b84888888611a14565b9050600081805190602001209050611044816034611a4c90919063ffffffff16565b61105f61104f610d83565b6001611b8490919063ffffffff16565b5061106a8684611c2d565b67ffffffffffffffff16600161107e6104b4565b611088919061383e565b827f9d4c83d2e57d7d381feb264b44a5015e7f9ef26340f4fc46b558a6dc16dd811a60eb54866040516110bc929190613872565b60405180910390a4505050505050565b60348060200154905081565b600081565b6000806110e86106e7565b85856040516020016110fc939291906138c3565b60405160208183030381529060405280519060200120905061111d81611c54565b905060ea60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166111628285611c84565b73ffffffffffffffffffffffffffffffffffffffff16149150509392505050565b61118b611cab565b61011c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635b3c2cbf336040518263ffffffff1660e01b81526004016111e79190613921565b600060405180830381600087803b15801561120157600080fd5b505af1158015611215573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff1660ea60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f98064af315f26d7333ba107ba43a128ec74345f4d4e6f2549840fe092a1c8bce60405160405180910390a3565b6000808360000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1690505b8360000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681116113435782846001016000838152602001908152602001600020541415611330576001915050611349565b808061133b9061393c565b9150506112d0565b50600090505b92915050565b6000808260000160109054906101000a90046fffffffffffffffffffffffffffffffff16905060008360000160009054906101000a90046fffffffffffffffffffffffffffffffff1690506113a48282611cd8565b92505050919050565b60008160010160008360000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000816040516020016114119190613a12565b604051602081830303815290604052805190602001209050919050565b600033905090565b600060b860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160b860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61150581611d0c565b611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153b90613a84565b60405180910390fd5b8061011c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f958d788fb4c373604cd4c73aa8c592de127d0819b49bb4dc02c8ecd666e965bf816040516115b59190612dcd565b60405180910390a150565b600060ea60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160ea60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0f20622a7af9e952a6fec654a196f29e04477b5d335772c26902bec35cc9f22a8183604051611659929190613aa4565b60405180910390a15050565b6000808260000160109054906101000a90046fffffffffffffffffffffffffffffffff16905060008360000160009054906101000a90046fffffffffffffffffffffffffffffffff16905060006116bc8383611cd8565b14156116fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f490613b19565b60405180910390fd5b836001016000826fffffffffffffffffffffffffffffffff1681526020019081526020016000205492506000801b831461175d57836001016000826fffffffffffffffffffffffffffffffff168152602001908152602001600020600090555b60018161176a9190613b55565b8460000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050919050565b60008060019054906101000a900460ff16156118225760018260ff161480156117da57506117d830611d2f565b155b611819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181090613c0d565b60405180910390fd5b60009050611896565b8160ff1660008054906101000a900460ff1660ff1610611877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186e90613c0d565b60405180910390fd5b816000806101000a81548160ff021916908360ff160217905550600190505b919050565b60006118a760016117ab565b905080156118cb576001600060016101000a81548160ff0219169083151502179055505b6118d56001611d52565b801561192e5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161192591906136bc565b60405180910390a15b50565b600061193d60016117ab565b90508015611961576001600060016101000a81548160ff0219169083151502179055505b611969611dcd565b611972826115c0565b600160ea60146101000a81548160ff02191690836002811115611998576119976130c4565b5b021790555080156119f65760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516119ed91906136bc565b60405180910390a15b5050565b6000611a0d82611a08611e26565b6125d2565b9050919050565b6060868686868686604051602001611a3196959493929190613c69565b60405160208183030381529060405290509695505050505050565b600160206002611a5c9190613e08565b611a66919061383e565b826020015410611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290613e9f565b60405180910390fd5b6001826020016000828254611ac09190613ebf565b9250508190555060008260200154905060005b6020811015611b6e5760018083161415611b0a5782846000018260208110611afe57611afd6132e4565b5b01819055505050611b80565b836000018160208110611b2057611b1f6132e4565b5b015483604051602001611b34929190613f15565b604051602081830303815290604052805190602001209250600282611b599190613f70565b91508080611b669061393c565b915050611ad3565b506000611b7e57611b7d613fa1565b5b505b5050565b600060018360000160109054906101000a90046fffffffffffffffffffffffffffffffff16611bb39190613b55565b9050808360000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506000801b8214611c275781836001016000836fffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b92915050565b60008163ffffffff1660208463ffffffff1667ffffffffffffffff16901b17905092915050565b600081604051602001611c67919061401c565b604051602081830303815290604052805190602001209050919050565b6000806000611c9385856126a8565b91509150611ca08161272b565b819250505092915050565b600260ea60146101000a81548160ff02191690836002811115611cd157611cd06130c4565b5b0217905550565b600081600184611ce89190613b55565b611cf29190614042565b6fffffffffffffffffffffffffffffffff16905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008160000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff161415611dca5760018160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b50565b600060019054906101000a900460ff16611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e13906140e8565b60405180910390fd5b611e24612900565b565b611e2e612acd565b600081600060208110611e4457611e436132e4565b5b6020020181815250507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb581600160208110611e8257611e816132e4565b5b6020020181815250507fb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3081600260208110611ec057611ebf6132e4565b5b6020020181815250507f21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba8581600360208110611efe57611efd6132e4565b5b6020020181815250507fe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a1934481600460208110611f3c57611f3b6132e4565b5b6020020181815250507f0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d81600560208110611f7a57611f796132e4565b5b6020020181815250507f887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a196881600660208110611fb857611fb76132e4565b5b6020020181815250507fffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f8381600760208110611ff657611ff56132e4565b5b6020020181815250507f9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af81600860208110612034576120336132e4565b5b6020020181815250507fcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e081600960208110612072576120716132e4565b5b6020020181815250507ff9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a581600a602081106120b0576120af6132e4565b5b6020020181815250507ff8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf89281600b602081106120ee576120ed6132e4565b5b6020020181815250507f3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c81600c6020811061212c5761212b6132e4565b5b6020020181815250507fc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb81600d6020811061216a576121696132e4565b5b6020020181815250507f5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc81600e602081106121a8576121a76132e4565b5b6020020181815250507fda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d281600f602081106121e6576121e56132e4565b5b6020020181815250507f2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f81601060208110612224576122236132e4565b5b6020020181815250507fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a81601160208110612262576122616132e4565b5b6020020181815250507f5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0816012602081106122a05761229f6132e4565b5b6020020181815250507fb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0816013602081106122de576122dd6132e4565b5b6020020181815250507fc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e28160146020811061231c5761231b6132e4565b5b6020020181815250507ff4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd98160156020811061235a576123596132e4565b5b6020020181815250507f5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e37781601660208110612398576123976132e4565b5b6020020181815250507f4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652816017602081106123d6576123d56132e4565b5b6020020181815250507fcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef81601860208110612414576124136132e4565b5b6020020181815250507f0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d81601960208110612452576124516132e4565b5b6020020181815250507fb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d081601a602081106124905761248f6132e4565b5b6020020181815250507f838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e81601b602081106124ce576124cd6132e4565b5b6020020181815250507f662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e81601c6020811061250c5761250b6132e4565b5b6020020181815250507f388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea32281601d6020811061254a576125496132e4565b5b6020020181815250507f93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d73581601e60208110612588576125876132e4565b5b6020020181815250507f8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a981601f602081106125c6576125c56132e4565b5b60200201818152505090565b6000808360200154905060005b60208110156126a057600060018284901c169050600086600001836020811061260b5761260a6132e4565b5b01549050600182141561264857808560405160200161262b929190613f15565b60405160208183030381529060405280519060200120945061268b565b8486846020811061265c5761265b6132e4565b5b6020020151604051602001612672929190613f15565b6040516020818303038152906040528051906020012094505b505080806126989061393c565b9150506125df565b505092915050565b6000806041835114156126ea5760008060006020860151925060408601519150606086015160001a90506126de87828585612961565b94509450505050612724565b60408351141561271b576000806020850151915060408501519050612710868383612a6e565b935093505050612724565b60006002915091505b9250929050565b6000600481111561273f5761273e6130c4565b5b816004811115612752576127516130c4565b5b141561275d576128fd565b60016004811115612771576127706130c4565b5b816004811115612784576127836130c4565b5b14156127c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bc90614154565b60405180910390fd5b600260048111156127d9576127d86130c4565b5b8160048111156127ec576127eb6130c4565b5b141561282d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612824906141c0565b60405180910390fd5b60036004811115612841576128406130c4565b5b816004811115612854576128536130c4565b5b1415612895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288c90614252565b60405180910390fd5b6004808111156128a8576128a76130c4565b5b8160048111156128bb576128ba6130c4565b5b14156128fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f3906142e4565b60405180910390fd5b5b50565b600060019054906101000a900460ff1661294f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612946906140e8565b60405180910390fd5b61295f61295a61142e565b611436565b565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561299c576000600391509150612a65565b601b8560ff16141580156129b45750601c8560ff1614155b156129c6576000600491509150612a65565b6000600187878787604051600081526020016040526040516129eb9493929190614304565b6020604051602081039080840390855afa158015612a0d573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a5c57600060019250925050612a65565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c612ab19190613ebf565b9050612abf87828885612961565b935093505050935093915050565b604051806104000160405280602090602082028036833780820191505090505090565b6000819050919050565b612b0381612af0565b82525050565b6000602082019050612b1e6000830184612afa565b92915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612b4b81612b38565b8114612b5657600080fd5b50565b600081359050612b6881612b42565b92915050565b600080fd5b600081905082602060020282011115612b8f57612b8e612b6e565b5b92915050565b600080fd5b600080fd5b60008083601f840112612bb557612bb4612b95565b5b8235905067ffffffffffffffff811115612bd257612bd1612b9a565b5b602083019150836001820283011115612bee57612bed612b6e565b5b9250929050565b60008060008060008060a08789031215612c1257612c11612b2e565b5b6000612c2089828a01612b59565b9650506020612c3189828a01612b73565b955050606087013567ffffffffffffffff811115612c5257612c51612b33565b5b612c5e89828a01612b9f565b9450945050608087013567ffffffffffffffff811115612c8157612c80612b33565b5b612c8d89828a01612b9f565b92509250509295509295509295565b600060208284031215612cb257612cb1612b2e565b5b6000612cc084828501612b59565b91505092915050565b60008115159050919050565b612cde81612cc9565b82525050565b6000602082019050612cf96000830184612cd5565b92915050565b612d0881612b38565b82525050565b6000604082019050612d236000830185612cff565b612d306020830184612cff565b9392505050565b6000602082019050612d4c6000830184612cff565b92915050565b600063ffffffff82169050919050565b612d6b81612d52565b82525050565b6000602082019050612d866000830184612d62565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612db782612d8c565b9050919050565b612dc781612dac565b82525050565b6000602082019050612de26000830184612dbe565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e3682612ded565b810181811067ffffffffffffffff82111715612e5557612e54612dfe565b5b80604052505050565b6000612e68612b24565b9050612e748282612e2d565b919050565b600067ffffffffffffffff821115612e9457612e93612dfe565b5b612e9d82612ded565b9050602081019050919050565b82818337600083830152505050565b6000612ecc612ec784612e79565b612e5e565b905082815260208101848484011115612ee857612ee7612de8565b5b612ef3848285612eaa565b509392505050565b600082601f830112612f1057612f0f612b95565b5b8135612f20848260208601612eb9565b91505092915050565b600080600060608486031215612f4257612f41612b2e565b5b6000612f5086828701612b59565b9350506020612f6186828701612b59565b925050604084013567ffffffffffffffff811115612f8257612f81612b33565b5b612f8e86828701612efb565b9150509250925092565b612fa181612dac565b8114612fac57600080fd5b50565b600081359050612fbe81612f98565b92915050565b600060208284031215612fda57612fd9612b2e565b5b6000612fe884828501612faf565b91505092915050565b6000819050919050565b600061301661301161300c84612d8c565b612ff1565b612d8c565b9050919050565b600061302882612ffb565b9050919050565b600061303a8261301d565b9050919050565b61304a8161302f565b82525050565b60006020820190506130656000830184613041565b92915050565b61307481612d52565b811461307f57600080fd5b50565b6000813590506130918161306b565b92915050565b6000602082840312156130ad576130ac612b2e565b5b60006130bb84828501613082565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110613104576131036130c4565b5b50565b6000819050613115826130f3565b919050565b600061312582613107565b9050919050565b6131358161311a565b82525050565b6000602082019050613150600083018461312c565b92915050565b600061316182612dac565b9050919050565b61317181613156565b811461317c57600080fd5b50565b60008135905061318e81613168565b92915050565b6000602082840312156131aa576131a9612b2e565b5b60006131b88482850161317f565b91505092915050565b6000806000606084860312156131da576131d9612b2e565b5b60006131e886828701613082565b93505060206131f986828701612b59565b925050604084013567ffffffffffffffff81111561321a57613219612b33565b5b61322686828701612efb565b9150509250925092565b600060ff82169050919050565b61324681613230565b82525050565b6000602082019050613261600083018461323d565b92915050565b600082825260208201905092915050565b7f6661696c65642073746174650000000000000000000000000000000000000000600082015250565b60006132ae600c83613267565b91506132b982613278565b602082019050919050565b600060208201905081810360008301526132dd816132a1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61331f60408383612eaa565b5050565b600082825260208201905092915050565b60006133408385613323565b935061334d838584612eaa565b61335683612ded565b840190509392505050565b600060a0820190506133766000830189612cff565b6133836020830188613313565b8181036060830152613396818688613334565b905081810360808301526133ab818486613334565b9050979650505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006133ee602083613267565b91506133f9826133b8565b602082019050919050565b6000602082019050818103600083015261341d816133e1565b9050919050565b7f2175706461746572207369670000000000000000000000000000000000000000600082015250565b600061345a600c83613267565b915061346582613424565b602082019050919050565b600060208201905081810360008301526134898161344d565b9050919050565b7f6e6f7420612063757272656e7420757064617465000000000000000000000000600082015250565b60006134c6601483613267565b91506134d182613490565b602082019050919050565b600060208201905081810360008301526134f5816134b9565b9050919050565b600081519050919050565b60005b8381101561352557808201518184015260208101905061350a565b83811115613534576000848401525b50505050565b6000613545826134fc565b61354f8185613323565b935061355f818560208601613507565b61356881612ded565b840191505092915050565b60006060820190506135886000830186612cff565b6135956020830185612cff565b81810360408301526135a7818461353a565b9050949350505050565b7f21757064617465724d616e616765720000000000000000000000000000000000600082015250565b60006135e7600f83613267565b91506135f2826135b1565b602082019050919050565b60006020820190508181036000830152613616816135da565b9050919050565b60006020820190508181036000830152613637818461353a565b905092915050565b60008151905061364e81612f98565b92915050565b60006020828403121561366a57613669612b2e565b5b60006136788482850161363f565b91505092915050565b6000819050919050565b60006136a66136a161369c84613681565b612ff1565b613230565b9050919050565b6136b68161368b565b82525050565b60006020820190506136d160008301846136ad565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613733602683613267565b915061373e826136d7565b604082019050919050565b6000602082019050818103600083015261376281613726565b9050919050565b7f6d736720746f6f206c6f6e670000000000000000000000000000000000000000600082015250565b600061379f600c83613267565b91506137aa82613769565b602082019050919050565b600060208201905081810360008301526137ce81613792565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061380f82612d52565b915061381a83612d52565b92508263ffffffff03821115613833576138326137d5565b5b828201905092915050565b600061384982612af0565b915061385483612af0565b925082821015613867576138666137d5565b5b828203905092915050565b60006040820190506138876000830185612cff565b8181036020830152613899818461353a565b90509392505050565b6000819050919050565b6138bd6138b882612b38565b6138a2565b82525050565b60006138cf82866138ac565b6020820191506138df82856138ac565b6020820191506138ef82846138ac565b602082019150819050949350505050565b600061390b82612d8c565b9050919050565b61391b81613900565b82525050565b60006020820190506139366000830184613912565b92915050565b600061394782612af0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561397a576139796137d5565b5b600182019050919050565b60008160e01b9050919050565b600061399d82613985565b9050919050565b6139b56139b082612d52565b613992565b82525050565b600081905092915050565b7f4e4f4d4144000000000000000000000000000000000000000000000000000000600082015250565b60006139fc6005836139bb565b9150613a07826139c6565b600582019050919050565b6000613a1e82846139a4565b600482019150613a2d826139ef565b915081905092915050565b7f21636f6e747261637420757064617465724d616e616765720000000000000000600082015250565b6000613a6e601883613267565b9150613a7982613a38565b602082019050919050565b60006020820190508181036000830152613a9d81613a61565b9050919050565b6000604082019050613ab96000830185612dbe565b613ac66020830184612dbe565b9392505050565b7f456d707479000000000000000000000000000000000000000000000000000000600082015250565b6000613b03600583613267565b9150613b0e82613acd565b602082019050919050565b60006020820190508181036000830152613b3281613af6565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6000613b6082613b39565b9150613b6b83613b39565b9250826fffffffffffffffffffffffffffffffff03821115613b9057613b8f6137d5565b5b828201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000613bf7602e83613267565b9150613c0282613b9b565b604082019050919050565b60006020820190508181036000830152613c2681613bea565b9050919050565b600081905092915050565b6000613c43826134fc565b613c4d8185613c2d565b9350613c5d818560208601613507565b80840191505092915050565b6000613c7582896139a4565b600482019150613c8582886138ac565b602082019150613c9582876139a4565b600482019150613ca582866139a4565b600482019150613cb582856138ac565b602082019150613cc58284613c38565b9150819050979650505050505050565b60008160011c9050919050565b6000808291508390505b6001851115613d2c57808604811115613d0857613d076137d5565b5b6001851615613d175780820291505b8081029050613d2585613cd5565b9450613cec565b94509492505050565b600082613d455760019050613e01565b81613d535760009050613e01565b8160018114613d695760028114613d7357613da2565b6001915050613e01565b60ff841115613d8557613d846137d5565b5b8360020a915084821115613d9c57613d9b6137d5565b5b50613e01565b5060208310610133831016604e8410600b8410161715613dd75782820a905083811115613dd257613dd16137d5565b5b613e01565b613de48484846001613ce2565b92509050818404811115613dfb57613dfa6137d5565b5b81810290505b9392505050565b6000613e1382612af0565b9150613e1e83612af0565b9250613e4b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613d35565b905092915050565b7f6d65726b6c6520747265652066756c6c00000000000000000000000000000000600082015250565b6000613e89601083613267565b9150613e9482613e53565b602082019050919050565b60006020820190508181036000830152613eb881613e7c565b9050919050565b6000613eca82612af0565b9150613ed583612af0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f0a57613f096137d5565b5b828201905092915050565b6000613f2182856138ac565b602082019150613f3182846138ac565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f7b82612af0565b9150613f8683612af0565b925082613f9657613f95613f41565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000614006601c836139bb565b915061401182613fd0565b601c82019050919050565b600061402782613ff9565b915061403382846138ac565b60208201915081905092915050565b600061404d82613b39565b915061405883613b39565b92508282101561406b5761406a6137d5565b5b828203905092915050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006140d2602b83613267565b91506140dd82614076565b604082019050919050565b60006020820190508181036000830152614101816140c5565b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b600061413e601883613267565b915061414982614108565b602082019050919050565b6000602082019050818103600083015261416d81614131565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b60006141aa601f83613267565b91506141b582614174565b602082019050919050565b600060208201905081810360008301526141d98161419d565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b600061423c602283613267565b9150614247826141e0565b604082019050919050565b6000602082019050818103600083015261426b8161422f565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006142ce602283613267565b91506142d982614272565b604082019050919050565b600060208201905081810360008301526142fd816142c1565b9050919050565b60006080820190506143196000830187612cff565b614326602083018661323d565b6143336040830185612cff565b6143406060830184612cff565b9594505050505056fea164736f6c634300080b000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
