60806040526040518060600160405280602e815260200162004c7e602e9139600490816200002e919062000f25565b5060405180608001604052806049815260200162004cac604991396005908162000059919062000f25565b506040518060400160405280600581526020017f4e5742544300000000000000000000000000000000000000000000000000000081525060069081620000a0919062000f25565b5060405180606001604052806038815260200162004c466038913960079081620000cb919062000f25565b5060405180606001604052806036815260200162004cf56036913960089081620000f6919062000f25565b5060405180606001604052806036815260200162004cf5603691396009908162000121919062000f25565b50732260fac5e5542a773aa44fbcfedf7c193bc2c599600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732260fac5e5542a773aa44fbcfedf7c193bc2c599600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620001d6575f80fd5b50336040518060600160405280602e815260200162004c7e602e91396200020381620002f660201b60201c565b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000277575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200026e91906200104c565b60405180910390fd5b62000288816200030b60201b60201c565b50620002f03360016115b35f67ffffffffffffffff811115620002b057620002af62000ccb565b5b6040519080825280601f01601f191660200182016040528015620002e35781602001600182028036833780820191505090505b50620003ce60201b60201c565b62001449565b806002908162000307919062000f25565b5050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000441575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016200043891906200104c565b60405180910390fd5b5f806200045585856200047660201b60201c565b915091506200046e5f87848487620004a660201b60201c565b505050505050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b620004ba858585856200057960201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161462000572575f620004ff6200092b60201b60201c565b9050600184510362000559575f620005215f866200093260201b90919060201c565b90505f620005395f866200093260201b90919060201c565b9050620005518389898585896200094560201b60201c565b505062000570565b6200056f81878787878762000b0360201b60201c565b5b505b5050505050565b8051825114620005c657815181516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401620005bd92919062001078565b60405180910390fd5b5f620005d76200092b60201b60201c565b90505f5b8351811015620007e0575f620005fb82866200093260201b90919060201c565b90505f6200061383866200093260201b90919060201c565b90505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146200073a575f805f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015620006e657888183856040517f03dee4c5000000000000000000000000000000000000000000000000000000008152600401620006dd9493929190620010a3565b60405180910390fd5b8181035f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620007d257805f808481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254620007ca91906200111b565b925050819055505b5050806001019050620005db565b506001835103620008a3575f620008015f856200093260201b90919060201c565b90505f620008195f856200093260201b90919060201c565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516200089392919062001078565b60405180910390a4505062000924565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516200091b9291906200121c565b60405180910390a45b5050505050565b5f33905090565b5f60208202602084010151905092915050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111562000afb578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401620009a8959493929190620012e9565b6020604051808303815f875af1925050508015620009e657506040513d601f19601f82011682018060405250810190620009e39190620013a9565b60015b62000a6d573d805f811462000a17576040519150601f19603f3d011682016040523d82523d5f602084013e62000a1c565b606091505b505f81510362000a6557846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040162000a5c91906200104c565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161462000af957846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040162000af091906200104c565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111562000cb9578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040162000b66959493929190620013d9565b6020604051808303815f875af192505050801562000ba457506040513d601f19601f8201168201806040525081019062000ba19190620013a9565b60015b62000c2b573d805f811462000bd5576040519150601f19603f3d011682016040523d82523d5f602084013e62000bda565b606091505b505f81510362000c2357846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040162000c1a91906200104c565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161462000cb757846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040162000cae91906200104c565b60405180910390fd5b505b505050505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000d3d57607f821691505b60208210810362000d535762000d5262000cf8565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000db77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d7a565b62000dc3868362000d7a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000e0d62000e0762000e018462000ddb565b62000de4565b62000ddb565b9050919050565b5f819050919050565b62000e288362000ded565b62000e4062000e378262000e14565b84845462000d86565b825550505050565b5f90565b62000e5662000e48565b62000e6381848462000e1d565b505050565b5b8181101562000e8a5762000e7e5f8262000e4c565b60018101905062000e69565b5050565b601f82111562000ed95762000ea38162000d59565b62000eae8462000d6b565b8101602085101562000ebe578190505b62000ed662000ecd8562000d6b565b83018262000e68565b50505b505050565b5f82821c905092915050565b5f62000efb5f198460080262000ede565b1980831691505092915050565b5f62000f15838362000eea565b9150826002028217905092915050565b62000f308262000cc1565b67ffffffffffffffff81111562000f4c5762000f4b62000ccb565b5b62000f58825462000d25565b62000f6582828562000e8e565b5f60209050601f83116001811462000f9b575f841562000f86578287015190505b62000f92858262000f08565b86555062001001565b601f19841662000fab8662000d59565b5f5b8281101562000fd45784890151825560018201915060208501945060208101905062000fad565b8683101562000ff4578489015162000ff0601f89168262000eea565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620010348262001009565b9050919050565b620010468162001028565b82525050565b5f602082019050620010615f8301846200103b565b92915050565b620010728162000ddb565b82525050565b5f6040820190506200108d5f83018562001067565b6200109c602083018462001067565b9392505050565b5f608082019050620010b85f8301876200103b565b620010c7602083018662001067565b620010d6604083018562001067565b620010e5606083018462001067565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620011278262000ddb565b9150620011348362000ddb565b92508282019050808211156200114f576200114e620010ee565b5b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b620011898162000ddb565b82525050565b5f6200119c83836200117e565b60208301905092915050565b5f602082019050919050565b5f620011c08262001155565b620011cc81856200115f565b9350620011d9836200116f565b805f5b838110156200120f578151620011f388826200118f565b97506200120083620011a8565b925050600181019050620011dc565b5085935050505092915050565b5f6040820190508181035f830152620012368185620011b4565b905081810360208301526200124c8184620011b4565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156200128e57808201518184015260208101905062001271565b5f8484015250505050565b5f601f19601f8301169050919050565b5f620012b58262001255565b620012c181856200125f565b9350620012d38185602086016200126f565b620012de8162001299565b840191505092915050565b5f60a082019050620012fe5f8301886200103b565b6200130d60208301876200103b565b6200131c604083018662001067565b6200132b606083018562001067565b81810360808301526200133f8184620012a9565b90509695505050505050565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62001385816200134f565b811462001390575f80fd5b50565b5f81519050620013a3816200137a565b92915050565b5f60208284031215620013c157620013c06200134b565b5b5f620013d08482850162001393565b91505092915050565b5f60a082019050620013ee5f8301886200103b565b620013fd60208301876200103b565b8181036040830152620014118186620011b4565b90508181036060830152620014278185620011b4565b905081810360808301526200143d8184620012a9565b90509695505050505050565b6137ef80620014575f395ff3fe608060405234801561000f575f80fd5b50600436106101cc575f3560e01c806395d89b4111610102578063c75127be116100a0578063e985e9c51161006f578063e985e9c5146104ea578063eed7058d1461051a578063f242432a14610536578063f2fde38b14610552576101cc565b8063c75127be14610464578063d547cfb714610480578063d7a4a0c61461049e578063d95b6371146104ba576101cc565b8063a22cb465116100dc578063a22cb465146103f4578063ac8a584a14610410578063b84c82461461042c578063c47f002714610448576101cc565b806395d89b411461039c5780639870d7fe146103ba578063a0b6b3f6146103d6576101cc565b80634e1273f41161016f578063731133e911610149578063731133e91461032a5780638da5cb5b1461034657806390c3f38f146103645780639294424414610380576101cc565b80634e1273f4146102d2578063715018a6146103025780637284e4161461030c576101cc565b80630e89341c116101ab5780630e89341c1461024e5780631f7fdffa1461027e5780632eb2c2d61461029a57806330176e13146102b6576101cc565b8062fdd58e146101d057806301ffc9a71461020057806306fdde0314610230575b5f80fd5b6101ea60048036038101906101e59190612410565b61056e565b6040516101f7919061245d565b60405180910390f35b61021a600480360381019061021591906124cb565b6105c3565b6040516102279190612510565b60405180910390f35b6102386106a4565b60405161024591906125b3565b60405180910390f35b610268600480360381019061026391906125d3565b610734565b60405161027591906125b3565b60405180910390f35b610298600480360381019061029391906127ee565b610768565b005b6102b460048036038101906102af91906128a6565b610782565b005b6102d060048036038101906102cb9190612a0f565b610829565b005b6102ec60048036038101906102e79190612b16565b610844565b6040516102f99190612c43565b60405180910390f35b61030a61094b565b005b61031461095e565b60405161032191906125b3565b60405180910390f35b610344600480360381019061033f9190612c63565b6109ee565b005b61034e610a08565b60405161035b9190612cf2565b60405180910390f35b61037e60048036038101906103799190612a0f565b610a30565b005b61039a60048036038101906103959190612d0b565b610a4b565b005b6103a4610a96565b6040516103b191906125b3565b60405180910390f35b6103d460048036038101906103cf9190612d0b565b610b26565b005b6103de610b46565b6040516103eb9190612cf2565b60405180910390f35b61040e60048036038101906104099190612d60565b610b6e565b005b61042a60048036038101906104259190612d0b565b610b84565b005b61044660048036038101906104419190612a0f565b610ba4565b005b610462600480360381019061045d9190612a0f565b610bbf565b005b61047e600480360381019061047991906125d3565b610bda565b005b610488610bf9565b60405161049591906125b3565b60405180910390f35b6104b860048036038101906104b39190612df7565b610c89565b005b6104d460048036038101906104cf9190612e42565b610d6f565b6040516104e19190612510565b60405180910390f35b61050460048036038101906104ff9190612e42565b610dd3565b6040516105119190612510565b60405180910390f35b610534600480360381019061052f9190612e80565b610e61565b005b610550600480360381019061054b9190612e80565b610f5b565b005b61056c60048036038101906105679190612d0b565b611002565b005b5f805f8381526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061068d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061069d575061069c82611086565b5b9050919050565b6060600580546106b390612f40565b80601f01602080910402602001604051908101604052809291908181526020018280546106df90612f40565b801561072a5780601f106107015761010080835404028352916020019161072a565b820191905f5260205f20905b81548152906001019060200180831161070d57829003601f168201915b5050505050905090565b60606004610741836110ef565b604051602001610752929190613086565b6040516020818303038152906040529050919050565b6107706111b9565b61077c84848484611240565b50505050565b5f61078b6112c3565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156107d057506107ce8682610dd3565b155b156108145780866040517fe237d92200000000000000000000000000000000000000000000000000000000815260040161080b9291906130b4565b60405180910390fd5b61082186868686866112ca565b505050505050565b6108316111b9565b80600490816108409190613266565b5050565b6060815183511461089057815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401610887929190613335565b60405180910390fd5b5f835167ffffffffffffffff8111156108ac576108ab612602565b5b6040519080825280602002602001820160405280156108da5781602001602082028036833780820191505090505b5090505f5b8451811015610940576109166108fe82876113be90919063ffffffff16565b61091183876113d190919063ffffffff16565b61056e565b8282815181106109295761092861335c565b5b6020026020010181815250508060010190506108df565b508091505092915050565b6109536111b9565b61095c5f6113e4565b565b60606007805461096d90612f40565b80601f016020809104026020016040519081016040528092919081815260200182805461099990612f40565b80156109e45780601f106109bb576101008083540402835291602001916109e4565b820191905f5260205f20905b8154815290600101906020018083116109c757829003601f168201915b5050505050905090565b6109f66111b9565b610a02848484846114a7565b50505050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a386111b9565b8060079081610a479190613266565b5050565b610a536111b9565b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060068054610aa590612f40565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad190612f40565b8015610b1c5780601f10610af357610100808354040283529160200191610b1c565b820191905f5260205f20905b815481529060010190602001808311610aff57829003601f168201915b5050505050905090565b610b2e6111b9565b610b4281600c61153c90919063ffffffff16565b5050565b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b80610b796112c3565b8383611569565b5050565b610b8c6111b9565b610ba081600c6116d290919063ffffffff16565b5050565b610bac6111b9565b8060069081610bbb9190613266565b5050565b610bc76111b9565b8060059081610bd69190613266565b5050565b610be26111b9565b610bf65f82610bf15f8561056e565b6116ff565b50565b606060048054610c0890612f40565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3490612f40565b8015610c7f5780601f10610c5657610100808354040283529160200191610c7f565b820191905f5260205f20905b815481529060010190602001808311610c6257829003601f168201915b5050505050905090565b5f5b82829050811015610d6a57828282818110610ca957610ca861335c565b5b9050602002016020810190610cbe9190612d0b565b73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62600180604051610d559291906133c2565b60405180910390a48080600101915050610c8b565b505050565b5f8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610db05750610daf8284610dd3565b5b80610dcb5750610dca83600c6117a190919063ffffffff16565b5b905092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ea15750610ea08533610dd3565b5b80610ebc5750610ebb33600c6117a190919063ffffffff16565b5b610efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef290613459565b60405180910390fd5b81610f06868561056e565b1015610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e906134e7565b60405180910390fd5b610f5485858585856117ce565b5050505050565b5f610f646112c3565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015610fa95750610fa78682610dd3565b155b15610fed5780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401610fe49291906130b4565b60405180910390fd5b610ffa86868686866117ce565b505050505050565b61100a6111b9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361107a575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016110719190612cf2565b60405180910390fd5b611083816113e4565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60605f60016110fd846118d4565b0190505f8167ffffffffffffffff81111561111b5761111a612602565b5b6040519080825280601f01601f19166020018201604052801561114d5781602001600182028036833780820191505090505b5090505f82602001820190505b6001156111ae578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816111a3576111a2613505565b5b0494505f850361115a575b819350505050919050565b6111c16112c3565b73ffffffffffffffffffffffffffffffffffffffff166111df610a08565b73ffffffffffffffffffffffffffffffffffffffff161461123e576112026112c3565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016112359190612cf2565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036112b0575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016112a79190612cf2565b60405180910390fd5b6112bd5f85858585611a25565b50505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361133a575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016113319190612cf2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036113aa575f6040517f01a835140000000000000000000000000000000000000000000000000000000081526004016113a19190612cf2565b60405180910390fd5b6113b78585858585611a25565b5050505050565b5f60208202602084010151905092915050565b5f60208202602084010151905092915050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611517575f6040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161150e9190612cf2565b60405180910390fd5b5f806115238585611ad1565b915091506115345f87848487611a25565b505050505050565b5f611561835f018373ffffffffffffffffffffffffffffffffffffffff165f1b611b01565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115d9575f6040517fced3e1000000000000000000000000000000000000000000000000000000000081526004016115d09190612cf2565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116c59190612510565b60405180910390a3505050565b5f6116f7835f018373ffffffffffffffffffffffffffffffffffffffff165f1b611b68565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361176f575f6040517f01a835140000000000000000000000000000000000000000000000000000000081526004016117669190612cf2565b60405180910390fd5b5f8061177b8484611ad1565b9150915061179a855f848460405180602001604052805f815250611a25565b5050505050565b5f6117c6835f018373ffffffffffffffffffffffffffffffffffffffff165f1b611c64565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361183e575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016118359190612cf2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036118ae575f6040517f01a835140000000000000000000000000000000000000000000000000000000081526004016118a59190612cf2565b60405180910390fd5b5f806118ba8585611ad1565b915091506118cb8787848487611a25565b50505050505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611930577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161192657611925613505565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061196d576d04ee2d6d415b85acef8100000000838161196357611962613505565b5b0492506020810190505b662386f26fc10000831061199c57662386f26fc10000838161199257611991613505565b5b0492506010810190505b6305f5e10083106119c5576305f5e10083816119bb576119ba613505565b5b0492506008810190505b61271083106119ea5761271083816119e0576119df613505565b5b0492506004810190505b60648310611a0d5760648381611a0357611a02613505565b5b0492506002810190505b600a8310611a1c576001810190505b80915050919050565b611a3185858585611c84565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611aca575f611a6d6112c3565b90506001845103611ab9575f611a8c5f866113d190919063ffffffff16565b90505f611aa25f866113d190919063ffffffff16565b9050611ab2838989858589612014565b5050611ac8565b611ac78187878787876121c3565b5b505b5050505050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b5f611b0c8383611c64565b611b5e57825f0182908060018154018082558091505060019003905f5260205f20015f9091909190915055825f0180549050836001015f8481526020019081526020015f208190555060019050611b62565b5f90505b92915050565b5f80836001015f8481526020019081526020015f205490505f8114611c59575f600182611b95919061355f565b90505f6001865f0180549050611bab919061355f565b9050808214611c11575f865f018281548110611bca57611bc961335c565b5b905f5260205f200154905080875f018481548110611beb57611bea61335c565b5b905f5260205f20018190555083876001015f8381526020019081526020015f2081905550505b855f01805480611c2457611c23613592565b5b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050611c5e565b5f9150505b92915050565b5f80836001015f8481526020019081526020015f20541415905092915050565b8051825114611cce57815181516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401611cc5929190613335565b60405180910390fd5b5f611cd76112c3565b90505f5b8351811015611ed3575f611cf882866113d190919063ffffffff16565b90505f611d0e83866113d190919063ffffffff16565b90505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614611e31575f805f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611ddd57888183856040517f03dee4c5000000000000000000000000000000000000000000000000000000008152600401611dd494939291906135bf565b60405180910390fd5b8181035f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614611ec657805f808481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611ebe9190613602565b925050819055505b5050806001019050611cdb565b506001835103611f8e575f611ef15f856113d190919063ffffffff16565b90505f611f075f856113d190919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051611f7f929190613335565b60405180910390a4505061200d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612004929190613635565b60405180910390a45b5050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b11156121bb578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016120749594939291906136bc565b6020604051808303815f875af19250505080156120af57506040513d601f19601f820116820180604052508101906120ac9190613728565b60015b612130573d805f81146120dd576040519150601f19603f3d011682016040523d82523d5f602084013e6120e2565b606091505b505f81510361212857846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161211f9190612cf2565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146121b957846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016121b09190612cf2565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111561236a578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612223959493929190613753565b6020604051808303815f875af192505050801561225e57506040513d601f19601f8201168201806040525081019061225b9190613728565b60015b6122df573d805f811461228c576040519150601f19603f3d011682016040523d82523d5f602084013e612291565b606091505b505f8151036122d757846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016122ce9190612cf2565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461236857846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161235f9190612cf2565b60405180910390fd5b505b505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6123ac82612383565b9050919050565b6123bc816123a2565b81146123c6575f80fd5b50565b5f813590506123d7816123b3565b92915050565b5f819050919050565b6123ef816123dd565b81146123f9575f80fd5b50565b5f8135905061240a816123e6565b92915050565b5f80604083850312156124265761242561237b565b5b5f612433858286016123c9565b9250506020612444858286016123fc565b9150509250929050565b612457816123dd565b82525050565b5f6020820190506124705f83018461244e565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124aa81612476565b81146124b4575f80fd5b50565b5f813590506124c5816124a1565b92915050565b5f602082840312156124e0576124df61237b565b5b5f6124ed848285016124b7565b91505092915050565b5f8115159050919050565b61250a816124f6565b82525050565b5f6020820190506125235f830184612501565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612560578082015181840152602081019050612545565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61258582612529565b61258f8185612533565b935061259f818560208601612543565b6125a88161256b565b840191505092915050565b5f6020820190508181035f8301526125cb818461257b565b905092915050565b5f602082840312156125e8576125e761237b565b5b5f6125f5848285016123fc565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6126388261256b565b810181811067ffffffffffffffff8211171561265757612656612602565b5b80604052505050565b5f612669612372565b9050612675828261262f565b919050565b5f67ffffffffffffffff82111561269457612693612602565b5b602082029050602081019050919050565b5f80fd5b5f6126bb6126b68461267a565b612660565b905080838252602082019050602084028301858111156126de576126dd6126a5565b5b835b8181101561270757806126f388826123fc565b8452602084019350506020810190506126e0565b5050509392505050565b5f82601f830112612725576127246125fe565b5b81356127358482602086016126a9565b91505092915050565b5f80fd5b5f67ffffffffffffffff82111561275c5761275b612602565b5b6127658261256b565b9050602081019050919050565b828183375f83830152505050565b5f61279261278d84612742565b612660565b9050828152602081018484840111156127ae576127ad61273e565b5b6127b9848285612772565b509392505050565b5f82601f8301126127d5576127d46125fe565b5b81356127e5848260208601612780565b91505092915050565b5f805f80608085870312156128065761280561237b565b5b5f612813878288016123c9565b945050602085013567ffffffffffffffff8111156128345761283361237f565b5b61284087828801612711565b935050604085013567ffffffffffffffff8111156128615761286061237f565b5b61286d87828801612711565b925050606085013567ffffffffffffffff81111561288e5761288d61237f565b5b61289a878288016127c1565b91505092959194509250565b5f805f805f60a086880312156128bf576128be61237b565b5b5f6128cc888289016123c9565b95505060206128dd888289016123c9565b945050604086013567ffffffffffffffff8111156128fe576128fd61237f565b5b61290a88828901612711565b935050606086013567ffffffffffffffff81111561292b5761292a61237f565b5b61293788828901612711565b925050608086013567ffffffffffffffff8111156129585761295761237f565b5b612964888289016127c1565b9150509295509295909350565b5f67ffffffffffffffff82111561298b5761298a612602565b5b6129948261256b565b9050602081019050919050565b5f6129b36129ae84612971565b612660565b9050828152602081018484840111156129cf576129ce61273e565b5b6129da848285612772565b509392505050565b5f82601f8301126129f6576129f56125fe565b5b8135612a068482602086016129a1565b91505092915050565b5f60208284031215612a2457612a2361237b565b5b5f82013567ffffffffffffffff811115612a4157612a4061237f565b5b612a4d848285016129e2565b91505092915050565b5f67ffffffffffffffff821115612a7057612a6f612602565b5b602082029050602081019050919050565b5f612a93612a8e84612a56565b612660565b90508083825260208201905060208402830185811115612ab657612ab56126a5565b5b835b81811015612adf5780612acb88826123c9565b845260208401935050602081019050612ab8565b5050509392505050565b5f82601f830112612afd57612afc6125fe565b5b8135612b0d848260208601612a81565b91505092915050565b5f8060408385031215612b2c57612b2b61237b565b5b5f83013567ffffffffffffffff811115612b4957612b4861237f565b5b612b5585828601612ae9565b925050602083013567ffffffffffffffff811115612b7657612b7561237f565b5b612b8285828601612711565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612bbe816123dd565b82525050565b5f612bcf8383612bb5565b60208301905092915050565b5f602082019050919050565b5f612bf182612b8c565b612bfb8185612b96565b9350612c0683612ba6565b805f5b83811015612c36578151612c1d8882612bc4565b9750612c2883612bdb565b925050600181019050612c09565b5085935050505092915050565b5f6020820190508181035f830152612c5b8184612be7565b905092915050565b5f805f8060808587031215612c7b57612c7a61237b565b5b5f612c88878288016123c9565b9450506020612c99878288016123fc565b9350506040612caa878288016123fc565b925050606085013567ffffffffffffffff811115612ccb57612cca61237f565b5b612cd7878288016127c1565b91505092959194509250565b612cec816123a2565b82525050565b5f602082019050612d055f830184612ce3565b92915050565b5f60208284031215612d2057612d1f61237b565b5b5f612d2d848285016123c9565b91505092915050565b612d3f816124f6565b8114612d49575f80fd5b50565b5f81359050612d5a81612d36565b92915050565b5f8060408385031215612d7657612d7561237b565b5b5f612d83858286016123c9565b9250506020612d9485828601612d4c565b9150509250929050565b5f80fd5b5f8083601f840112612db757612db66125fe565b5b8235905067ffffffffffffffff811115612dd457612dd3612d9e565b5b602083019150836020820283011115612df057612def6126a5565b5b9250929050565b5f8060208385031215612e0d57612e0c61237b565b5b5f83013567ffffffffffffffff811115612e2a57612e2961237f565b5b612e3685828601612da2565b92509250509250929050565b5f8060408385031215612e5857612e5761237b565b5b5f612e65858286016123c9565b9250506020612e76858286016123c9565b9150509250929050565b5f805f805f60a08688031215612e9957612e9861237b565b5b5f612ea6888289016123c9565b9550506020612eb7888289016123c9565b9450506040612ec8888289016123fc565b9350506060612ed9888289016123fc565b925050608086013567ffffffffffffffff811115612efa57612ef961237f565b5b612f06888289016127c1565b9150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612f5757607f821691505b602082108103612f6a57612f69612f13565b5b50919050565b5f81905092915050565b5f819050815f5260205f209050919050565b5f8154612f9881612f40565b612fa28186612f70565b9450600182165f8114612fbc5760018114612fd157613003565b60ff1983168652811515820286019350613003565b612fda85612f7a565b5f5b83811015612ffb57815481890152600182019150602081019050612fdc565b838801955050505b50505092915050565b5f61301682612529565b6130208185612f70565b9350613030818560208601612543565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f613070600583612f70565b915061307b8261303c565b600582019050919050565b5f6130918285612f8c565b915061309d828461300c565b91506130a882613064565b91508190509392505050565b5f6040820190506130c75f830185612ce3565b6130d46020830184612ce3565b9392505050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026131257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826130ea565b61312f86836130ea565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61316a613165613160846123dd565b613147565b6123dd565b9050919050565b5f819050919050565b61318383613150565b61319761318f82613171565b8484546130f6565b825550505050565b5f90565b6131ab61319f565b6131b681848461317a565b505050565b5b818110156131d9576131ce5f826131a3565b6001810190506131bc565b5050565b601f82111561321e576131ef81612f7a565b6131f8846130db565b81016020851015613207578190505b61321b613213856130db565b8301826131bb565b50505b505050565b5f82821c905092915050565b5f61323e5f1984600802613223565b1980831691505092915050565b5f613256838361322f565b9150826002028217905092915050565b61326f82612529565b67ffffffffffffffff81111561328857613287612602565b5b6132928254612f40565b61329d8282856131dd565b5f60209050601f8311600181146132ce575f84156132bc578287015190505b6132c6858261324b565b86555061332d565b601f1984166132dc86612f7a565b5f5b82811015613303578489015182556001820191506020850194506020810190506132de565b86831015613320578489015161331c601f89168261322f565b8355505b6001600288020188555050505b505050505050565b5f6040820190506133485f83018561244e565b613355602083018461244e565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6133ac6133a76133a284613389565b613147565b6123dd565b9050919050565b6133bc81613392565b82525050565b5f6040820190506133d55f8301856133b3565b6133e260208301846133b3565b9392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e65722c2061705f8201527f70726f7665642c206e6f72206f70657261746f72000000000000000000000000602082015250565b5f613443603483612533565b915061344e826133e9565b604082019050919050565b5f6020820190508181035f83015261347081613437565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f5f8201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b5f6134d1602a83612533565b91506134dc82613477565b604082019050919050565b5f6020820190508181035f8301526134fe816134c5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613569826123dd565b9150613574836123dd565b925082820390508181111561358c5761358b613532565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f6080820190506135d25f830187612ce3565b6135df602083018661244e565b6135ec604083018561244e565b6135f9606083018461244e565b95945050505050565b5f61360c826123dd565b9150613617836123dd565b925082820190508082111561362f5761362e613532565b5b92915050565b5f6040820190508181035f83015261364d8185612be7565b905081810360208301526136618184612be7565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f61368e8261366a565b6136988185613674565b93506136a8818560208601612543565b6136b18161256b565b840191505092915050565b5f60a0820190506136cf5f830188612ce3565b6136dc6020830187612ce3565b6136e9604083018661244e565b6136f6606083018561244e565b81810360808301526137088184613684565b90509695505050505050565b5f81519050613722816124a1565b92915050565b5f6020828403121561373d5761373c61237b565b5b5f61374a84828501613714565b91505092915050565b5f60a0820190506137665f830188612ce3565b6137736020830187612ce3565b81810360408301526137858186612be7565b905081810360608301526137998185612be7565b905081810360808301526137ad8184613684565b9050969550505050505056fea2646970667358221220afb522207c7a80d1ed1426bca2c211512a1917eebc52d42e16c6c40a17fff22764736f6c6343000816003354686973204e46542063616e206265207377617070656420666f7220574254432061742068747470733a2f2f776274632d6e66742e6f726768747470733a2f2f776f726b73616e6474726176656c732e636f6d2f646f6e6f746368616e67652f6e776274632f776274632d6e66742e6f7267206f72204f532f636f6c6c656374696f6e2f6e7762746320746f2052656465656d20616e64205377617020796f7572204e465420666f7220574254432068747470733a2f2f776f726b73616e6474726176656c732e636f6d2f646f6e6f746368616e67652f6e776274632f776274632e706e67