60806040523480156200001157600080fd5b50620000226200002860201b60201c565b620001d3565b600060019054906101000a900460ff16156200007b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000729062000176565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620000ed5760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620000e49190620001b6565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200015e602783620000ef565b91506200016b8262000100565b604082019050919050565b6000602082019050818103600083015262000191816200014f565b9050919050565b600060ff82169050919050565b620001b08162000198565b82525050565b6000602082019050620001cd6000830184620001a5565b92915050565b61502580620001e36000396000f3fe608060405234801561001057600080fd5b50600436106101725760003560e01c8063731133e9116100de578063bd85b03911610097578063e8a3d48511610071578063e8a3d48514610457578063e985e9c514610475578063f242432a146104a5578063f5298aca146104c157610172565b8063bd85b039146103ed578063d53913931461041d578063d547741f1461043b57610172565b8063731133e91461033f5780637f3457101461035b5780638129fc1c1461037957806391d1485414610383578063a217fddf146103b3578063a22cb465146103d157610172565b80632eb2c2d6116101305780632eb2c2d61461026f5780632f2ff15d1461028b57806336568abe146102a75780634e1273f4146102c35780634f558e79146102f35780636b20c4541461032357610172565b8062fdd58e1461017757806301ffc9a7146101a757806302fe5305146101d75780630e89341c146101f35780631f7fdffa14610223578063248a9ca31461023f575b600080fd5b610191600480360381019061018c9190612f74565b6104dd565b60405161019e9190612fc3565b60405180910390f35b6101c160048036038101906101bc9190613036565b6105a6565b6040516101ce919061307e565b60405180910390f35b6101f160048036038101906101ec91906131df565b6105b8565b005b61020d60048036038101906102089190613228565b6105ef565b60405161021a91906132d4565b60405180910390f35b61023d6004803603810190610238919061345f565b610654565b005b61025960048036038101906102549190613550565b610691565b604051610266919061358c565b60405180910390f35b610289600480360381019061028491906135a7565b6106b1565b005b6102a560048036038101906102a09190613676565b610752565b005b6102c160048036038101906102bc9190613676565b610773565b005b6102dd60048036038101906102d89190613779565b6107f6565b6040516102ea91906138af565b60405180910390f35b61030d60048036038101906103089190613228565b61090f565b60405161031a919061307e565b60405180910390f35b61033d600480360381019061033891906138d1565b610923565b005b6103596004803603810190610354919061395c565b6109c0565b005b6103636109fd565b604051610370919061358c565b60405180910390f35b610381610a21565b005b61039d60048036038101906103989190613676565b610bf1565b6040516103aa919061307e565b60405180910390f35b6103bb610c5c565b6040516103c8919061358c565b60405180910390f35b6103eb60048036038101906103e69190613a0b565b610c63565b005b61040760048036038101906104029190613228565b610c79565b6040516104149190612fc3565b60405180910390f35b610425610c96565b604051610432919061358c565b60405180910390f35b61045560048036038101906104509190613676565b610cba565b005b61045f610cdb565b60405161046c91906132d4565b60405180910390f35b61048f600480360381019061048a9190613a4b565b610cfb565b60405161049c919061307e565b60405180910390f35b6104bf60048036038101906104ba9190613a8b565b610d8f565b005b6104db60048036038101906104d69190613b22565b610e30565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361054d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054490613be7565b60405180910390fd5b6065600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006105b182610ecd565b9050919050565b7f7804d923f43a17d325d77e781528e0793b2edd9890ab45fc64efd7b4b427744c6105e281610f47565b6105eb82610f5b565b5050565b60606000820361062157606760405160200161060b9190613d56565b604051602081830303815290604052905061064f565b606761062c83610f6e565b60405160200161063d929190613df5565b60405160208183030381529060405290505b919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661067e81610f47565b61068a858585856110ce565b5050505050565b600060976000838152602001908152602001600020600101549050919050565b6106b96112fb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806106ff57506106fe856106f96112fb565b610cfb565b5b61073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073590613e96565b60405180910390fd5b61074b8585858585611303565b5050505050565b61075b82610691565b61076481610f47565b61076e8383611627565b505050565b61077b6112fb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df90613f28565b60405180910390fd5b6107f28282611708565b5050565b6060815183511461083c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083390613fba565b60405180910390fd5b6000835167ffffffffffffffff811115610859576108586130b4565b5b6040519080825280602002602001820160405280156108875781602001602082028036833780820191505090505b50905060005b8451811015610904576108d48582815181106108ac576108ab613fda565b5b60200260200101518583815181106108c7576108c6613fda565b5b60200260200101516104dd565b8282815181106108e7576108e6613fda565b5b602002602001018181525050806108fd90614038565b905061088d565b508091505092915050565b60008061091b83610c79565b119050919050565b61092b6112fb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061097157506109708361096b6112fb565b610cfb565b5b6109b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a790613e96565b60405180910390fd5b6109bb8383836117ea565b505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66109ea81610f47565b6109f685858585611aba565b5050505050565b7f7804d923f43a17d325d77e781528e0793b2edd9890ab45fc64efd7b4b427744c81565b60008060019054906101000a900460ff16159050808015610a525750600160008054906101000a900460ff1660ff16105b80610a7f5750610a6130611c6b565b158015610a7e5750600160008054906101000a900460ff1660ff16145b5b610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab5906140f2565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610afb576001600060016101000a81548160ff0219169083151502179055505b610b1c6040518060800160405280604e8152602001614fa2604e9139611c8e565b610b24611ce9565b610b2c611d3a565b610b34611d8b565b610b416000801b33611627565b610b6b7f7804d923f43a17d325d77e781528e0793b2edd9890ab45fc64efd7b4b427744c33611627565b610b957f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633611627565b8015610bee5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610be59190614164565b60405180910390a15b50565b60006097600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b81565b610c75610c6e6112fb565b8383611ddc565b5050565b600060fb6000838152602001908152602001600020549050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610cc382610691565b610ccc81610f47565b610cd68383611708565b505050565b6060604051806080016040528060548152602001614f4e60549139905090565b6000606660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610d976112fb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610ddd5750610ddc85610dd76112fb565b610cfb565b5b610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1390613e96565b60405180910390fd5b610e298585858585611f48565b5050505050565b610e386112fb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610e7e5750610e7d83610e786112fb565b610cfb565b5b610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb490613e96565b60405180910390fd5b610ec88383836121e6565b505050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f405750610f3f8261242e565b5b9050919050565b610f5881610f536112fb565b612510565b50565b8060679081610f6a919061430c565b5050565b606060008203610fb5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506110c9565b600082905060005b60008214610fe7578080610fd090614038565b915050600a82610fe0919061440d565b9150610fbd565b60008167ffffffffffffffff811115611003576110026130b4565b5b6040519080825280601f01601f1916602001820160405280156110355781602001600182028036833780820191505090505b5090505b600085146110c25760018261104e919061443e565b9150600a8561105d9190614472565b603061106991906144a3565b60f81b81838151811061107f5761107e613fda565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856110bb919061440d565b9450611039565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490614549565b60405180910390fd5b8151835114611181576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611178906145db565b60405180910390fd5b600061118b6112fb565b905061119c816000878787876125ad565b60005b8451811015611256578381815181106111bb576111ba613fda565b5b6020026020010151606560008784815181106111da576111d9613fda565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461123c91906144a3565b92505081905550808061124e90614038565b91505061119f565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112ce9291906145fb565b60405180910390a46112e5816000878787876125c3565b6112f4816000878787876125cb565b5050505050565b600033905090565b8151835114611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133e906145db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad906146a4565b60405180910390fd5b60006113c06112fb565b90506113d08187878787876125ad565b60005b84518110156115845760008582815181106113f1576113f0613fda565b5b6020026020010151905060008583815181106114105761140f613fda565b5b6020026020010151905060006065600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990614736565b60405180910390fd5b8181036065600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816065600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461156991906144a3565b925050819055505050508061157d90614038565b90506113d3565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516115fb9291906145fb565b60405180910390a46116118187878787876125c3565b61161f8187878787876125cb565b505050505050565b6116318282610bf1565b6117045760016097600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506116a96112fb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6117128282610bf1565b156117e65760006097600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061178b6112fb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611859576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611850906147c8565b60405180910390fd5b805182511461189d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611894906145db565b60405180910390fd5b60006118a76112fb565b90506118c7818560008686604051806020016040528060008152506125ad565b60005b8351811015611a165760008482815181106118e8576118e7613fda565b5b60200260200101519050600084838151811061190757611906613fda565b5b6020026020010151905060006065600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a09061485a565b60405180910390fd5b8181036065600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611a0e90614038565b9150506118ca565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611a8e9291906145fb565b60405180910390a4611ab4818560008686604051806020016040528060008152506125c3565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090614549565b60405180910390fd5b6000611b336112fb565b90506000611b40856127a2565b90506000611b4d856127a2565b9050611b5e836000898585896125ad565b846065600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bbe91906144a3565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611c3c92919061487a565b60405180910390a4611c53836000898585896125c3565b611c628360008989898961281c565b50505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd490614915565b60405180910390fd5b611ce6816129f3565b50565b600060019054906101000a900460ff16611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90614915565b60405180910390fd5b565b600060019054906101000a900460ff16611d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8090614915565b60405180910390fd5b565b600060019054906101000a900460ff16611dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd190614915565b60405180910390fd5b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e41906149a7565b60405180910390fd5b80606660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f3b919061307e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fae906146a4565b60405180910390fd5b6000611fc16112fb565b90506000611fce856127a2565b90506000611fdb856127a2565b9050611feb8389898585896125ad565b60006065600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207a90614736565b60405180910390fd5b8581036065600089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856065600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213a91906144a3565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516121b792919061487a565b60405180910390a46121cd848a8a86868a6125c3565b6121db848a8a8a8a8a61281c565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224c906147c8565b60405180910390fd5b600061225f6112fb565b9050600061226c846127a2565b90506000612279846127a2565b9050612299838760008585604051806020016040528060008152506125ad565b60006065600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015612331576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123289061485a565b60405180910390fd5b8481036065600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516123ff92919061487a565b60405180910390a4612425848860008686604051806020016040528060008152506125c3565b50505050505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124f957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612509575061250882612a4e565b5b9050919050565b61251a8282610bf1565b6125a95761253f8173ffffffffffffffffffffffffffffffffffffffff166014612ab8565b61254d8360001c6020612ab8565b60405160200161255e929190614a5f565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a091906132d4565b60405180910390fd5b5050565b6125bb868686868686612cf4565b505050505050565b505050505050565b6125ea8473ffffffffffffffffffffffffffffffffffffffff16611c6b565b1561279a578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612630959493929190614afd565b6020604051808303816000875af192505050801561266c57506040513d601f19601f820116820180604052508101906126699190614b7a565b60015b61271157612678614bb4565b806308c379a0036126d4575061268c614bd6565b8061269757506126d6565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cb91906132d4565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270890614cd8565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278f90614d6a565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156127c1576127c06130b4565b5b6040519080825280602002602001820160405280156127ef5781602001602082028036833780820191505090505b509050828160008151811061280757612806613fda565b5b60200260200101818152505080915050919050565b61283b8473ffffffffffffffffffffffffffffffffffffffff16611c6b565b156129eb578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612881959493929190614d8a565b6020604051808303816000875af19250505080156128bd57506040513d601f19601f820116820180604052508101906128ba9190614b7a565b60015b612962576128c9614bb4565b806308c379a00361292557506128dd614bd6565b806128e85750612927565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291c91906132d4565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295990614cd8565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146129e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e090614d6a565b60405180910390fd5b505b505050505050565b600060019054906101000a900460ff16612a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3990614915565b60405180910390fd5b612a4b81610f5b565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060006002836002612acb9190614de4565b612ad591906144a3565b67ffffffffffffffff811115612aee57612aed6130b4565b5b6040519080825280601f01601f191660200182016040528015612b205781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612b5857612b57613fda565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612bbc57612bbb613fda565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612bfc9190614de4565b612c0691906144a3565b90505b6001811115612ca6577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612c4857612c47613fda565b5b1a60f81b828281518110612c5f57612c5e613fda565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612c9f90614e26565b9050612c09565b5060008414612cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce190614e9b565b60405180910390fd5b8091505092915050565b612d02868686868686612ec4565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612db35760005b8351811015612db157828181518110612d5557612d54613fda565b5b602002602001015160fb6000868481518110612d7457612d73613fda565b5b602002602001015181526020019081526020016000206000828254612d9991906144a3565b9250508190555080612daa90614038565b9050612d39565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612ebc5760005b8351811015612eba576000848281518110612e0857612e07613fda565b5b602002602001015190506000848381518110612e2757612e26613fda565b5b60200260200101519050600060fb600084815260200190815260200160002054905081811015612e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8390614f2d565b60405180910390fd5b81810360fb60008581526020019081526020016000208190555050505080612eb390614038565b9050612dea565b505b505050505050565b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f0b82612ee0565b9050919050565b612f1b81612f00565b8114612f2657600080fd5b50565b600081359050612f3881612f12565b92915050565b6000819050919050565b612f5181612f3e565b8114612f5c57600080fd5b50565b600081359050612f6e81612f48565b92915050565b60008060408385031215612f8b57612f8a612ed6565b5b6000612f9985828601612f29565b9250506020612faa85828601612f5f565b9150509250929050565b612fbd81612f3e565b82525050565b6000602082019050612fd86000830184612fb4565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61301381612fde565b811461301e57600080fd5b50565b6000813590506130308161300a565b92915050565b60006020828403121561304c5761304b612ed6565b5b600061305a84828501613021565b91505092915050565b60008115159050919050565b61307881613063565b82525050565b6000602082019050613093600083018461306f565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6130ec826130a3565b810181811067ffffffffffffffff8211171561310b5761310a6130b4565b5b80604052505050565b600061311e612ecc565b905061312a82826130e3565b919050565b600067ffffffffffffffff82111561314a576131496130b4565b5b613153826130a3565b9050602081019050919050565b82818337600083830152505050565b600061318261317d8461312f565b613114565b90508281526020810184848401111561319e5761319d61309e565b5b6131a9848285613160565b509392505050565b600082601f8301126131c6576131c5613099565b5b81356131d684826020860161316f565b91505092915050565b6000602082840312156131f5576131f4612ed6565b5b600082013567ffffffffffffffff81111561321357613212612edb565b5b61321f848285016131b1565b91505092915050565b60006020828403121561323e5761323d612ed6565b5b600061324c84828501612f5f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561328f578082015181840152602081019050613274565b60008484015250505050565b60006132a682613255565b6132b08185613260565b93506132c0818560208601613271565b6132c9816130a3565b840191505092915050565b600060208201905081810360008301526132ee818461329b565b905092915050565b600067ffffffffffffffff821115613311576133106130b4565b5b602082029050602081019050919050565b600080fd5b600061333a613335846132f6565b613114565b9050808382526020820190506020840283018581111561335d5761335c613322565b5b835b8181101561338657806133728882612f5f565b84526020840193505060208101905061335f565b5050509392505050565b600082601f8301126133a5576133a4613099565b5b81356133b5848260208601613327565b91505092915050565b600067ffffffffffffffff8211156133d9576133d86130b4565b5b6133e2826130a3565b9050602081019050919050565b60006134026133fd846133be565b613114565b90508281526020810184848401111561341e5761341d61309e565b5b613429848285613160565b509392505050565b600082601f83011261344657613445613099565b5b81356134568482602086016133ef565b91505092915050565b6000806000806080858703121561347957613478612ed6565b5b600061348787828801612f29565b945050602085013567ffffffffffffffff8111156134a8576134a7612edb565b5b6134b487828801613390565b935050604085013567ffffffffffffffff8111156134d5576134d4612edb565b5b6134e187828801613390565b925050606085013567ffffffffffffffff81111561350257613501612edb565b5b61350e87828801613431565b91505092959194509250565b6000819050919050565b61352d8161351a565b811461353857600080fd5b50565b60008135905061354a81613524565b92915050565b60006020828403121561356657613565612ed6565b5b60006135748482850161353b565b91505092915050565b6135868161351a565b82525050565b60006020820190506135a1600083018461357d565b92915050565b600080600080600060a086880312156135c3576135c2612ed6565b5b60006135d188828901612f29565b95505060206135e288828901612f29565b945050604086013567ffffffffffffffff81111561360357613602612edb565b5b61360f88828901613390565b935050606086013567ffffffffffffffff8111156136305761362f612edb565b5b61363c88828901613390565b925050608086013567ffffffffffffffff81111561365d5761365c612edb565b5b61366988828901613431565b9150509295509295909350565b6000806040838503121561368d5761368c612ed6565b5b600061369b8582860161353b565b92505060206136ac85828601612f29565b9150509250929050565b600067ffffffffffffffff8211156136d1576136d06130b4565b5b602082029050602081019050919050565b60006136f56136f0846136b6565b613114565b9050808382526020820190506020840283018581111561371857613717613322565b5b835b81811015613741578061372d8882612f29565b84526020840193505060208101905061371a565b5050509392505050565b600082601f8301126137605761375f613099565b5b81356137708482602086016136e2565b91505092915050565b600080604083850312156137905761378f612ed6565b5b600083013567ffffffffffffffff8111156137ae576137ad612edb565b5b6137ba8582860161374b565b925050602083013567ffffffffffffffff8111156137db576137da612edb565b5b6137e785828601613390565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61382681612f3e565b82525050565b6000613838838361381d565b60208301905092915050565b6000602082019050919050565b600061385c826137f1565b61386681856137fc565b93506138718361380d565b8060005b838110156138a2578151613889888261382c565b975061389483613844565b925050600181019050613875565b5085935050505092915050565b600060208201905081810360008301526138c98184613851565b905092915050565b6000806000606084860312156138ea576138e9612ed6565b5b60006138f886828701612f29565b935050602084013567ffffffffffffffff81111561391957613918612edb565b5b61392586828701613390565b925050604084013567ffffffffffffffff81111561394657613945612edb565b5b61395286828701613390565b9150509250925092565b6000806000806080858703121561397657613975612ed6565b5b600061398487828801612f29565b945050602061399587828801612f5f565b93505060406139a687828801612f5f565b925050606085013567ffffffffffffffff8111156139c7576139c6612edb565b5b6139d387828801613431565b91505092959194509250565b6139e881613063565b81146139f357600080fd5b50565b600081359050613a05816139df565b92915050565b60008060408385031215613a2257613a21612ed6565b5b6000613a3085828601612f29565b9250506020613a41858286016139f6565b9150509250929050565b60008060408385031215613a6257613a61612ed6565b5b6000613a7085828601612f29565b9250506020613a8185828601612f29565b9150509250929050565b600080600080600060a08688031215613aa757613aa6612ed6565b5b6000613ab588828901612f29565b9550506020613ac688828901612f29565b9450506040613ad788828901612f5f565b9350506060613ae888828901612f5f565b925050608086013567ffffffffffffffff811115613b0957613b08612edb565b5b613b1588828901613431565b9150509295509295909350565b600080600060608486031215613b3b57613b3a612ed6565b5b6000613b4986828701612f29565b9350506020613b5a86828701612f5f565b9250506040613b6b86828701612f5f565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000613bd1602a83613260565b9150613bdc82613b75565b604082019050919050565b60006020820190508181036000830152613c0081613bc4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c4e57607f821691505b602082108103613c6157613c60613c07565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154613c9481613c36565b613c9e8186613c67565b94506001821660008114613cb95760018114613cce57613d01565b60ff1983168652811515820286019350613d01565b613cd785613c72565b60005b83811015613cf957815481890152600182019150602081019050613cda565b838801955050505b50505092915050565b7f302e6a736f6e0000000000000000000000000000000000000000000000000000600082015250565b6000613d40600683613c67565b9150613d4b82613d0a565b600682019050919050565b6000613d628284613c87565b9150613d6d82613d33565b915081905092915050565b6000613d8382613255565b613d8d8185613c67565b9350613d9d818560208601613271565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613ddf600583613c67565b9150613dea82613da9565b600582019050919050565b6000613e018285613c87565b9150613e0d8284613d78565b9150613e1882613dd2565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b6000613e80602f83613260565b9150613e8b82613e24565b604082019050919050565b60006020820190508181036000830152613eaf81613e73565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000613f12602f83613260565b9150613f1d82613eb6565b604082019050919050565b60006020820190508181036000830152613f4181613f05565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613fa4602983613260565b9150613faf82613f48565b604082019050919050565b60006020820190508181036000830152613fd381613f97565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061404382612f3e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361407557614074614009565b5b600182019050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006140dc602e83613260565b91506140e782614080565b604082019050919050565b6000602082019050818103600083015261410b816140cf565b9050919050565b6000819050919050565b600060ff82169050919050565b6000819050919050565b600061414e61414961414484614112565b614129565b61411c565b9050919050565b61415e81614133565b82525050565b60006020820190506141796000830184614155565b92915050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026141cc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261418f565b6141d6868361418f565b95508019841693508086168417925050509392505050565b60006142096142046141ff84612f3e565b614129565b612f3e565b9050919050565b6000819050919050565b614223836141ee565b61423761422f82614210565b84845461419c565b825550505050565b600090565b61424c61423f565b61425781848461421a565b505050565b5b8181101561427b57614270600082614244565b60018101905061425d565b5050565b601f8211156142c05761429181613c72565b61429a8461417f565b810160208510156142a9578190505b6142bd6142b58561417f565b83018261425c565b50505b505050565b600082821c905092915050565b60006142e3600019846008026142c5565b1980831691505092915050565b60006142fc83836142d2565b9150826002028217905092915050565b61431582613255565b67ffffffffffffffff81111561432e5761432d6130b4565b5b6143388254613c36565b61434382828561427f565b600060209050601f8311600181146143765760008415614364578287015190505b61436e85826142f0565b8655506143d6565b601f19841661438486613c72565b60005b828110156143ac57848901518255600182019150602085019450602081019050614387565b868310156143c957848901516143c5601f8916826142d2565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061441882612f3e565b915061442383612f3e565b925082614433576144326143de565b5b828204905092915050565b600061444982612f3e565b915061445483612f3e565b925082820390508181111561446c5761446b614009565b5b92915050565b600061447d82612f3e565b915061448883612f3e565b925082614498576144976143de565b5b828206905092915050565b60006144ae82612f3e565b91506144b983612f3e565b92508282019050808211156144d1576144d0614009565b5b92915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614533602183613260565b915061453e826144d7565b604082019050919050565b6000602082019050818103600083015261456281614526565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006145c5602883613260565b91506145d082614569565b604082019050919050565b600060208201905081810360008301526145f4816145b8565b9050919050565b600060408201905081810360008301526146158185613851565b905081810360208301526146298184613851565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061468e602583613260565b915061469982614632565b604082019050919050565b600060208201905081810360008301526146bd81614681565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614720602a83613260565b915061472b826146c4565b604082019050919050565b6000602082019050818103600083015261474f81614713565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147b2602383613260565b91506147bd82614756565b604082019050919050565b600060208201905081810360008301526147e1816147a5565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614844602483613260565b915061484f826147e8565b604082019050919050565b6000602082019050818103600083015261487381614837565b9050919050565b600060408201905061488f6000830185612fb4565b61489c6020830184612fb4565b9392505050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006148ff602b83613260565b915061490a826148a3565b604082019050919050565b6000602082019050818103600083015261492e816148f2565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614991602983613260565b915061499c82614935565b604082019050919050565b600060208201905081810360008301526149c081614984565b9050919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006149fd601783613c67565b9150614a08826149c7565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614a49601183613c67565b9150614a5482614a13565b601182019050919050565b6000614a6a826149f0565b9150614a768285613d78565b9150614a8182614a3c565b9150614a8d8284613d78565b91508190509392505050565b614aa281612f00565b82525050565b600081519050919050565b600082825260208201905092915050565b6000614acf82614aa8565b614ad98185614ab3565b9350614ae9818560208601613271565b614af2816130a3565b840191505092915050565b600060a082019050614b126000830188614a99565b614b1f6020830187614a99565b8181036040830152614b318186613851565b90508181036060830152614b458185613851565b90508181036080830152614b598184614ac4565b90509695505050505050565b600081519050614b748161300a565b92915050565b600060208284031215614b9057614b8f612ed6565b5b6000614b9e84828501614b65565b91505092915050565b60008160e01c9050919050565b600060033d1115614bd35760046000803e614bd0600051614ba7565b90505b90565b600060443d10614c6357614be8612ecc565b60043d036004823e80513d602482011167ffffffffffffffff82111715614c10575050614c63565b808201805167ffffffffffffffff811115614c2e5750505050614c63565b80602083010160043d038501811115614c4b575050505050614c63565b614c5a826020018501866130e3565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614cc2603483613260565b9150614ccd82614c66565b604082019050919050565b60006020820190508181036000830152614cf181614cb5565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614d54602883613260565b9150614d5f82614cf8565b604082019050919050565b60006020820190508181036000830152614d8381614d47565b9050919050565b600060a082019050614d9f6000830188614a99565b614dac6020830187614a99565b614db96040830186612fb4565b614dc66060830185612fb4565b8181036080830152614dd88184614ac4565b90509695505050505050565b6000614def82612f3e565b9150614dfa83612f3e565b9250828202614e0881612f3e565b91508282048414831517614e1f57614e1e614009565b5b5092915050565b6000614e3182612f3e565b915060008203614e4457614e43614009565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000614e85602083613260565b9150614e9082614e4f565b602082019050919050565b60006020820190508181036000830152614eb481614e78565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000614f17602883613260565b9150614f2282614ebb565b604082019050919050565b60006020820190508181036000830152614f4681614f0a565b905091905056fe68747470733a2f2f64782e6d7970696e6174612e636c6f75642f697066732f516d567862357871764c76755676326f615946544e4c5141353767743379787575733368763362626f42687869482f302e6a736f6e68747470733a2f2f64782e6d7970696e6174612e636c6f75642f697066732f516d567862357871764c76755676326f615946544e4c5141353767743379787575733368763362626f42687869482fa2646970667358221220624c1f8ff97c067e9f67ad667eaed4b101aa3d72e0f81ab35259027b55d0cde564736f6c63430008110033