60806040526040518060600160405280603881526020016200590c60389139600790816200002e9190620005c8565b503480156200003c57600080fd5b506040516200594438038062005944833981810160405281019062000062919062000762565b604051806020016040528060008152506200008381620000be60201b60201c565b50620000a462000098620000d360201b60201c565b620000db60201b60201c565b620000b68282620001a160201b60201c565b5050620008c4565b8060029081620000cf9190620005c8565b5050565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001b16200034460201b60201c565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111562000212576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002099062000830565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000284576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027b90620008a2565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600460008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6000612710905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003d057607f821691505b602082108103620003e657620003e562000388565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000411565b6200045c868362000411565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004a9620004a36200049d8462000474565b6200047e565b62000474565b9050919050565b6000819050919050565b620004c58362000488565b620004dd620004d482620004b0565b8484546200041e565b825550505050565b600090565b620004f4620004e5565b62000501818484620004ba565b505050565b5b8181101562000529576200051d600082620004ea565b60018101905062000507565b5050565b601f82111562000578576200054281620003ec565b6200054d8462000401565b810160208510156200055d578190505b620005756200056c8562000401565b83018262000506565b50505b505050565b600082821c905092915050565b60006200059d600019846008026200057d565b1980831691505092915050565b6000620005b883836200058a565b9150826002028217905092915050565b620005d3826200034e565b67ffffffffffffffff811115620005ef57620005ee62000359565b5b620005fb8254620003b7565b620006088282856200052d565b600060209050601f8311600181146200064057600084156200062b578287015190505b620006378582620005aa565b865550620006a7565b601f1984166200065086620003ec565b60005b828110156200067a5784890151825560018201915060208501945060208101905062000653565b868310156200069a578489015162000696601f8916826200058a565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006e182620006b4565b9050919050565b620006f381620006d4565b8114620006ff57600080fd5b50565b6000815190506200071381620006e8565b92915050565b60006bffffffffffffffffffffffff82169050919050565b6200073c8162000719565b81146200074857600080fd5b50565b6000815190506200075c8162000731565b92915050565b600080604083850312156200077c576200077b620006af565b5b60006200078c8582860162000702565b92505060206200079f858286016200074b565b9150509250929050565b600082825260208201905092915050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b600062000818602a83620007a9565b91506200082582620007ba565b604082019050919050565b600060208201905081810360008301526200084b8162000809565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b60006200088a601983620007a9565b9150620008978262000852565b602082019050919050565b60006020820190508181036000830152620008bd816200087b565b9050919050565b61503880620008d46000396000f3fe6080604052600436106101805760003560e01c80636b20c454116100d1578063bd85b0391161008a578063e985e9c511610064578063e985e9c5146105a9578063f242432a146105e6578063f2fde38b1461060f578063f5298aca1461063857610180565b8063bd85b03914610516578063dbddb26a14610553578063e8a3d4851461057e57610180565b80636b20c45414610415578063715018a61461043e5780637e983045146104555780638da5cb5b14610492578063a22cb465146104bd578063ac9650d8146104e657610180565b80632eb2c2d61161013e5780634f558e79116101185780634f558e791461035b57806355f804b3146103985780635944c753146103c157806364679356146103ea57610180565b80632eb2c2d6146102cc5780633cebb823146102f55780634e1273f41461031e57610180565b8062fdd58e1461018557806301ffc9a7146101c257806304634d8d146101ff5780630e89341c14610228578063156e29f6146102655780632a55205a1461028e575b600080fd5b34801561019157600080fd5b506101ac60048036038101906101a79190612e1f565b610661565b6040516101b99190612e6e565b60405180910390f35b3480156101ce57600080fd5b506101e960048036038101906101e49190612ee1565b610729565b6040516101f69190612f29565b60405180910390f35b34801561020b57600080fd5b5061022660048036038101906102219190612f88565b61073b565b005b34801561023457600080fd5b5061024f600480360381019061024a9190612fc8565b610751565b60405161025c9190613085565b60405180910390f35b34801561027157600080fd5b5061028c600480360381019061028791906130a7565b61077b565b005b34801561029a57600080fd5b506102b560048036038101906102b091906130fa565b6108c2565b6040516102c3929190613149565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee919061336f565b610aac565b005b34801561030157600080fd5b5061031c6004803603810190610317919061343e565b610b4d565b005b34801561032a57600080fd5b506103456004803603810190610340919061352e565b610b99565b6040516103529190613664565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d9190612fc8565b610cb2565b60405161038f9190612f29565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190613727565b610cc6565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190613770565b610ce1565b005b3480156103f657600080fd5b506103ff610cf9565b60405161040c91906137c3565b60405180910390f35b34801561042157600080fd5b5061043c600480360381019061043791906137de565b610d1f565b005b34801561044a57600080fd5b50610453610dbc565b005b34801561046157600080fd5b5061047c60048036038101906104779190612fc8565b610dd0565b6040516104899190612f29565b60405180910390f35b34801561049e57600080fd5b506104a7610df0565b6040516104b491906137c3565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613895565b610e1a565b005b61050060048036038101906104fb9190613930565b610e30565b60405161050d9190613a94565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190612fc8565b610fca565b60405161054a9190612e6e565b60405180910390f35b34801561055f57600080fd5b50610568610fe7565b6040516105759190613085565b60405180910390f35b34801561058a57600080fd5b50610593611075565b6040516105a09190613085565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190613ab6565b61109d565b6040516105dd9190612f29565b60405180910390f35b3480156105f257600080fd5b5061060d60048036038101906106089190613af6565b611131565b005b34801561061b57600080fd5b506106366004803603810190610631919061343e565b6111d2565b005b34801561064457600080fd5b5061065f600480360381019061065a91906130a7565b611255565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c890613bff565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610734826112f2565b9050919050565b61074361136c565b61074d82826113ea565b5050565b606060076040516020016107659190613d6e565b6040516020818303038152906040529050919050565b61078361157f565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080990613e02565b60405180910390fd5b806009600082815260200190815260200160002060009054906101000a900460ff1615610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086b90613e6e565b60405180910390fd5b60016009600084815260200190815260200160002060006101000a81548160ff0219169083151502179055506108bc8484600160405180602001604052806000815250611587565b50505050565b6000806000600560008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610a575760046040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610a61611737565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610a8d9190613ebd565b610a979190613f2e565b90508160000151819350935050509250929050565b610ab461157f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610afa5750610af985610af461157f565b61109d565b5b610b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3090613fd1565b60405180910390fd5b610b468585858585611741565b5050505050565b610b5561136c565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60608151835114610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690614063565b60405180910390fd5b6000835167ffffffffffffffff811115610bfc57610bfb613177565b5b604051908082528060200260200182016040528015610c2a5781602001602082028036833780820191505090505b50905060005b8451811015610ca757610c77858281518110610c4f57610c4e614083565b5b6020026020010151858381518110610c6a57610c69614083565b5b6020026020010151610661565b828281518110610c8a57610c89614083565b5b60200260200101818152505080610ca0906140b2565b9050610c30565b508091505092915050565b600080610cbe83610fca565b119050919050565b610cce61136c565b8060079081610cdd9190614291565b5050565b610ce961136c565b610cf4838383611a62565b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d2761157f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610d6d5750610d6c83610d6761157f565b61109d565b5b610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da390613fd1565b60405180910390fd5b610db7838383611c09565b505050565b610dc461136c565b610dce6000611ed7565b565b60096020528060005260406000206000915054906101000a900460ff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e2c610e2561157f565b8383611f9d565b5050565b60608282905067ffffffffffffffff811115610e4f57610e4e613177565b5b604051908082528060200260200182016040528015610e8257816020015b6060815260200190600190039081610e6d5790505b50905060005b83839050811015610fc3576000803073ffffffffffffffffffffffffffffffffffffffff16868685818110610ec057610ebf614083565b5b9050602002810190610ed29190614372565b604051610ee0929190614405565b600060405180830381855af49150503d8060008114610f1b576040519150601f19603f3d011682016040523d82523d6000602084013e610f20565b606091505b509150915081610f8f57604481511015610f3957600080fd5b60048101905080806020019051810190610f53919061448e565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f869190613085565b60405180910390fd5b80848481518110610fa357610fa2614083565b5b602002602001018190525050508080610fbb906140b2565b915050610e88565b5092915050565b600060036000838152602001908152602001600020549050919050565b60078054610ff490613c4e565b80601f016020809104026020016040519081016040528092919081815260200182805461102090613c4e565b801561106d5780601f106110425761010080835404028352916020019161106d565b820191906000526020600020905b81548152906001019060200180831161105057829003601f168201915b505050505081565b606060076040516020016110899190614523565b604051602081830303815290604052905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61113961157f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061117f575061117e8561117961157f565b61109d565b5b6111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b590613fd1565b60405180910390fd5b6111cb8585858585612109565b5050505050565b6111da61136c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611249576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611240906145b7565b60405180910390fd5b61125281611ed7565b50565b61125d61157f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806112a357506112a28361129d61157f565b61109d565b5b6112e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d990613fd1565b60405180910390fd5b6112ed8383836123a4565b505050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806113655750611364826125ea565b5b9050919050565b61137461157f565b73ffffffffffffffffffffffffffffffffffffffff16611392610df0565b73ffffffffffffffffffffffffffffffffffffffff16146113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df90614623565b60405180910390fd5b565b6113f2611737565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115611450576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611447906146b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b690614721565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600460008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed906147b3565b60405180910390fd5b600061160061157f565b9050600061160d856126cc565b9050600061161a856126cc565b905061162b83600089858589612746565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461168a91906147d3565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611708929190614807565b60405180910390a461171f8360008985858961275c565b61172e83600089898989612764565b50505050505050565b6000612710905090565b8151835114611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c906148a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb90614934565b60405180910390fd5b60006117fe61157f565b905061180e818787878787612746565b60005b84518110156119bf57600085828151811061182f5761182e614083565b5b60200260200101519050600085838151811061184e5761184d614083565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e6906149c6565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119a491906147d3565b92505081905550505050806119b8906140b2565b9050611811565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a369291906149e6565b60405180910390a4611a4c81878787878761275c565b611a5a81878787878761293b565b505050505050565b611a6a611737565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf906146b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e90614a69565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff168152506005600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f90614afb565b60405180910390fd5b8051825114611cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb3906148a2565b60405180910390fd5b6000611cc661157f565b9050611ce681856000868660405180602001604052806000815250612746565b60005b8351811015611e33576000848281518110611d0757611d06614083565b5b602002602001015190506000848381518110611d2657611d25614083565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614b8d565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611e2b906140b2565b915050611ce9565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611eab9291906149e6565b60405180910390a4611ed18185600086866040518060200160405280600081525061275c565b50505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200290614c1f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120fc9190612f29565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216f90614934565b60405180910390fd5b600061218261157f565b9050600061218f856126cc565b9050600061219c856126cc565b90506121ac838989858589612746565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a906149c6565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122f891906147d3565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612375929190614807565b60405180910390a461238b848a8a86868a61275c565b612399848a8a8a8a8a612764565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240a90614afb565b60405180910390fd5b600061241d61157f565b9050600061242a846126cc565b90506000612437846126cc565b905061245783876000858560405180602001604052806000815250612746565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156124ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e590614b8d565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516125bb929190614807565b60405180910390a46125e18488600086866040518060200160405280600081525061275c565b50505050505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126b557507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806126c557506126c482612b12565b5b9050919050565b60606000600167ffffffffffffffff8111156126eb576126ea613177565b5b6040519080825280602002602001820160405280156127195781602001602082028036833780820191505090505b509050828160008151811061273157612730614083565b5b60200260200101818152505080915050919050565b612754868686868686612b7c565b505050505050565b505050505050565b6127838473ffffffffffffffffffffffffffffffffffffffff16612d4c565b15612933578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016127c9959493929190614c89565b6020604051808303816000875af192505050801561280557506040513d601f19601f820116820180604052508101906128029190614cf8565b60015b6128aa57612811614d32565b806308c379a00361286d5750612825614d54565b80612830575061286f565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128649190613085565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a190614e56565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292890614ee8565b60405180910390fd5b505b505050505050565b61295a8473ffffffffffffffffffffffffffffffffffffffff16612d4c565b15612b0a578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016129a0959493929190614f08565b6020604051808303816000875af19250505080156129dc57506040513d601f19601f820116820180604052508101906129d99190614cf8565b60015b612a81576129e8614d32565b806308c379a003612a4457506129fc614d54565b80612a075750612a46565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b9190613085565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7890614e56565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aff90614ee8565b60405180910390fd5b505b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612b8a868686868686612d6f565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612c3b5760005b8351811015612c3957828181518110612bdd57612bdc614083565b5b602002602001015160036000868481518110612bfc57612bfb614083565b5b602002602001015181526020019081526020016000206000828254612c2191906147d3565b9250508190555080612c32906140b2565b9050612bc1565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612d445760005b8351811015612d42576000848281518110612c9057612c8f614083565b5b602002602001015190506000848381518110612caf57612cae614083565b5b6020026020010151905060006003600084815260200190815260200160002054905081811015612d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0b90614fe2565b60405180910390fd5b818103600360008581526020019081526020016000208190555050505080612d3b906140b2565b9050612c72565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612db682612d8b565b9050919050565b612dc681612dab565b8114612dd157600080fd5b50565b600081359050612de381612dbd565b92915050565b6000819050919050565b612dfc81612de9565b8114612e0757600080fd5b50565b600081359050612e1981612df3565b92915050565b60008060408385031215612e3657612e35612d81565b5b6000612e4485828601612dd4565b9250506020612e5585828601612e0a565b9150509250929050565b612e6881612de9565b82525050565b6000602082019050612e836000830184612e5f565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ebe81612e89565b8114612ec957600080fd5b50565b600081359050612edb81612eb5565b92915050565b600060208284031215612ef757612ef6612d81565b5b6000612f0584828501612ecc565b91505092915050565b60008115159050919050565b612f2381612f0e565b82525050565b6000602082019050612f3e6000830184612f1a565b92915050565b60006bffffffffffffffffffffffff82169050919050565b612f6581612f44565b8114612f7057600080fd5b50565b600081359050612f8281612f5c565b92915050565b60008060408385031215612f9f57612f9e612d81565b5b6000612fad85828601612dd4565b9250506020612fbe85828601612f73565b9150509250929050565b600060208284031215612fde57612fdd612d81565b5b6000612fec84828501612e0a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561302f578082015181840152602081019050613014565b60008484015250505050565b6000601f19601f8301169050919050565b600061305782612ff5565b6130618185613000565b9350613071818560208601613011565b61307a8161303b565b840191505092915050565b6000602082019050818103600083015261309f818461304c565b905092915050565b6000806000606084860312156130c0576130bf612d81565b5b60006130ce86828701612dd4565b93505060206130df86828701612e0a565b92505060406130f086828701612e0a565b9150509250925092565b6000806040838503121561311157613110612d81565b5b600061311f85828601612e0a565b925050602061313085828601612e0a565b9150509250929050565b61314381612dab565b82525050565b600060408201905061315e600083018561313a565b61316b6020830184612e5f565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6131af8261303b565b810181811067ffffffffffffffff821117156131ce576131cd613177565b5b80604052505050565b60006131e1612d77565b90506131ed82826131a6565b919050565b600067ffffffffffffffff82111561320d5761320c613177565b5b602082029050602081019050919050565b600080fd5b6000613236613231846131f2565b6131d7565b905080838252602082019050602084028301858111156132595761325861321e565b5b835b81811015613282578061326e8882612e0a565b84526020840193505060208101905061325b565b5050509392505050565b600082601f8301126132a1576132a0613172565b5b81356132b1848260208601613223565b91505092915050565b600080fd5b600067ffffffffffffffff8211156132da576132d9613177565b5b6132e38261303b565b9050602081019050919050565b82818337600083830152505050565b600061331261330d846132bf565b6131d7565b90508281526020810184848401111561332e5761332d6132ba565b5b6133398482856132f0565b509392505050565b600082601f83011261335657613355613172565b5b81356133668482602086016132ff565b91505092915050565b600080600080600060a0868803121561338b5761338a612d81565b5b600061339988828901612dd4565b95505060206133aa88828901612dd4565b945050604086013567ffffffffffffffff8111156133cb576133ca612d86565b5b6133d78882890161328c565b935050606086013567ffffffffffffffff8111156133f8576133f7612d86565b5b6134048882890161328c565b925050608086013567ffffffffffffffff81111561342557613424612d86565b5b61343188828901613341565b9150509295509295909350565b60006020828403121561345457613453612d81565b5b600061346284828501612dd4565b91505092915050565b600067ffffffffffffffff82111561348657613485613177565b5b602082029050602081019050919050565b60006134aa6134a58461346b565b6131d7565b905080838252602082019050602084028301858111156134cd576134cc61321e565b5b835b818110156134f657806134e28882612dd4565b8452602084019350506020810190506134cf565b5050509392505050565b600082601f83011261351557613514613172565b5b8135613525848260208601613497565b91505092915050565b6000806040838503121561354557613544612d81565b5b600083013567ffffffffffffffff81111561356357613562612d86565b5b61356f85828601613500565b925050602083013567ffffffffffffffff8111156135905761358f612d86565b5b61359c8582860161328c565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6135db81612de9565b82525050565b60006135ed83836135d2565b60208301905092915050565b6000602082019050919050565b6000613611826135a6565b61361b81856135b1565b9350613626836135c2565b8060005b8381101561365757815161363e88826135e1565b9750613649836135f9565b92505060018101905061362a565b5085935050505092915050565b6000602082019050818103600083015261367e8184613606565b905092915050565b600067ffffffffffffffff8211156136a1576136a0613177565b5b6136aa8261303b565b9050602081019050919050565b60006136ca6136c584613686565b6131d7565b9050828152602081018484840111156136e6576136e56132ba565b5b6136f18482856132f0565b509392505050565b600082601f83011261370e5761370d613172565b5b813561371e8482602086016136b7565b91505092915050565b60006020828403121561373d5761373c612d81565b5b600082013567ffffffffffffffff81111561375b5761375a612d86565b5b613767848285016136f9565b91505092915050565b60008060006060848603121561378957613788612d81565b5b600061379786828701612e0a565b93505060206137a886828701612dd4565b92505060406137b986828701612f73565b9150509250925092565b60006020820190506137d8600083018461313a565b92915050565b6000806000606084860312156137f7576137f6612d81565b5b600061380586828701612dd4565b935050602084013567ffffffffffffffff81111561382657613825612d86565b5b6138328682870161328c565b925050604084013567ffffffffffffffff81111561385357613852612d86565b5b61385f8682870161328c565b9150509250925092565b61387281612f0e565b811461387d57600080fd5b50565b60008135905061388f81613869565b92915050565b600080604083850312156138ac576138ab612d81565b5b60006138ba85828601612dd4565b92505060206138cb85828601613880565b9150509250929050565b600080fd5b60008083601f8401126138f0576138ef613172565b5b8235905067ffffffffffffffff81111561390d5761390c6138d5565b5b6020830191508360208202830111156139295761392861321e565b5b9250929050565b6000806020838503121561394757613946612d81565b5b600083013567ffffffffffffffff81111561396557613964612d86565b5b613971858286016138da565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60006139d0826139a9565b6139da81856139b4565b93506139ea818560208601613011565b6139f38161303b565b840191505092915050565b6000613a0a83836139c5565b905092915050565b6000602082019050919050565b6000613a2a8261397d565b613a348185613988565b935083602082028501613a4685613999565b8060005b85811015613a825784840389528151613a6385826139fe565b9450613a6e83613a12565b925060208a01995050600181019050613a4a565b50829750879550505050505092915050565b60006020820190508181036000830152613aae8184613a1f565b905092915050565b60008060408385031215613acd57613acc612d81565b5b6000613adb85828601612dd4565b9250506020613aec85828601612dd4565b9150509250929050565b600080600080600060a08688031215613b1257613b11612d81565b5b6000613b2088828901612dd4565b9550506020613b3188828901612dd4565b9450506040613b4288828901612e0a565b9350506060613b5388828901612e0a565b925050608086013567ffffffffffffffff811115613b7457613b73612d86565b5b613b8088828901613341565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000613be9602a83613000565b9150613bf482613b8d565b604082019050919050565b60006020820190508181036000830152613c1881613bdc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c6657607f821691505b602082108103613c7957613c78613c1f565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154613cac81613c4e565b613cb68186613c7f565b94506001821660008114613cd15760018114613ce657613d19565b60ff1983168652811515820286019350613d19565b613cef85613c8a565b60005b83811015613d1157815481890152600182019150602081019050613cf2565b838801955050505b50505092915050565b7f2f746f6b656e732f7b69647d2e6a736f6e000000000000000000000000000000600082015250565b6000613d58601183613c7f565b9150613d6382613d22565b601182019050919050565b6000613d7a8284613c9f565b9150613d8582613d4b565b915081905092915050565b7f4d4557456e657267793a2063616c6c6572206973206e6f742074686520636f6e60008201527f74726f6c6c657200000000000000000000000000000000000000000000000000602082015250565b6000613dec602783613000565b9150613df782613d90565b604082019050919050565b60006020820190508181036000830152613e1b81613ddf565b9050919050565b7f4d4557456e657267793a206e6f6e636520697320616c72656164792075736564600082015250565b6000613e58602083613000565b9150613e6382613e22565b602082019050919050565b60006020820190508181036000830152613e8781613e4b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ec882612de9565b9150613ed383612de9565b9250828202613ee181612de9565b91508282048414831517613ef857613ef7613e8e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f3982612de9565b9150613f4483612de9565b925082613f5457613f53613eff565b5b828204905092915050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613fbb602e83613000565b9150613fc682613f5f565b604082019050919050565b60006020820190508181036000830152613fea81613fae565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061404d602983613000565b915061405882613ff1565b604082019050919050565b6000602082019050818103600083015261407c81614040565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006140bd82612de9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140ef576140ee613e8e565b5b600182019050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026141477fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261410a565b614151868361410a565b95508019841693508086168417925050509392505050565b6000819050919050565b600061418e61418961418484612de9565b614169565b612de9565b9050919050565b6000819050919050565b6141a883614173565b6141bc6141b482614195565b848454614117565b825550505050565b600090565b6141d16141c4565b6141dc81848461419f565b505050565b5b81811015614200576141f56000826141c9565b6001810190506141e2565b5050565b601f8211156142455761421681613c8a565b61421f846140fa565b8101602085101561422e578190505b61424261423a856140fa565b8301826141e1565b50505b505050565b600082821c905092915050565b60006142686000198460080261424a565b1980831691505092915050565b60006142818383614257565b9150826002028217905092915050565b61429a82612ff5565b67ffffffffffffffff8111156142b3576142b2613177565b5b6142bd8254613c4e565b6142c8828285614204565b600060209050601f8311600181146142fb57600084156142e9578287015190505b6142f38582614275565b86555061435b565b601f19841661430986613c8a565b60005b828110156143315784890151825560018201915060208501945060208101905061430c565b8683101561434e578489015161434a601f891682614257565b8355505b6001600288020188555050505b505050505050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261438f5761438e614363565b5b80840192508235915067ffffffffffffffff8211156143b1576143b0614368565b5b6020830192506001820236038313156143cd576143cc61436d565b5b509250929050565b600081905092915050565b60006143ec83856143d5565b93506143f98385846132f0565b82840190509392505050565b60006144128284866143e0565b91508190509392505050565b600061443161442c84613686565b6131d7565b90508281526020810184848401111561444d5761444c6132ba565b5b614458848285613011565b509392505050565b600082601f83011261447557614474613172565b5b815161448584826020860161441e565b91505092915050565b6000602082840312156144a4576144a3612d81565b5b600082015167ffffffffffffffff8111156144c2576144c1612d86565b5b6144ce84828501614460565b91505092915050565b7f2f6d6574612e6a736f6e00000000000000000000000000000000000000000000600082015250565b600061450d600a83613c7f565b9150614518826144d7565b600a82019050919050565b600061452f8284613c9f565b915061453a82614500565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145a1602683613000565b91506145ac82614545565b604082019050919050565b600060208201905081810360008301526145d081614594565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061460d602083613000565b9150614618826145d7565b602082019050919050565b6000602082019050818103600083015261463c81614600565b9050919050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b600061469f602a83613000565b91506146aa82614643565b604082019050919050565b600060208201905081810360008301526146ce81614692565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b600061470b601983613000565b9150614716826146d5565b602082019050919050565b6000602082019050818103600083015261473a816146fe565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061479d602183613000565b91506147a882614741565b604082019050919050565b600060208201905081810360008301526147cc81614790565b9050919050565b60006147de82612de9565b91506147e983612de9565b925082820190508082111561480157614800613e8e565b5b92915050565b600060408201905061481c6000830185612e5f565b6148296020830184612e5f565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061488c602883613000565b915061489782614830565b604082019050919050565b600060208201905081810360008301526148bb8161487f565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061491e602583613000565b9150614929826148c2565b604082019050919050565b6000602082019050818103600083015261494d81614911565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006149b0602a83613000565b91506149bb82614954565b604082019050919050565b600060208201905081810360008301526149df816149a3565b9050919050565b60006040820190508181036000830152614a008185613606565b90508181036020830152614a148184613606565b90509392505050565b7f455243323938313a20496e76616c696420706172616d65746572730000000000600082015250565b6000614a53601b83613000565b9150614a5e82614a1d565b602082019050919050565b60006020820190508181036000830152614a8281614a46565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ae5602383613000565b9150614af082614a89565b604082019050919050565b60006020820190508181036000830152614b1481614ad8565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614b77602483613000565b9150614b8282614b1b565b604082019050919050565b60006020820190508181036000830152614ba681614b6a565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614c09602983613000565b9150614c1482614bad565b604082019050919050565b60006020820190508181036000830152614c3881614bfc565b9050919050565b600082825260208201905092915050565b6000614c5b826139a9565b614c658185614c3f565b9350614c75818560208601613011565b614c7e8161303b565b840191505092915050565b600060a082019050614c9e600083018861313a565b614cab602083018761313a565b614cb86040830186612e5f565b614cc56060830185612e5f565b8181036080830152614cd78184614c50565b90509695505050505050565b600081519050614cf281612eb5565b92915050565b600060208284031215614d0e57614d0d612d81565b5b6000614d1c84828501614ce3565b91505092915050565b60008160e01c9050919050565b600060033d1115614d515760046000803e614d4e600051614d25565b90505b90565b600060443d10614de157614d66612d77565b60043d036004823e80513d602482011167ffffffffffffffff82111715614d8e575050614de1565b808201805167ffffffffffffffff811115614dac5750505050614de1565b80602083010160043d038501811115614dc9575050505050614de1565b614dd8826020018501866131a6565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614e40603483613000565b9150614e4b82614de4565b604082019050919050565b60006020820190508181036000830152614e6f81614e33565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614ed2602883613000565b9150614edd82614e76565b604082019050919050565b60006020820190508181036000830152614f0181614ec5565b9050919050565b600060a082019050614f1d600083018861313a565b614f2a602083018761313a565b8181036040830152614f3c8186613606565b90508181036060830152614f508185613606565b90508181036080830152614f648184614c50565b90509695505050505050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000614fcc602883613000565b9150614fd782614f70565b604082019050919050565b60006020820190508181036000830152614ffb81614fbf565b905091905056fea264697066735822122039b856a512a23820e978236ce5eb0b7ca0b064d4c12e48e74599b946abf44e0164736f6c6343000811003368747470733a2f2f6d65772d6d6f62696c652d656e657267792d6e66742e73332e75732d776573742d312e616d617a6f6e6177732e636f6d000000000000000000000000473769291820018091794f0d7897187021006bce00000000000000000000000000000000000000000000000000000000000001f4