608060405234801561001057600080fd5b50614892806100206000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806379cc67901161013b578063c4d66de8116100b8578063e7c96e6f1161007c578063e7c96e6f1461071f578063eddd0d9c1461074f578063f0c90fa31461076b578063f851a4401461079b578063fce589d8146107b957610248565b8063c4d66de81461067d578063d12e76d014610699578063d4114fc1146106b5578063dd62ed3e146106d1578063e61987051461070157610248565b8063a457c2d7116100ff578063a457c2d7146105c7578063a9059cbb146105f7578063ab62f0e114610627578063b29a814014610643578063bb60aaa71461065f57610248565b806379cc6790146105255780637cb16bc4146105415780637fa8f262146105715780638e9f66911461058d57806395d89b41146105a957610248565b806339509351116101c95780634bf2c7c91161018d5780634bf2c7c91461047157806355f352ec1461048d57806369384c48146104bd578063704b6c02146104d957806370a08231146104f557610248565b806339509351146103a95780633c3cfcea146103d95780633f1cdbdf146103f557806342966c6814610425578063474b8a3e1461044157610248565b806318160ddd1161021057806318160ddd146102f157806323b872dd1461030f5780632e046ed61461033f578063313ce5671461036f5780633542aee21461038d57610248565b806306fdde031461024d578063095ea7b31461026b578063111a18d31461029b57806313966db5146102b757806315ae7678146102d5575b600080fd5b6102556107d7565b6040516102629190613b75565b60405180910390f35b610285600480360381019061028091906134f8565b610869565b6040516102929190613b2a565b60405180910390f35b6102b560048036038101906102b091906134f8565b610887565b005b6102bf61092c565b6040516102cc9190613e57565b60405180910390f35b6102ef60048036038101906102ea9190613605565b610932565b005b6102f9610996565b6040516103069190613e57565b60405180910390f35b61032960048036038101906103249190613449565b6109a0565b6040516103369190613b2a565b60405180910390f35b61035960048036038101906103549190613538565b610a98565b6040516103669190613e57565b60405180910390f35b610377610af6565b6040516103849190613e9b565b60405180910390f35b6103a760048036038101906103a291906134f8565b610aff565b005b6103c360048036038101906103be91906134f8565b610ba4565b6040516103d09190613b2a565b60405180910390f35b6103f360048036038101906103ee9190613538565b610c50565b005b61040f600480360381019061040a9190613661565b610e1a565b60405161041c9190613b2a565b60405180910390f35b61043f600480360381019061043a9190613661565b610e3a565b005b61045b600480360381019061045691906134f8565b610e4e565b6040516104689190613e57565b60405180910390f35b61048b60048036038101906104869190613661565b610e99565b005b6104a760048036038101906104a29190613375565b610f75565b6040516104b49190613e57565b60405180910390f35b6104d760048036038101906104d2919061349c565b610fda565b005b6104f360048036038101906104ee9190613375565b6110cc565b005b61050f600480360381019061050a9190613375565b611272565b60405161051c9190613e57565b60405180910390f35b61053f600480360381019061053a91906134f8565b6112bb565b005b61055b60048036038101906105569190613375565b611336565b6040516105689190613b2a565b60405180910390f35b61058b60048036038101906105869190613538565b61138f565b005b6105a760048036038101906105a29190613661565b611501565b005b6105b1611555565b6040516105be9190613b75565b60405180910390f35b6105e160048036038101906105dc91906134f8565b6115e7565b6040516105ee9190613b2a565b60405180910390f35b610611600480360381019061060c91906134f8565b6116d2565b60405161061e9190613b2a565b60405180910390f35b610641600480360381019061063c91906135b8565b6116f0565b005b61065d600480360381019061065891906134f8565b611819565b005b61066761193a565b6040516106749190613e57565b60405180910390f35b61069760048036038101906106929190613375565b611940565b005b6106b360048036038101906106ae9190613375565b611b9f565b005b6106cf60048036038101906106ca9190613375565b611d45565b005b6106eb60048036038101906106e69190613409565b611e75565b6040516106f89190613e57565b60405180910390f35b610709611efc565b6040516107169190613a86565b60405180910390f35b61073960048036038101906107349190613375565b611f22565b6040516107469190613e57565b60405180910390f35b61076960048036038101906107649190613661565b611f87565b005b61078560048036038101906107809190613375565b612063565b6040516107929190613b75565b60405180910390f35b6107a3612137565b6040516107b09190613a86565b60405180910390f35b6107c161215d565b6040516107ce9190613e57565b60405180910390f35b6060603680546107e69061413e565b80601f01602080910402602001604051908101604052809291908181526020018280546108129061413e565b801561085f5780601f106108345761010080835404028352916020019161085f565b820191906000526020600020905b81548152906001019060200180831161084257829003601f168201915b5050505050905090565b600061087d610876612163565b848461216b565b6001905092915050565b61088f612163565b73ffffffffffffffffffffffffffffffffffffffff16609c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461091e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091590613d77565b60405180910390fd5b6109288282612336565b5050565b60995481565b61094361093d612163565b82612336565b6000610956610950612163565b83610e4e565b90507f43b3bd8f29427c5b4e62e30f84ca261110f52928d06e012564b5b4730789ecf48382604051610989929190613b45565b60405180910390a1505050565b6000603554905090565b60006109ad84848461250f565b6000603460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109f8612163565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90613cd7565b60405180910390fd5b610a8c85610a84612163565b85840361216b565b60019150509392505050565b6000610aed82610adf610ad0612710610ac2610ab38a611f22565b8961279390919063ffffffff16565b6127a990919063ffffffff16565b866127bf90919063ffffffff16565b6127bf90919063ffffffff16565b90509392505050565b60006008905090565b610b07612163565b73ffffffffffffffffffffffffffffffffffffffff16609c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8d90613d77565b60405180910390fd5b610ba082826127d5565b5050565b6000610c46610bb1612163565b848460346000610bbf612163565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c419190613f80565b61216b565b6001905092915050565b610c58612163565b73ffffffffffffffffffffffffffffffffffffffff16609c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cde90613d77565b60405180910390fd5b600061271083610cf79190613fd6565b11610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e90613cf7565b60405180910390fd5b600061271082610d479190613fd6565b11610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e90613cf7565b60405180910390fd5b81609b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555080609b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505050565b609a6020528060005260406000206000915054906101000a900460ff1681565b610e4b610e45612163565b82612336565b50565b6000610e91610e82612710610e74610e6587610f75565b8661279390919063ffffffff16565b6127a990919063ffffffff16565b836127bf90919063ffffffff16565b905092915050565b610ea1612163565b73ffffffffffffffffffffffffffffffffffffffff16609c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2790613d77565b60405180910390fd5b7f1ad180dc6c73a702f095378bdf3146c1e741d97fc1b6c4c128ecfa22506e402c60985482604051610f63929190613e72565b60405180910390a18060988190555050565b6000610f8082611336565b15610fcf57609b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050610fd5565b60985490505b919050565b610fe2612163565b73ffffffffffffffffffffffffffffffffffffffff16609c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890613d77565b60405180910390fd5b80609b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030190805190602001906110c7929190613148565b505050565b6110d4612163565b73ffffffffffffffffffffffffffffffffffffffff16609c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a90613d77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca90613cb7565b60405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f609c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051611226929190613aa1565b60405180910390a180609c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000603360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006112ce836112c9612163565b611e75565b905081811015611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a90613d17565b60405180910390fd5b6113278361131f612163565b84840361216b565b6113318383612336565b505050565b6000609b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050919050565b611397612163565b73ffffffffffffffffffffffffffffffffffffffff16609c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d90613d77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d90613c57565b60405180910390fd5b6001609b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055506114fc838383610c50565b505050565b61151261150c612163565b82612336565b7f22e3f162fca16dc0fcfb65eddf406531a0c555a2c24c58cf5d10fc2d202a882e61153b612163565b8260405161154a929190613aca565b60405180910390a150565b6060603780546115649061413e565b80601f01602080910402602001604051908101604052809291908181526020018280546115909061413e565b80156115dd5780601f106115b2576101008083540402835291602001916115dd565b820191906000526020600020905b8154815290600101906020018083116115c057829003601f168201915b5050505050905090565b600080603460006115f6612163565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa90613e17565b60405180910390fd5b6116c76116be612163565b8585840361216b565b600191505092915050565b60006116e66116df612163565b848461250f565b6001905092915050565b609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611731612163565b73ffffffffffffffffffffffffffffffffffffffff1614611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e90613bd7565b60405180910390fd5b600080600080858581019061179c91906133a2565b9350935093509350609a600082815260200190815260200160002060009054906101000a900460ff1615611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc90613bf7565b60405180910390fd5b61181184848484612936565b505050505050565b611821612163565b73ffffffffffffffffffffffffffffffffffffffff16609c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a790613d77565b60405180910390fd5b6118fd609c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166129ba9092919063ffffffff16565b7ffba2d3bdfb2d601eb66a89783a2c614856101cadce71556753c2edadd60c831c828260405161192e929190613aca565b60405180910390a15050565b61271081565b600060019054906101000a900460ff1680611966575060008054906101000a900460ff16155b6119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c90613c97565b60405180910390fd5b60008060019054906101000a900460ff1615905080156119f5576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5c90613cb7565b60405180910390fd5b81609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611b1a6040518060400160405280600981526020017f4254432050726f787900000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4254437078000000000000000000000000000000000000000000000000000000815250612a40565b611b22612b2d565b601e609881905550600a609981905550611b3a612163565b609c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015611b9b5760008060016101000a81548160ff0219169083151502179055505b5050565b611ba7612163565b73ffffffffffffffffffffffffffffffffffffffff16609c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d90613d77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9d90613cb7565b60405180910390fd5b7f28f4800f2a26335c36eabcfab061476ad97adacb7ea3a6a10e84e684376401c0609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051611cf9929190613aa1565b60405180910390a180609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff16609c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd90613d37565b60405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f609c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051611e29929190613aa1565b60405180910390a180609c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000603460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611f2d82611336565b15611f7c57609b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050611f82565b60995490505b919050565b611f8f612163565b73ffffffffffffffffffffffffffffffffffffffff16609c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461201e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201590613d77565b60405180910390fd5b7fd8f648a37e4afe1c401d97caaa06358d2e2725ac008214ce9f5497991e65439660995482604051612051929190613e72565b60405180910390a18060998190555050565b6060609b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030180546120b29061413e565b80601f01602080910402602001604051908101604052809291908181526020018280546120de9061413e565b801561212b5780601f106121005761010080835404028352916020019161212b565b820191906000526020600020905b81548152906001019060200180831161210e57829003601f168201915b50505050509050919050565b609c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60985481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d290613db7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561224b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224290613c17565b60405180910390fd5b80603460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123299190613e57565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d90613d57565b60405180910390fd5b6123b282600083612c16565b6000603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243090613bb7565b60405180910390fd5b818103603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603560008282546124919190614061565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124f69190613e57565b60405180910390a361250a83600084612c1b565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561257f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257690613d97565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e690613b97565b60405180910390fd5b6125fa838383612c16565b6000603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267890613c37565b60405180910390fd5b818103603360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127169190613f80565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161277a9190613e57565b60405180910390a361278d848484612c1b565b50505050565b600081836127a19190614007565b905092915050565b600081836127b79190613fd6565b905092915050565b600081836127cd9190614061565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283c90613e37565b60405180910390fd5b61285160008383612c16565b80603560008282546128639190613f80565b9250508190555080603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128b99190613f80565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161291e9190613e57565b60405180910390a361293260008383612c1b565b5050565b612941848484610a98565b925061294d84846127d5565b6001609a600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f8484836040516129ac93929190613af3565b60405180910390a150505050565b612a3b8363a9059cbb60e01b84846040516024016129d9929190613aca565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612c20565b505050565b600060019054906101000a900460ff1680612a66575060008054906101000a900460ff16155b612aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9c90613c97565b60405180910390fd5b60008060019054906101000a900460ff161590508015612af5576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612afd612ce7565b612b078383612dc0565b8015612b285760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff1680612b53575060008054906101000a900460ff16155b612b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8990613c97565b60405180910390fd5b60008060019054906101000a900460ff161590508015612be2576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612bea612ce7565b612bf2612ec9565b8015612c135760008060016101000a81548160ff0219169083151502179055505b50565b505050565b505050565b6000612c82826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612fa29092919063ffffffff16565b9050600081511115612ce25780806020019051810190612ca2919061358b565b612ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd890613df7565b60405180910390fd5b5b505050565b600060019054906101000a900460ff1680612d0d575060008054906101000a900460ff16155b612d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4390613c97565b60405180910390fd5b60008060019054906101000a900460ff161590508015612d9c576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015612dbd5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612de6575060008054906101000a900460ff16155b612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90613c97565b60405180910390fd5b60008060019054906101000a900460ff161590508015612e75576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8260369080519060200190612e8b929190613148565b508160379080519060200190612ea2929190613148565b508015612ec45760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff1680612eef575060008054906101000a900460ff16155b612f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2590613c97565b60405180910390fd5b60008060019054906101000a900460ff161590508015612f7e576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015612f9f5760008060016101000a81548160ff0219169083151502179055505b50565b6060612fb18484600085612fba565b90509392505050565b606082471015612fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff690613c77565b60405180910390fd5b613008856130ce565b613047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303e90613dd7565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516130709190613a6f565b60006040518083038185875af1925050503d80600081146130ad576040519150601f19603f3d011682016040523d82523d6000602084013e6130b2565b606091505b50915091506130c28282866130e1565b92505050949350505050565b600080823b905060008111915050919050565b606083156130f157829050613141565b6000835111156131045782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131389190613b75565b60405180910390fd5b9392505050565b8280546131549061413e565b90600052602060002090601f01602090048101928261317657600085556131bd565b82601f1061318f57805160ff19168380011785556131bd565b828001600101855582156131bd579182015b828111156131bc5782518255916020019190600101906131a1565b5b5090506131ca91906131ce565b5090565b5b808211156131e75760008160009055506001016131cf565b5090565b60006131fe6131f984613edb565b613eb6565b90508281526020810184848401111561321a5761321961426c565b5b6132258482856140fc565b509392505050565b600061324061323b84613f0c565b613eb6565b90508281526020810184848401111561325c5761325b61426c565b5b6132678482856140fc565b509392505050565b60008135905061327e81614800565b92915050565b60008135905061329381614817565b92915050565b6000815190506132a88161482e565b92915050565b60008083601f8401126132c4576132c3614262565b5b8235905067ffffffffffffffff8111156132e1576132e061425d565b5b6020830191508360018202830111156132fd576132fc614267565b5b9250929050565b600082601f83011261331957613318614262565b5b81356133298482602086016131eb565b91505092915050565b600082601f83011261334757613346614262565b5b813561335784826020860161322d565b91505092915050565b60008135905061336f81614845565b92915050565b60006020828403121561338b5761338a614276565b5b60006133998482850161326f565b91505092915050565b600080600080608085870312156133bc576133bb614276565b5b60006133ca87828801613284565b94505060206133db87828801613360565b93505060406133ec87828801613360565b92505060606133fd87828801613360565b91505092959194509250565b600080604083850312156134205761341f614276565b5b600061342e8582860161326f565b925050602061343f8582860161326f565b9150509250929050565b60008060006060848603121561346257613461614276565b5b60006134708682870161326f565b93505060206134818682870161326f565b925050604061349286828701613360565b9150509250925092565b600080604083850312156134b3576134b2614276565b5b60006134c18582860161326f565b925050602083013567ffffffffffffffff8111156134e2576134e1614271565b5b6134ee85828601613332565b9150509250929050565b6000806040838503121561350f5761350e614276565b5b600061351d8582860161326f565b925050602061352e85828601613360565b9150509250929050565b60008060006060848603121561355157613550614276565b5b600061355f8682870161326f565b935050602061357086828701613360565b925050604061358186828701613360565b9150509250925092565b6000602082840312156135a1576135a0614276565b5b60006135af84828501613299565b91505092915050565b600080602083850312156135cf576135ce614276565b5b600083013567ffffffffffffffff8111156135ed576135ec614271565b5b6135f9858286016132ae565b92509250509250929050565b6000806040838503121561361c5761361b614276565b5b600083013567ffffffffffffffff81111561363a57613639614271565b5b61364685828601613304565b925050602061365785828601613360565b9150509250929050565b60006020828403121561367757613676614276565b5b600061368584828501613360565b91505092915050565b61369781614095565b82525050565b6136a6816140b9565b82525050565b60006136b782613f3d565b6136c18185613f53565b93506136d181856020860161410b565b6136da8161427b565b840191505092915050565b60006136f082613f3d565b6136fa8185613f64565b935061370a81856020860161410b565b80840191505092915050565b600061372182613f48565b61372b8185613f6f565b935061373b81856020860161410b565b6137448161427b565b840191505092915050565b600061375c602383613f6f565b91506137678261428c565b604082019050919050565b600061377f602283613f6f565b915061378a826142db565b604082019050919050565b60006137a2600c83613f6f565b91506137ad8261432a565b602082019050919050565b60006137c5601683613f6f565b91506137d082614353565b602082019050919050565b60006137e8602283613f6f565b91506137f38261437c565b604082019050919050565b600061380b602683613f6f565b9150613816826143cb565b604082019050919050565b600061382e601183613f6f565b91506138398261441a565b602082019050919050565b6000613851602683613f6f565b915061385c82614443565b604082019050919050565b6000613874602e83613f6f565b915061387f82614492565b604082019050919050565b6000613897601183613f6f565b91506138a2826144e1565b602082019050919050565b60006138ba602883613f6f565b91506138c58261450a565b604082019050919050565b60006138dd600d83613f6f565b91506138e882614559565b602082019050919050565b6000613900602483613f6f565b915061390b82614582565b604082019050919050565b6000613923601583613f6f565b915061392e826145d1565b602082019050919050565b6000613946602183613f6f565b9150613951826145fa565b604082019050919050565b6000613969601383613f6f565b915061397482614649565b602082019050919050565b600061398c602583613f6f565b915061399782614672565b604082019050919050565b60006139af602483613f6f565b91506139ba826146c1565b604082019050919050565b60006139d2601d83613f6f565b91506139dd82614710565b602082019050919050565b60006139f5602a83613f6f565b9150613a0082614739565b604082019050919050565b6000613a18602583613f6f565b9150613a2382614788565b604082019050919050565b6000613a3b601f83613f6f565b9150613a46826147d7565b602082019050919050565b613a5a816140e5565b82525050565b613a69816140ef565b82525050565b6000613a7b82846136e5565b915081905092915050565b6000602082019050613a9b600083018461368e565b92915050565b6000604082019050613ab6600083018561368e565b613ac3602083018461368e565b9392505050565b6000604082019050613adf600083018561368e565b613aec6020830184613a51565b9392505050565b6000606082019050613b08600083018661368e565b613b156020830185613a51565b613b226040830184613a51565b949350505050565b6000602082019050613b3f600083018461369d565b92915050565b60006040820190508181036000830152613b5f81856136ac565b9050613b6e6020830184613a51565b9392505050565b60006020820190508181036000830152613b8f8184613716565b905092915050565b60006020820190508181036000830152613bb08161374f565b9050919050565b60006020820190508181036000830152613bd081613772565b9050919050565b60006020820190508181036000830152613bf081613795565b9050919050565b60006020820190508181036000830152613c10816137b8565b9050919050565b60006020820190508181036000830152613c30816137db565b9050919050565b60006020820190508181036000830152613c50816137fe565b9050919050565b60006020820190508181036000830152613c7081613821565b9050919050565b60006020820190508181036000830152613c9081613844565b9050919050565b60006020820190508181036000830152613cb081613867565b9050919050565b60006020820190508181036000830152613cd08161388a565b9050919050565b60006020820190508181036000830152613cf0816138ad565b9050919050565b60006020820190508181036000830152613d10816138d0565b9050919050565b60006020820190508181036000830152613d30816138f3565b9050919050565b60006020820190508181036000830152613d5081613916565b9050919050565b60006020820190508181036000830152613d7081613939565b9050919050565b60006020820190508181036000830152613d908161395c565b9050919050565b60006020820190508181036000830152613db08161397f565b9050919050565b60006020820190508181036000830152613dd0816139a2565b9050919050565b60006020820190508181036000830152613df0816139c5565b9050919050565b60006020820190508181036000830152613e10816139e8565b9050919050565b60006020820190508181036000830152613e3081613a0b565b9050919050565b60006020820190508181036000830152613e5081613a2e565b9050919050565b6000602082019050613e6c6000830184613a51565b92915050565b6000604082019050613e876000830185613a51565b613e946020830184613a51565b9392505050565b6000602082019050613eb06000830184613a60565b92915050565b6000613ec0613ed1565b9050613ecc8282614170565b919050565b6000604051905090565b600067ffffffffffffffff821115613ef657613ef561422e565b5b613eff8261427b565b9050602081019050919050565b600067ffffffffffffffff821115613f2757613f2661422e565b5b613f308261427b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613f8b826140e5565b9150613f96836140e5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fcb57613fca6141a1565b5b828201905092915050565b6000613fe1826140e5565b9150613fec836140e5565b925082613ffc57613ffb6141d0565b5b828204905092915050565b6000614012826140e5565b915061401d836140e5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614056576140556141a1565b5b828202905092915050565b600061406c826140e5565b9150614077836140e5565b92508282101561408a576140896141a1565b5b828203905092915050565b60006140a0826140c5565b9050919050565b60006140b2826140c5565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561412957808201518184015260208101905061410e565b83811115614138576000848401525b50505050565b6000600282049050600182168061415657607f821691505b6020821081141561416a576141696141ff565b5b50919050565b6141798261427b565b810181811067ffffffffffffffff821117156141985761419761422e565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f556e617574686f72697a65640000000000000000000000000000000000000000600082015250565b7f4572723a20416c72656164792070726f63657373656400000000000000000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4572723a205a65726f2041646472657373000000000000000000000000000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4572723a205a65726f2061646472657373000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642076616c756500000000000000000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f4572723a204e6f74205a65726f20616464726573730000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616c6c6572206973206e6f742061646d696e00000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61480981614095565b811461481457600080fd5b50565b614820816140a7565b811461482b57600080fd5b50565b614837816140b9565b811461484257600080fd5b50565b61484e816140e5565b811461485957600080fd5b5056fea2646970667358221220c42110c98249046b37a638c4e013292fd54fbd41cc11c8cd7ea3eae8feb4c63164736f6c63430008070033