60806040526001600755737fde4f9385573236c5b809880b175c35babb15f260095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801562000069575f80fd5b50604051620042483803806200424883398181016040528101906200008f91906200044e565b806040518060400160405280600981526020017f5468616e517565756500000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f5448510000000000000000000000000000000000000000000000000000000000815250815f90816200010c9190620006e2565b5080600190816200011e9190620006e2565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000194575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200018b9190620007d7565b60405180910390fd5b620001a581620001be60201b60201c565b50620001b7816200028160201b60201c565b50620007f2565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002916200031860201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000304575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620002fb9190620007d7565b60405180910390fd5b6200031581620001be60201b60201c565b50565b62000328620003ba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200034e620003c160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003b8576200037a620003ba60201b60201c565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401620003af9190620007d7565b60405180910390fd5b565b5f33905090565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200041882620003ed565b9050919050565b6200042a816200040c565b811462000435575f80fd5b50565b5f8151905062000448816200041f565b92915050565b5f60208284031215620004665762000465620003e9565b5b5f620004758482850162000438565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620004fa57607f821691505b60208210810362000510576200050f620004b5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620005747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000537565b62000580868362000537565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620005ca620005c4620005be8462000598565b620005a1565b62000598565b9050919050565b5f819050919050565b620005e583620005aa565b620005fd620005f482620005d1565b84845462000543565b825550505050565b5f90565b6200061362000605565b62000620818484620005da565b505050565b5b8181101562000647576200063b5f8262000609565b60018101905062000626565b5050565b601f8211156200069657620006608162000516565b6200066b8462000528565b810160208510156200067b578190505b620006936200068a8562000528565b83018262000625565b50505b505050565b5f82821c905092915050565b5f620006b85f19846008026200069b565b1980831691505092915050565b5f620006d28383620006a7565b9150826002028217905092915050565b620006ed826200047e565b67ffffffffffffffff81111562000709576200070862000488565b5b620007158254620004e2565b620007228282856200064b565b5f60209050601f83116001811462000758575f841562000743578287015190505b6200074f8582620006c5565b865550620007be565b601f198416620007688662000516565b5f5b8281101562000791578489015182556001820191506020850194506020810190506200076a565b86831015620007b15784890151620007ad601f891682620006a7565b8355505b6001600288020188555050505b505050505050565b620007d1816200040c565b82525050565b5f602082019050620007ec5f830184620007c6565b92915050565b613a4880620008005f395ff3fe608060405234801561000f575f80fd5b50600436106101a7575f3560e01c806395d89b41116100f7578063e418083511610095578063f314ea781161006f578063f314ea78146104f1578063f6de93e414610528578063f941049d14610558578063fb6cc85514610574576101a7565b8063e418083514610475578063e985e9c5146104a5578063f2fde38b146104d5576101a7565b8063a22cb465116100d1578063a22cb465146103ef578063b88d4fde1461040b578063bde0cba014610427578063c87b56dd14610445576101a7565b806395d89b411461038357806396949420146103a157806398bdf6f5146103d1576101a7565b80632a521e1f1161016457806370a082311161013e57806370a08231146102fb578063715018a61461032b578063811eada5146103355780638da5cb5b14610365576101a7565b80632a521e1f1461027f57806342842e0e146102af5780636352211e146102cb576101a7565b806301ffc9a7146101ab57806306fdde03146101db578063081812fc146101f95780630839d5f714610229578063095ea7b31461024757806323b872dd14610263575b5f80fd5b6101c560048036038101906101c0919061293b565b610590565b6040516101d29190612980565b60405180910390f35b6101e3610671565b6040516101f09190612a23565b60405180910390f35b610213600480360381019061020e9190612a76565b610700565b6040516102209190612ae0565b60405180910390f35b61023161071b565b60405161023e9190612b08565b60405180910390f35b610261600480360381019061025c9190612b4b565b610721565b005b61027d60048036038101906102789190612b89565b610737565b005b61029960048036038101906102949190612b4b565b610836565b6040516102a69190612b08565b60405180910390f35b6102c960048036038101906102c49190612b89565b610861565b005b6102e560048036038101906102e09190612a76565b610880565b6040516102f29190612ae0565b60405180910390f35b61031560048036038101906103109190612bd9565b610891565b6040516103229190612b08565b60405180910390f35b610333610947565b005b61034f600480360381019061034a9190612c04565b61095a565b60405161035c9190612b08565b60405180910390f35b61036d61097a565b60405161037a9190612ae0565b60405180910390f35b61038b6109a2565b6040516103989190612a23565b60405180910390f35b6103bb60048036038101906103b69190612a76565b610a32565b6040516103c89190612b08565b60405180910390f35b6103d9610db6565b6040516103e69190612b08565b60405180910390f35b61040960048036038101906104049190612c6c565b610dbc565b005b61042560048036038101906104209190612dd6565b610dd2565b005b61042f610df7565b60405161043c9190612ae0565b60405180910390f35b61045f600480360381019061045a9190612a76565b610e1c565b60405161046c9190612a23565b60405180910390f35b61048f600480360381019061048a9190612bd9565b610e82565b60405161049c9190612980565b60405180910390f35b6104bf60048036038101906104ba9190612e56565b610e9f565b6040516104cc9190612980565b60405180910390f35b6104ef60048036038101906104ea9190612bd9565b610f2d565b005b61050b60048036038101906105069190612a76565b610fb1565b60405161051f989796959493929190612e94565b60405180910390f35b610542600480360381019061053d9190612a76565b61113f565b60405161054f9190612b08565b60405180910390f35b610572600480360381019061056d9190612a76565b61119c565b005b61058e60048036038101906105899190612fbc565b61186b565b005b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061065a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061066a575061066982611912565b5b9050919050565b60605f805461067f9061305f565b80601f01602080910402602001604051908101604052809291908181526020018280546106ab9061305f565b80156106f65780601f106106cd576101008083540402835291602001916106f6565b820191905f5260205f20905b8154815290600101906020018083116106d957829003601f168201915b5050505050905090565b5f61070a8261197b565b5061071482611a01565b9050919050565b60085481565b610733828261072e611a3a565b611a41565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107a7575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161079e9190612ae0565b60405180910390fd5b5f6107ba83836107b5611a3a565b611a53565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610830578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016108279392919061308f565b60405180910390fd5b50505050565b600c602052815f5260405f20818154811061084f575f80fd5b905f5260205f20015f91509150505481565b61087b83838360405180602001604052805f815250610dd2565b505050565b5f61088a8261197b565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610902575f6040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016108f99190612ae0565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61094f611c5e565b6109585f611ce5565b565b600b602052815f5260405f20602052805f5260405f205f91509150505481565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546109b19061305f565b80601f01602080910402602001604051908101604052809291908181526020018280546109dd9061305f565b8015610a285780601f106109ff57610100808354040283529160200191610a28565b820191905f5260205f20905b815481529060010190602001808311610a0b57829003601f168201915b5050505050905090565b5f80600a5f8481526020019081526020015f2090505f816001015411610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a849061310e565b60405180910390fd5b7fa150e54975e257463b874bfeb9c473d0be169592c9b905ba2ab2340c4f302c7c816006015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054604051610afb9190612b08565b60405180910390a16001816006015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c90613176565b60405180910390fd5b5f8160010154905033826005015f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080826006015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600754600b5f8681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555033826004015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f6007549050610cc73382611da8565b3373ffffffffffffffffffffffffffffffffffffffff16857ff4166c7c0de8948e636c4ecc7ba7d6c5e60e8b7d4beee775aaf58db61c20182483604051610d0e9190612b08565b60405180910390a3600c5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2085908060018154018082558091505060019003905f5260205f20015f9091909190915055600160075f828254610d8991906131c1565b925050819055506001836001015f828254610da491906131c1565b92505081905550809350505050919050565b60075481565b610dce610dc7611a3a565b8383611e9b565b5050565b610ddd848484610737565b610df1610de8611a3a565b85858585612004565b50505050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060610e278261197b565b505f610e316121b0565b90505f815111610e4f5760405180602001604052805f815250610e7a565b80610e59846121c6565b604051602001610e6a92919061322e565b6040516020818303038152906040525b915050919050565b600d602052805f5260405f205f915054906101000a900460ff1681565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b610f35611c5e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fa5575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610f9c9190612ae0565b60405180910390fd5b610fae81611ce5565b50565b600a602052805f5260405f205f91509050805f015490806001015490806002015490806003015490806004015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806008015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060090180546110329061305f565b80601f016020809104026020016040519081016040528092919081815260200182805461105e9061305f565b80156110a95780601f10611080576101008083540402835291602001916110a9565b820191905f5260205f20905b81548152906001019060200180831161108c57829003601f168201915b50505050509080600a0180546110be9061305f565b80601f01602080910402602001604051908101604052809291908181526020018280546110ea9061305f565b80156111355780601f1061110c57610100808354040283529160200191611135565b820191905f5260205f20905b81548152906001019060200180831161111857829003601f168201915b5050505050905088565b5f80600a5f8481526020019081526020015f209050806006015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054915050919050565b5f600a5f8381526020019081526020015f209050806008015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611241576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112389061329b565b60405180910390fd5b5f8073ffffffffffffffffffffffffffffffffffffffff16826007015f846002015481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156113315750600d5f836007015f856002015481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156114a357816007015f836002015481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16837fafbe81c65ba871a01e7e62ba017a06e00d74bb103a9d8a32859f251eb560fc9e60405160405180910390a380826004015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816007015f836002015481526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001826002015f82825461149791906131c1565b925050819055506117b3565b816005015f835f015481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600d5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156116415780826007015f846003015481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828173ffffffffffffffffffffffffffffffffffffffff167f7136e860e6e7fb98c97fb2b4f0deea83fd2df17172f9d10d0c1422e7b4f8115060405160405180910390a35f826004015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001826003015f82825461161991906131c1565b925050819055506001825f015f82825461163391906131c1565b925050819055505050611868565b6001600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f826006015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550816005015f835f015481526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905580826004015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16837fafbe81c65ba871a01e7e62ba017a06e00d74bb103a9d8a32859f251eb560fc9e60405160405180910390a36001825f015f8282546117ab91906131c1565b925050819055505b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ba3d69d730836117fb87612290565b60405160200161180b9190613475565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161183893929190613535565b5f604051808303815f87803b15801561184f575f80fd5b505af1158015611861573d5f803e3d5ffd5b5050505050505b50565b5f600a5f60085f81548092919061188190613571565b9190505581526020019081526020015f209050600181600101819055506001815f018190555033816008015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160090190816118fa9190613755565b508181600a01908161190c9190613755565b50505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8061198683612409565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119f857826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016119ef9190612b08565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b611a4e8383836001612442565b505050565b5f80611a5e84612409565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611a9f57611a9e818486612601565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b2a57611ade5f855f80612442565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611ba957600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b611c66611a3a565b73ffffffffffffffffffffffffffffffffffffffff16611c8461097a565b73ffffffffffffffffffffffffffffffffffffffff1614611ce357611ca7611a3a565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611cda9190612ae0565b60405180910390fd5b565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e18575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611e0f9190612ae0565b60405180910390fd5b5f611e2483835f611a53565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e96575f6040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401611e8d9190612ae0565b60405180910390fd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f0b57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401611f029190612ae0565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ff79190612980565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b11156121a9578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b81526004016120629493929190613824565b6020604051808303815f875af192505050801561209d57506040513d601f19601f8201168201806040525081019061209a9190613882565b60015b61211e573d805f81146120cb576040519150601f19603f3d011682016040523d82523d5f602084013e6120d0565b606091505b505f81510361211657836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161210d9190612ae0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146121a757836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161219e9190612ae0565b60405180910390fd5b505b5050505050565b606060405180602001604052805f815250905090565b60605f60016121d4846126c4565b0190505f8167ffffffffffffffff8111156121f2576121f1612cb2565b5b6040519080825280601f01601f1916602001820160405280156122245781602001600182028036833780820191505090505b5090505f82602001820190505b600115612285578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161227a576122796138ad565b5b0494505f8503612231575b819350505050919050565b60605f82036122d6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612404565b5f8290505f5b5f82146123055780806122ee90613571565b915050600a826122fe91906138da565b91506122dc565b5f8167ffffffffffffffff8111156123205761231f612cb2565b5b6040519080825280601f01601f1916602001820160405280156123525781602001600182028036833780820191505090505b5090505f8290505b5f86146123fc5760018161236e919061390a565b90505f600a808861237f91906138da565b612389919061393d565b87612394919061390a565b60306123a0919061398a565b90508060f81b8383815181106123b9576123b86139be565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a876123f491906138da565b96505061235a565b819450505050505b919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061247a57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125ac575f6124898461197b565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124f357508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561250657506125048184610e9f565b155b1561254857826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161253f9190612ae0565b60405180910390fd5b81156125aa57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b61260c838383612815565b6126bf575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361268057806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016126779190612b08565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016126b69291906139eb565b60405180910390fd5b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612720577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612716576127156138ad565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061275d576d04ee2d6d415b85acef81000000008381612753576127526138ad565b5b0492506020810190505b662386f26fc10000831061278c57662386f26fc100008381612782576127816138ad565b5b0492506010810190505b6305f5e10083106127b5576305f5e10083816127ab576127aa6138ad565b5b0492506008810190505b61271083106127da5761271083816127d0576127cf6138ad565b5b0492506004810190505b606483106127fd57606483816127f3576127f26138ad565b5b0492506002810190505b600a831061280c576001810190505b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128cc57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061288d575061288c8484610e9f565b5b806128cb57508273ffffffffffffffffffffffffffffffffffffffff166128b383611a01565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61291a816128e6565b8114612924575f80fd5b50565b5f8135905061293581612911565b92915050565b5f602082840312156129505761294f6128de565b5b5f61295d84828501612927565b91505092915050565b5f8115159050919050565b61297a81612966565b82525050565b5f6020820190506129935f830184612971565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156129d05780820151818401526020810190506129b5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6129f582612999565b6129ff81856129a3565b9350612a0f8185602086016129b3565b612a18816129db565b840191505092915050565b5f6020820190508181035f830152612a3b81846129eb565b905092915050565b5f819050919050565b612a5581612a43565b8114612a5f575f80fd5b50565b5f81359050612a7081612a4c565b92915050565b5f60208284031215612a8b57612a8a6128de565b5b5f612a9884828501612a62565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612aca82612aa1565b9050919050565b612ada81612ac0565b82525050565b5f602082019050612af35f830184612ad1565b92915050565b612b0281612a43565b82525050565b5f602082019050612b1b5f830184612af9565b92915050565b612b2a81612ac0565b8114612b34575f80fd5b50565b5f81359050612b4581612b21565b92915050565b5f8060408385031215612b6157612b606128de565b5b5f612b6e85828601612b37565b9250506020612b7f85828601612a62565b9150509250929050565b5f805f60608486031215612ba057612b9f6128de565b5b5f612bad86828701612b37565b9350506020612bbe86828701612b37565b9250506040612bcf86828701612a62565b9150509250925092565b5f60208284031215612bee57612bed6128de565b5b5f612bfb84828501612b37565b91505092915050565b5f8060408385031215612c1a57612c196128de565b5b5f612c2785828601612a62565b9250506020612c3885828601612b37565b9150509250929050565b612c4b81612966565b8114612c55575f80fd5b50565b5f81359050612c6681612c42565b92915050565b5f8060408385031215612c8257612c816128de565b5b5f612c8f85828601612b37565b9250506020612ca085828601612c58565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612ce8826129db565b810181811067ffffffffffffffff82111715612d0757612d06612cb2565b5b80604052505050565b5f612d196128d5565b9050612d258282612cdf565b919050565b5f67ffffffffffffffff821115612d4457612d43612cb2565b5b612d4d826129db565b9050602081019050919050565b828183375f83830152505050565b5f612d7a612d7584612d2a565b612d10565b905082815260208101848484011115612d9657612d95612cae565b5b612da1848285612d5a565b509392505050565b5f82601f830112612dbd57612dbc612caa565b5b8135612dcd848260208601612d68565b91505092915050565b5f805f8060808587031215612dee57612ded6128de565b5b5f612dfb87828801612b37565b9450506020612e0c87828801612b37565b9350506040612e1d87828801612a62565b925050606085013567ffffffffffffffff811115612e3e57612e3d6128e2565b5b612e4a87828801612da9565b91505092959194509250565b5f8060408385031215612e6c57612e6b6128de565b5b5f612e7985828601612b37565b9250506020612e8a85828601612b37565b9150509250929050565b5f61010082019050612ea85f83018b612af9565b612eb5602083018a612af9565b612ec26040830189612af9565b612ecf6060830188612af9565b612edc6080830187612ad1565b612ee960a0830186612ad1565b81810360c0830152612efb81856129eb565b905081810360e0830152612f0f81846129eb565b90509998505050505050505050565b5f67ffffffffffffffff821115612f3857612f37612cb2565b5b612f41826129db565b9050602081019050919050565b5f612f60612f5b84612f1e565b612d10565b905082815260208101848484011115612f7c57612f7b612cae565b5b612f87848285612d5a565b509392505050565b5f82601f830112612fa357612fa2612caa565b5b8135612fb3848260208601612f4e565b91505092915050565b5f8060408385031215612fd257612fd16128de565b5b5f83013567ffffffffffffffff811115612fef57612fee6128e2565b5b612ffb85828601612f8f565b925050602083013567ffffffffffffffff81111561301c5761301b6128e2565b5b61302885828601612f8f565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061307657607f821691505b60208210810361308957613088613032565b5b50919050565b5f6060820190506130a25f830186612ad1565b6130af6020830185612af9565b6130bc6040830184612ad1565b949350505050565b7f426f6f746820646f6573206e6f742065786973740000000000000000000000005f82015250565b5f6130f86014836129a3565b9150613103826130c4565b602082019050919050565b5f6020820190508181035f830152613125816130ec565b9050919050565b7f416c726561647920696e20717565756520666f72207468697320626f6f7468005f82015250565b5f613160601f836129a3565b915061316b8261312c565b602082019050919050565b5f6020820190508181035f83015261318d81613154565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6131cb82612a43565b91506131d683612a43565b92508282019050808211156131ee576131ed613194565b5b92915050565b5f81905092915050565b5f61320882612999565b61321281856131f4565b93506132228185602086016129b3565b80840191505092915050565b5f61323982856131fe565b915061324582846131fe565b91508190509392505050565b7f43616c6c6572206973206e6f7420746865206f70657261746f720000000000005f82015250565b5f613285601a836129a3565b915061329082613251565b602082019050919050565b5f6020820190508181035f8301526132b281613279565b9050919050565b7f30000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6132ed6001836131f4565b91506132f8826132b9565b600182019050919050565b7f2b000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6133376001836131f4565b915061334282613303565b600182019050919050565b7f33000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6133816001836131f4565b915061338c8261334d565b600182019050919050565b7f426f6f74682051756575652055706461746500000000000000000000000000005f82015250565b5f6133cb6012836131f4565b91506133d682613397565b601282019050919050565b7f4974277320796f7572207475726e20617420626f6f74682000000000000000005f82015250565b5f6134156018836131f4565b9150613420826133e1565b601882019050919050565b7f21000000000000000000000000000000000000000000000000000000000000005f82015250565b5f61345f6001836131f4565b915061346a8261342b565b600182019050919050565b5f61347f826132e1565b915061348a8261332b565b915061349582613375565b91506134a08261332b565b91506134ab826133bf565b91506134b68261332b565b91506134c182613409565b91506134cd82846131fe565b91506134d882613453565b915081905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f613507826134e3565b61351181856134ed565b93506135218185602086016129b3565b61352a816129db565b840191505092915050565b5f6060820190506135485f830186612ad1565b6135556020830185612ad1565b818103604083015261356781846134fd565b9050949350505050565b5f61357b82612a43565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135ad576135ac613194565b5b600182019050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026136147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826135d9565b61361e86836135d9565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61365961365461364f84612a43565b613636565b612a43565b9050919050565b5f819050919050565b6136728361363f565b61368661367e82613660565b8484546135e5565b825550505050565b5f90565b61369a61368e565b6136a5818484613669565b505050565b5b818110156136c8576136bd5f82613692565b6001810190506136ab565b5050565b601f82111561370d576136de816135b8565b6136e7846135ca565b810160208510156136f6578190505b61370a613702856135ca565b8301826136aa565b50505b505050565b5f82821c905092915050565b5f61372d5f1984600802613712565b1980831691505092915050565b5f613745838361371e565b9150826002028217905092915050565b61375e82612999565b67ffffffffffffffff81111561377757613776612cb2565b5b613781825461305f565b61378c8282856136cc565b5f60209050601f8311600181146137bd575f84156137ab578287015190505b6137b5858261373a565b86555061381c565b601f1984166137cb866135b8565b5f5b828110156137f2578489015182556001820191506020850194506020810190506137cd565b8683101561380f578489015161380b601f89168261371e565b8355505b6001600288020188555050505b505050505050565b5f6080820190506138375f830187612ad1565b6138446020830186612ad1565b6138516040830185612af9565b818103606083015261386381846134fd565b905095945050505050565b5f8151905061387c81612911565b92915050565b5f60208284031215613897576138966128de565b5b5f6138a48482850161386e565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6138e482612a43565b91506138ef83612a43565b9250826138ff576138fe6138ad565b5b828204905092915050565b5f61391482612a43565b915061391f83612a43565b925082820390508181111561393757613936613194565b5b92915050565b5f61394782612a43565b915061395283612a43565b925082820261396081612a43565b9150828204841483151761397757613976613194565b5b5092915050565b5f60ff82169050919050565b5f6139948261397e565b915061399f8361397e565b9250828201905060ff8111156139b8576139b7613194565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6040820190506139fe5f830185612ad1565b613a0b6020830184612af9565b939250505056fea2646970667358221220cfe0da9bafca9ade2dc9d41713605a1ab3096653c6339b550f61c4c7b79c88b764736f6c634300081400330000000000000000000000007fde4f9385573236c5b809880b175c35babb15f2